预期状态是Kubernetes的核心理念之一。用户可以自由定义Pod内的容器执行状态。如果因为某种故障该容器停止了运行,Kubernetes会基于预期状态重新创建Pod。
Kubernetes严格确保集群里运行的所有容器总是在预期状态下。这是由Kubernetes Master实现的,它是Kubernetes控制平面(Control Plane)的一部分。用户可以使用kubectl直接和集群交互,通过Kubernetes API设置或者修改预期状态。
Kubernetes对象
根据Kubernetes文档里所述:Kubernetes对象是“意图记录”——一旦用户创建了对象,Kubernetes系统会持续工作保证这个对象的存在。用户通过创建对象来告诉Kubernetes系统自己希望集群里的工作负载是什么样子;这就是集群的预期状态。任意时刻系统里的实体状态是由Kubernetes对象来表示的。Kubernetes对象也是容器接口之上的另一层抽象层。用户可以直接和Kubernetes对象交互,而不用和容器直接交互。基本的Kubernetes对象如下:
- Pod是节点上的最小的部署单元。它是一组必须一起运行的容器。一般来说,但不是必须的,Pod通常包含一个容器。
- service用来定义一组逻辑上存在关系的Pod以及访问它们的相关策略。
- Volume是Pod里所有容器都能访问的目录。
- Namespace是由物理集群支撑的虚拟集群。
Kubernetes提供了一些控制器(Controller)。这些控制器基于Kubernetes的基础对象构建并提供额外的特性。Kubernetes控制器包括:
- ReplicaSet确保在给定时间运行着特定数量的Pod副本
- Deployment用来将当前状态变更到预期状态
- StatefulSet用来控制部署顺序以及卷的访问等等。
- DaemonSet用来在集群的所有节点或者特定节点运行Pod的拷贝。
- Job用来执行一些任务并且在成功完成工作之后或者在给定时间之后退出。
Kubernetes控制平面
Kubernetes控制平面的工作就是确保集群的当前状态和用户的预期状态一致。要实现这一目标,Kubernetes会自动执行一系列任务——比如,启动或者重启容器,扩展某个给定应用的副本数量,等等。
Kubernetes文档定义如下:Kubernetes控制平面的各个部分,比如Kubernetes Master以及kubelet进程,管控Kubernetes和用户集群的通信。控制平面维护系统里所有Kubernetes对象的记录,并且持续运行控制回路来管理对象的状态。在任意时间,控制平面的控制回路会响应集群的变化,并且让系统里所有对象的实际状态匹配上用户定义的预期状态。Kubernetes控制平面负责维护集群内的预期状态。它记录对象状态并且持续运行控制回路去检查对象的当前状态是否和预期状态匹配。你可以把它看作是管理国家的政府。
Kubernetes Master
作为Kubernetes控制平面的一部分,Kubernetes master的工作是持续维护集群的预期状态。kubectl命令是通过Kubernetes API和集群的Kubernetes master通信的接口。可以看作负责维护法律和秩序的警察机构。
Kubernetes文档定义:“master”指的是管理集群状态的一组进程。通常这些进程都运行在集群里的单个节点上,并且该节点也称为master节点。master也可以被复制用于实现高可用和冗余。Kubernetes Master控制并且协调集群里的所有节点,包括运行在集群里一个或者多个master节点上的三个进程:
- kube-apiserver:整个集群的单点管理点。API server实现了RESTful的接口,用于和工具以及库函数的通信。kubectl命令直接和API server交互。
- kube-controller-manager:通过管理不同类型的控制器来规范集群的状态。
- kube-scheduler:在集群里的可用节点上调度工作负载。
Kubernetes节点