那么,在具体的实现上,这个 Deployment,与 ReplicaSet,以及 Pod 的关系是怎样的呢?
[root@dock01 ~]# kubectl get pods -l app=nginx_20210106
NAME READY STATUS RESTARTS AGE
nginx-deployment-20210106-87b5c4dbd-hmvvr 1/1 Running 0 3d20h
nginx-deployment-20210106-87b5c4dbd-lzzpj 1/1 Running 0 3d20h
nginx-deployment-20210106-87b5c4dbd-ww77z 1/1 Running 0 3d20h
比如,把这个值从 3 改成 4,那么 Deployment 所对应的 ReplicaSet,就会根据修改后的值自动创建一个新的 Pod。这就是“水平扩展”了;“水平收缩”则反之。而用户想要执行这个操作的指令也非常简单,就是 kubectl scale,比如:
$ kubectl scale deployment nginx-deployment --replicas=4
deployment.apps/nginx-deployment scaled
[root@dock01 ~]# cat nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment-20210106
spec:
selector:
matchLabels:
app: nginx_20210106
replicas: 3
template:
metadata:
labels:
app: nginx_20210106
spec:
containers:
- name: nginx
image: nginx:1.8
ports:
- containerPort: 80
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: nginx-vol
volumes:
- name: nginx-vol
hostPath:
path: "/var/data"
kubectl scale deployment nginx-deployment-20210106 --replicas=4
[root@dock01 ~]# kubectl scale deployment nginx-deployment-20210106 --replicas=4
deployment.apps/nginx-deployment-20210106 scaled
[root@dock01 ~]# kubectl get pods -l app=nginx_20210106
NAME READY STATUS RESTARTS AGE
nginx-deployment-20210106-87b5c4dbd-csjlp 0/1 ContainerCreating 0 1s
nginx-deployment-20210106-87b5c4dbd-hmvvr 1/1 Running 0 3d20h
nginx-deployment-20210106-87b5c4dbd-lzzpj 1/1 Running 0 3d20h
nginx-deployment-20210106-87b5c4dbd-ww77z 1/1 Running 0 3d20h
[root@dock01 ~]# kubectl get pods -l app=nginx_20210106
NAME READY STATUS RESTARTS AGE
nginx-deployment-20210106-87b5c4dbd-csjlp 0/1 ContainerCreating 0 2s
nginx-deployment-20210106-87b5c4dbd-hmvvr 1/1 Running 0 3d20h
nginx-deployment-20210106-87b5c4dbd-lzzpj 1/1 Running 0 3d20h
nginx-deployment-20210106-87b5c4dbd-ww77z 1/1 Running 0 3d20h