天天看点

《Kubernetes权威指南》——运维技巧

1 Node的隔离和恢复

  • 方法1:
    1. 创建新的Node配置文件指定

      spec.unschedulable: true

    2. 通过kubectl replace完成对Node的状态修改
    kubectl replace -f xxx.yaml
               
    1. 此时Node的状态增加一项SchedulingDisabled,后续创建Pod将不会对该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匹配实现
    1. 给Node设置label
    2. 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