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的配置文件中
中设置与Node中相同的labelspec.nodeSelector
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=新镜像名
- 更新过程有误可以通过
实现Pod版本回滚kubectl rolling-update --rollback
kubectl rolling-update RC名 --image=新镜像名 --rollback