replias:表示期望的 Pod 的副本数量,POD实际上是通过控制器ReplicaSet来控制的
selector:matchLabels,用来匹配要控制的 Pod 标签,需要和下面的 Pod 模板中的标签一致
template:Pod 模板,Pod的详细定义,相当于把一个 Pod 的描述以模板的形式嵌入到了 ReplicaSet 中来。
上面提到的POD、ReplicaSet、Deployment是什么关系呢?可以用下图来说明:
如上图所示,Deployment控制Replicaset,Replicaset控制POD,三者是层层控制的,Deployment 通过管理 ReplicaSet 的数量和属性来实现水平扩展/收缩以及滚动更新两个功能的;ReplicaSet 通过replicas: 3来保证 Pod 的个数始终保存为3。
使用Kubectl部署Deployment:
1 2
# kubectl apply -f nginx-deployment.yaml deployment.apps/nginx-deploy created
查询部署结果:
1 2 3 4 5 6 7 8 9 10 11
# kubectl get deploy NAME READY UP-TO-DATE AVAILABLE AGE dddddddddd 1/1 1 1 13d hpa-example 1/1 1 1 6d2h nginx-deploy 0/3 3 0 35s saf 1/1 1 1 18d # kubectl get deploy -l app=nginx No resources found in default namespace. # kubectl get deploy -l chapter=first-app NAME READY UP-TO-DATE AVAILABLE AGE nginx-deploy 0/3 3 0 82s
# kubectl describe pod nginx-deploy-67df4cc9c-dwrhd
#...省略 Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 8m22s default-scheduler Successfully assigned default/nginx-deploy-67df4cc9c-dwrhd to 10.247.154.106 Normal SuccessfulMountVolume 8m22s kubelet Successfully mounted volumes for pod "nginx-deploy-67df4cc9c-dwrhd_default(9cf7030b- cafc-470c-ba51-ef12d798cb68)" Normal SandboxChanged 8m19s kubelet Pod sandbox changed, it will be killed and re-created. Warning FailedCreate 6m48s (x11 over 8m19s) kubelet Error: InvalidImageName Warning InspectFailed 3m14s (x28 over 8m19s) kubelet Failed to apply default image tag "nginx:kweecr03.my-privaterepo.com:80/public/nginx:v1": couldn't parse image reference "nginx:kweecr03.my-privaterepo.com:80/nginx:x86-1.20.1": invalid reference format #...省略
从Events中可见其根因为image仓库地址写错,修改一下重新apply部署即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# kubectl apply -f nginx-deployment.yaml deployment.apps/nginx-deploy configured # kubectl get pods -l app=nginx NAME READY STATUS RESTARTS AGE nginx-deploy-5bbc6bfb99-7rgtd 0/1 Pending 0 0s nginx-deploy-5bbc6bfb99-gwtwx 1/1 Running 0 2s nginx-deploy-5bbc6bfb99-wtx8l 1/1 Running 0 4s nginx-deploy-67df4cc9c-dwrhd 0/1 Terminating 0 12m nginx-deploy-67df4cc9c-nwfw4 0/1 InvalidImageName 0 12m nginx-deploy-67df4cc9c-v6v9g 0/1 Terminating 0 12m # kubectl get pods -l app=nginx NAME READY STATUS RESTARTS AGE nginx-deploy-5bbc6bfb99-7rgtd 1/1 Running 0 22s nginx-deploy-5bbc6bfb99-gwtwx 1/1 Running 0 24s nginx-deploy-5bbc6bfb99-wtx8l 1/1 Running 0 26s
# kubectl apply -f nginx-deployment.yaml deployment.apps/nginx-deploy configured # kubectl describe deploy nginx-deploy #...省略其他log Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 43m deployment-controller Scaled up replica set nginx-deploy-67df4cc9c to 3 Normal ScalingReplicaSet 31m deployment-controller Scaled up replica set nginx-deploy-5bbc6bfb99 to 1 Normal ScalingReplicaSet 31m deployment-controller Scaled down replica set nginx-deploy-67df4cc9c to 2 Normal ScalingReplicaSet 31m deployment-controller Scaled up replica set nginx-deploy-5bbc6bfb99 to 2 Normal ScalingReplicaSet 31m deployment-controller Scaled down replica set nginx-deploy-67df4cc9c to 1 Normal ScalingReplicaSet 31m deployment-controller Scaled up replica set nginx-deploy-5bbc6bfb99 to 3 Normal ScalingReplicaSet 31m deployment-controller Scaled down replica set nginx-deploy-67df4cc9c to 0 Normal ScalingReplicaSet 7m2s deployment-controller Scaled up replica set nginx-deploy-5bbc6bfb99 to 4 Normal ScalingReplicaSet 4m56s deployment-controller Scaled down replica set nginx-deploy-5bbc6bfb99 to 2 Normal ScalingReplicaSet 42s deployment-controller Scaled up replica set nginx-deploy-5bbc6bfb99 to 5
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 26m deployment-controller Scaled up replica set nginx-deploy-85ff79dd56 to 4 Normal ScalingReplicaSet 3m44s deployment-controller Scaled down replica set nginx-deploy-85ff79dd56 to 3 Normal ScalingReplicaSet 3m44s deployment-controller Scaled up replica set nginx-deploy-5b7b9ccb95 to 1 Normal ScalingReplicaSet 3m44s deployment-controller Scaled down replica set nginx-deploy-85ff79dd56 to 2 Normal ScalingReplicaSet 3m44s deployment-controller Scaled up replica set nginx-deploy-5b7b9ccb95 to 2
然后再启动一个新的 Pod,直到所有的POD的都变成新的POD。 而且因为设置的策略maxSurge=1,所以在升级过程中是允许比原先设置多出1个 Pod ,即4个POD,两个新的 Pod,两个旧的 Pod,如下图示意:
使用kubectl rollout resume来恢复滚动更新:
1 2 3 4 5
# kubectl rollout resume deployment/nginx-deploy deployment.apps/nginx-deploy resumed # kubectl rollout status deployment/nginx-deploy Waiting for deployment "nginx-deploy" rollout to finish: 2 of 3 updated replicas are available... deployment "nginx-deploy" successfully rolled out
观察POD信息查看资源状态:
1 2 3 4 5
# kubectl get pod -l app=nginx NAME READY STATUS RESTARTS AGE nginx-deploy-75bcbf6c9b-lfdlf 1/1 Running 0 23m nginx-deploy-75bcbf6c9b-tnbpm 1/1 Running 0 20m nginx-deploy-75bcbf6c9b-tx6gw 1/1 Running 0 23m
几个有用的小tips
查看负载、pod、服务等对象的IP、端口信息时可加上-o wide参数,如:
1 2 3
# kubectl get pod nginx-deploy-75bcbf6c9b-lfdlf -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-deploy-75bcbf6c9b-lfdlf 1/1 Running 0 24m 12.11.0.58 10.247.154.37 <none> <none>