1 Node的隔离和恢复
-
方法1:
- 创建新的Node配置文件指定
spec.unschedulable: true
- 通过kubectl replace完成对Node的状态修改
kubectl replace -f xxx.yaml
- 此时Node的状态增加一项SchedulingDisabled,后续创建Pod将不会对该Node进行调度
- 创建新的Node配置文件指定
-
方法2:
kubectl patch node name -p '{"spec":{"unschedulable":true}}'
-
将Node脱离调度后,Node上运行的Pod不会自动停止
-
将Node重新纳入集群只需要将
spec.unschedulable: false
可用上述两种方法
2 Node扩容
- 在新Node上安装Docker、Kubelet和kube-proxy服务
- 在Kubelet和kube-proxy的启动参数中的Master URL指定为当前Master地址
3 Pod动态扩容和缩放
- 通过
kubectl scale rc
调整副本数
kubectl scale rc name --replicas=3
4 更新资源对象的Label
kubectl label pod name role=backend #加一个role=backend的label
kubectl label pod name role- #删除key为role的label
kubectl label pod name role=master --overwrite #修改role的label
5 将Pod调度到指定的Node
- 通过Node的label与Pod的nodeSelector匹配实现
- 给Node设置label
- Pod的配置文件中
spec.nodeSelector
中设置与Node中相同的label
6 应用的滚动升级
-
Kubernetes提供rolling-update功能实现
-
该命令创建一个新的RC然后自动控制旧的RC中的Pod数逐渐减少到0,同时新的RC中Pod从0逐渐增加
-
必须是相同Namespace中的RC
-
方法一使用配置文件,新的RC配置文件需要注意的地方:
- RC名字不能与旧的相同
- selector中至少有一个Label与旧RC的Label不同
kubectl rolling-update 旧RC -f 配置文件
-
方法二不使用配置文件,指定新版镜像名实现
kubectl rolling-update RC名 --image=新镜像名
-
更新过程有误可以通过
kubectl rolling-update --rollback
实现Pod版本回滚kubectl rolling-update RC名 --image=新镜像名 --rollback