k8s中大部分概念如node/pod等都可以看做资源对象,k8s其实是一个高度自动化的资源控制系统,通过跟踪比对etcd里的资源期望状态和当前环境里的
实际资源状态差异来实现自动控制和自动纠错的高级功能。
在Kubernetes中创建对象时,必须提供描述其所需Status的对象Spec,以及关于对象(如name)的一些基本信息。k8s对象示例必填字段:apiVersion 、kind 、metadata及对象Spec,spec是容器组的定义。顺便提下k8s的Events概念,它是一个事件的记录,记录了事件的最早产生时间、最后重现时间等众多信息。

Kubernetes集群的两种类型资源
Master节点:协调控制整个集群。
Nodes节点:运行应用的工作节点。
1. Master组件负责整个集群的管理和控制。基本上所有的控制命令都发给它,命令都是在master节点上运行的,他来负责整体的执行过程,一般独自占一台机器,如果宕机或不可用,那么对容器应用的控制将失效。
2. kube-apiserver用于暴露Kubernetes API,k8s所有资源增删改查操作的唯一入口。
3. etcd是Kubernetes提供默认的存储系统,保存所有集群数据
4. kube-controller-manager资源对象的自动化控制中心
5. kube-schedule 负责资源调度的进程

节点(Node)组件
提供Kubernetes运行时环境,以及维护Pod。可以在运行期间动态增加到k8s集群中,前提是这个节点已正确安装

kubelet负责pod对应容器的创建、启停等任务,同时与master密切协作,实现集群管理的基本功能
kube-proxy 实现k8s service的通信和负载均衡的重要组件
一个Node可以是VM或物理机。每个Node都会运行pod的一些必要服务包括Docker、kubelet和kube-proxy,并由Master组件进行管理
–Node Status节点的状态信息包含:Addresses
Condition 描述所有Running节点的状态。被表示为一个JSON对象。
Capacity
Info
–与 pods 和 services 不同,node不是由Kubernetes 系统创建,
目前,有三个组件与Kubernetes节点接口进行交互:节点控制器(node controller)、kubelet和kubectl。
–Node是Kubernetes REST API中的*别资源。
label Selector
15、使用label和label Selector可以给对象创建多组标签,label和label Selector共同构成了k8s系统中最核心的应用模型,使得被管理对象能够被精细的分组管理,同时实现了整个集群的高可用性。

namespaces
kubernetes最重要的对象Pod。
Kubernetes REST API中的所有对象都用Name和UID来明确地标识。
Name在一个对象中同一时间只能拥有单个Name,删除一个namespace会自动删除所有属于该namespace的资源。命令行操作NameSpace:

kubectl create namespace new-namespace
kubectl create -f ./my-namespace.yaml
kubectl delete namespaces new-namespace
kubectl get namespaces //列出当前群集中的namespace
1
2
3
4
volume
Kubernetes Volume具有明确的生命周期 - 与pod相同。而Docker的Volume只是磁盘中的一个目录,生命周期不受管理。
Kubernetes支持Volume类型有:emptyDir、hostPath等,只要Node上的Pod一直运行,Volume就会一直存在。
当Pod(不管任何原因)从Node上被删除时,emptyDir也同时会删除,存储的数据也将永久删除。
在同一个pod中的多个容器能够共享pod级别的存储卷volume。

Annotations
Annotations就如标签一样,也是由key/value组成:
–构建、发布的镜像信息,如时间戳,发行ID,git分支,PR编号,镜像hashes和注Registry地址。
–一些日志记录、监视、分析或audit repositories。
–一些工具信息:例如,名称、版本和构建信息。
–用户或工具/系统来源信息,例如来自其他生态系统组件对象的URL。
–负责人电话/座机,或一些信息目录。

pod
Pod是Kubernetes创建或部署的最小/最简单的基本单位,一个Pod代表集群上正在运行的一个进程。
一个Pod封装一个应用容器(也可以有多个容器),存储资源、一个独立的网络IP以及管理控制容器运行方式的策略选项。
Pod代表部署的一个单位:Kubernetes中单个应用的实例,它可能由单个容器或多个容器共享组成的资源。有点类似serverrole
–Pod中运行一个容器。“one-container-per-Pod”模式是Kubernetes最常见的用法;
在这种情况下,你可以将Pod视为单个封装的容器,但是Kubernetes是直接管理Pod而不是容器。
–如果Pods中运行多个需要一起工作的容器。它们之间能够共享资源,在单个Pod*同管理多个容器是一个相对高级的用法
–每个Pod被分配一个独立的IP地址,Pod可以指定一组共享存储volumes。
【注意点】重启Pod中的容器跟重启Pod不是一回事。Pod只提供容器的运行环境并保持容器的运行状态,重启容器不会造成Pod重启。
kubernetes中,pod大部分场景下只是容器的载体而已,通常需要通过Deployment、RC等对象来完成一组pod的调度和自动控制功能。

replicaSets
官方建议使用Deployment来管理ReplicaSets,这意味着我们不需要操作ReplicaSet对象,而是使用Deployment管理 。
ReplicaSet(RS)副本集是Replication Controller(RC)的升级版本,用来保证pod的高可用
通过监控运行中的pod来保证集群中运行指定数量的pod副本,少于指定数目就会根据模板创建,多了就会杀死多余的pod副本。
replication理解为复制品、副本
rc其实是定义了一个期望的场景,包含三个部分:期待的副本数(replicas),用于筛选目标pod的label selector,以及副本数量小于预期数时用于创建新pod的模板

deployment
你只需要在 Deployment 中描述您想要的目标状态是什么,Deployment controller 就会帮您将 Pod 和ReplicaSet 的实际状态改变到您的目标状态。

分类:

技术点:

相关文章: