pod是Kubernetes中的基本部署单元。通过《(五)Kubernetes系列之pod》学习你已知道如何手动创建、监督和管理它们。但在实际的应用中,你希望你的部署能自动保持运行,并且保持健康,不需要任何的手动干预。所以你几乎不会直接创建pod,而是创建ReplicationController或Deployment这样的资源控制器来创建并管理实际的pod。

Deployment控制器通过自定义Pod模板设置相应控制参数实现水平伸缩,以调节正在运行的相同Pod数。如果Pod或主机出现故障,则会自动启用新的Pod进行补充,以保证在集群中部署的Pod数与配置中的Pod数保持一致。Deployment控制器以ReplicaSet控制器为基础,增加了更灵活的生命周期管理功能,例如,滚动更新和回滚。

1.Deployment控制器的创建

1.1 创建模板文件

vi nginxdeployment.yml

内容如下:

 

说明:

apiVersion表示使用的API版本

kind表示要创建的资源对象

metadata表示该资源对象的元数据。一个资源对象可拥有多个元数据,资源对象的name项,表示当前资源的命名。

spec表示该资源对象的具体设置

replicas:表示在控制器下托管的Pod需要保持的副本数量

selector/matchLabels:表示一个或多个自定义标签(label),其形式为键值对

template:Pod模板

1.2 执行命令使用1.1的模板创建deployment

kubectl apply -f [模板名] –record

注意:一定要带参数–record,这样会把每次修改Deployment控制器时所使用的命令记录到备注字段中,

Deployment控制器变更历史

1.3查看deployment控制器

kubectl get deployments

说明:Deployment控制器会创建3个Pod,可通过命令 kubectl get pods查看pod的状态

2.Deployment控制器的伸缩

vi nginxdeployment.yml

修改副本数为6

执行创建命令

kubectl apply -f [模板名] –record

查看deployment控制器

kubectl get deployments

3.Deployment控制器更新

Recreate:创建新的Pod之前终止所有现有的Pod。

RollingUpdate:以滚动更新的方式更新Pod,通过maxUnavailable和maxSurge参数来控制滚动更新过程。

3.1Recreate方式

编辑deployment文件

vi nginxdeployment.yml

执行创建命令

kubectl apply -f [模板名] –record

查看deployment

kubectl get deployments

可见AVAILABLE为0,说明该Deployment控制器下的所有Pod都暂时不可用。稍等一段时间会变成可用状态

3.2RollingUpdate方式

maxUnavailable:更新过程中能够进入不可用状态的Pod 的最大值或相对于总副本数的最大百分比。

maxSurge:能够额外创建的Pod数或相对于总副本数的百分比

执行创建命令

kubectl apply -f [模板名] –record

查看deployment

kubectl get deployments

4.Deployment控制器回滚

4.1查看的历史记录

kubectl rollout history deployment [Deployment名称}]

kubectl rollout undo deployment [Deployment名称}]  –to-revision=[REVISION版本号]