Deployment是通过ReplicaSet来进行Pod的管理的,这篇文章通过一个简单的示例,对此进行说明。
Deployment的YAML示例
有如下busybox的Deployment的YAML配置文件:
[root@host131 Deployment]# cat v1.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: busybox-deployment-v1
spec:
replicas: 3
selector:
matchLabels:
app: busybox-v1
template:
metadata:
labels:
app: busybox-v1
spec:
containers:
- name: busybox-host
image: busybox:1.31.1
command: ["sleep"]
args: ["1000"]
...
[root@host131 Deployment]#
生成Deployment和Pod
[root@host131 Deployment]# kubectl create -f v1.yaml
deployment.apps/busybox-deployment-v1 created
[root@host131 Deployment]#
确认Deployment和Pod信息
[root@host131 Deployment]# kubectl get deployment -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
busybox-deployment-v1 3/3 3 3 9s busybox-host busybox:1.31.1 app=busybox-v1
[root@host131 Deployment]#
[root@host131 Deployment]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
busybox-deployment-v1-7bfdbd9656-9pg9s 1/1 Running 0 15s 10.254.152.6 192.168.163.131 <none> <none>
busybox-deployment-v1-7bfdbd9656-l4knv 1/1 Running 0 15s 10.254.152.7 192.168.163.131 <none> <none>
busybox-deployment-v1-7bfdbd9656-m8g9c 1/1 Running 0 15s 10.254.152.5 192.168.163.131 <none> <none>
[root@host131 Deployment]#
日志信息分析
确认Deployment
通过对Deployment和Pod等日志进行分析,确认在Deployment中生成Pod的顺序:
执行命令:kubectl describe deployment busybox-deployment-v1
主要日志信息:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 34s deployment-controller Scaled up replica set busybox-deployment-v1-7bfdbd9656 to 3
可以看到出现了一个Replica Set,通过deployment-controller控制器创建,然后使用如下命令确认出了隐藏在后面工作的ReplicaSet, 此ReplicaSet的NAME与上述日志记载的名称相同
[root@host131 Deployment]# kubectl get rs -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
busybox-deployment-v1-7bfdbd9656 3 3 3 54s busybox-host busybox:1.31.1 app=busybox-v1,pod-template-hash=7bfdbd9656
[root@host131 Deployment]#
确认Replica Set
执行命令:kubectl describe rs busybox-deployment-v1-7bfdbd9656
主要日志信息:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 77s replicaset-controller Created pod: busybox-deployment-v1-7bfdbd9656-m8g9c
Normal SuccessfulCreate 77s replicaset-controller Created pod: busybox-deployment-v1-7bfdbd9656-9pg9s
Normal SuccessfulCreate 77s replicaset-controller Created pod: busybox-deployment-v1-7bfdbd9656-l4knv
可以清晰地看到3个Pod实例都是通过Replica Set生成的
确认Pod
执行命令:kubectl describe pod busybox-deployment-v1-7bfdbd9656-m8g9c
主要日志信息:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 94s default-scheduler Successfully assigned default/busybox-deployment-v1-7bfdbd9656-m8g9c to 192.168.163.131
Normal Pulled 92s kubelet, 192.168.163.131 Container image "busybox:1.31.1" already present on machine
Normal Created 92s kubelet, 192.168.163.131 Created container busybox-host
Normal Started 91s kubelet, 192.168.163.131 Started container busybox-host
Pod的创建非常清晰:
- 由调度器决定在192.168.163.131这台节点上进行Pod的生成
- 拉取镜像(镜像事前已经存在的情况)
- 创建镜像 busybox-host
- 启动镜像 busybox-host
总结
从上述示例可以清晰地看到Deployment生成Pode的过程:Deployment -> Replica Set -> Pod生成。