直接使用一个例子来操作Deployment的伸缩

部署nginx

编写yml文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@k8s-node1 ~]# vi nginx.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.8
ports:
- containerPort: 80

运行nginx-deployment

1
2
[root@k8s-node1 ~]# kubectl apply -f nginx.yml 
deployment.apps/nginx-deployment created

查看运行起来的pod容器

1
2
3
4
[root@k8s-node1 ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx-deployment-5f8c6846ff-446sl 1/1 Running 0 9m46s 10.244.2.2 k8s-node2
nginx-deployment-5f8c6846ff-4qhvm 1/1 Running 0 9m46s 10.244.1.2 k8s-node3

pod的伸缩

其实也特别简单,就是直接修改yaml文件的replicas配置项的数量

1
2
3
4
[root@k8s-node1 ~]# vi nginx.yml
# 修改replicas
replicas: 5
将pod从2个增加为5个

部署

1
2
[root@k8s-node1 ~]# kubectl apply -f nginx.yml 
deployment.apps/nginx-deployment configured

再次查看

1
2
3
4
5
6
7
[root@k8s-node1 ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deployment-5f8c6846ff-446sl 1/1 Running 0 13m 10.244.2.2 k8s-node2
nginx-deployment-5f8c6846ff-4qhvm 1/1 Running 0 13m 10.244.1.2 k8s-node3
nginx-deployment-5f8c6846ff-5srk7 1/1 Running 0 27s 10.244.1.3 k8s-node3
nginx-deployment-5f8c6846ff-h5cgv 1/1 Running 0 27s 10.244.2.3 k8s-node2
nginx-deployment-5f8c6846ff-stgdn 1/1 Running 0 27s 10.244.2.4 k8s-node2

就这么简单,伸缩已经完成了,不会停掉之前的2个pod,直接在2个的基础上,保证pod总数为5

管理节点参与运算调度

发现所有的pod都运行在node2和node3,k8s中为了管理节点的安全考虑,在分配pod运行主机时,管理节点不参与运算。
如果希望管理节点参与运算执行
kubectl taint node 管理节点主机名 node-role.kubernetes.io/master-
再次恢复管理节点的状态执行
kubectl taint node 管理节点主机名 node-role.kubernetes.io/master="":NoSchedule

重新伸缩,查看管理节点上是否运行pod

1
2
3
[root@k8s-node1 ~]# vi nginx.yml
# 修改replicas
replicas: 8

部署

1
2
[root@k8s-node1 ~]# kubectl apply -f nginx.yml 
deployment.apps/nginx-deployment configured

查看pod运行节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@k8s-node1 ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx-deployment-5f8c6846ff-4qhvm 1/1 Running 0 81m 10.244.1.2 k8s-node3
nginx-deployment-5f8c6846ff-5kk2c 1/1 Running 0 2s 10.244.0.10 k8s-node1
nginx-deployment-5f8c6846ff-8s5mk 1/1 Running 0 2s 10.244.2.37 k8s-node2
nginx-deployment-5f8c6846ff-b9rdj 1/1 Running 0 19s 10.244.2.34 k8s-node2
nginx-deployment-5f8c6846ff-c8dv8 1/1 Running 0 19s 10.244.1.21 k8s-node3
nginx-deployment-5f8c6846ff-fk994 1/1 Running 0 2s 10.244.2.36 k8s-node2
nginx-deployment-5f8c6846ff-g2sqz 1/1 Running 0 19s 10.244.2.33 k8s-node2
nginx-deployment-5f8c6846ff-hks7l 1/1 Running 0 19s 10.244.1.22 k8s-nodee3
nginx-deployment-5f8c6846ff-lhxl4 1/1 Running 0 19s 10.244.2.35 k8s-node2
nginx-deployment-5f8c6846ff-lzct7 1/1 Running 0 2s 10.244.0.11 k8s-node1
nginx-deployment-5f8c6846ff-m5vs9 1/1 Running 0 19s 10.244.1.23 k8s-node3
nginx-deployment-5f8c6846ff-nwbwk 1/1 Running 0 19s 10.244.2.32 k8s-node2
nginx-deployment-5f8c6846ff-rcjlg 1/1 Running 0 19s 10.244.2.31 k8s-node2
nginx-deployment-5f8c6846ff-sfq2d 1/1 Running 0 2s 10.244.1.24 k8s-node3

恢复管理节点的only状态

设置值为NoScheduler,不让调度器进行调度

1
2
[root@k8s-node1 ~]# kubectl taint node node1 node-role.kubernetes.io/master="":NoSchedule
node/node1 tainted

将副本设置为1个

1
2
3
[root@k8s-node1 ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx-deployment-5f8c6846ff-4qhvm 1/1 Running 0 88m 10.244.1.2 k8s-node3

然后再次伸缩为多个pod

1
2
3
4
5
[root@k8s-node1 ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx-deployment-5f8c6846ff-4qhvm 1/1 Running 0 90m 10.244.1.2 k8s-node3
nginx-deployment-5f8c6846ff-5j87g 1/1 Running 0 3s 10.244.1.26 k8s-node3
nginx-deployment-5f8c6846ff-6kd6h 1/1 Running 0 3s 10.244.2.38 k8s-node2