Kubernetes服务的滚动升级

2017-01-17 阅读: Kubernetes

当需要升级集群中的某个服务时,需要停止该服务相关的Pod,pull最新的docker镜像,然后重新启动。 如果一下把所有Pod都停止,服务在升级的时间内会不可用。因此,Kubernetes提供了滚动升级的功能。

kubectl rolling-update命令滚动升级

集群中有下面的RC:

tomcat-rc.yaml

apiVersion: v1
kind: ReplicationController
metadata:
  name: tomcat
spec:
  replicas: 5
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
      - name: tomcat
        image: tomcat:7
        ports:
        - containerPort: 8080
kubectl get pod -o wide | grep tomcat
tomcat-0f1bc            1/1       Running   0          7s        10.244.3.15      cent1
tomcat-4l3s3            1/1       Running   0          7s        10.244.2.12      cent2
tomcat-6zw8s            1/1       Running   0          7s        10.244.3.14      cent1
tomcat-9mmfg            1/1       Running   0          7s        10.244.2.11      cent2
tomcat-q728k            1/1       Running   0          7s        10.244.3.13      cent1

现在需要升级tomcat这个RC下的Pod,这里的需求只是将tomcat镜像从7升级到8:

kubectl rolling-update tomcat --image=tomcat:8
Created tomcat-d88a9205146d65acff8e0543aa3b6b62
Scaling up tomcat-d88a9205146d65acff8e0543aa3b6b62 from 0 to 5, scaling down tomcat from 5 to 0 (keep 5 pods available, don't exceed 6 pods)
Scaling tomcat-d88a9205146d65acff8e0543aa3b6b62 up to 1
Scaling tomcat down to 4
Scaling tomcat-d88a9205146d65acff8e0543aa3b6b62 up to 2
Scaling tomcat down to 3
Scaling tomcat-d88a9205146d65acff8e0543aa3b6b62 up to 3
Scaling tomcat down to 2
Scaling tomcat-d88a9205146d65acff8e0543aa3b6b62 up to 4
Scaling tomcat down to 1
Scaling tomcat-d88a9205146d65acff8e0543aa3b6b62 up to 5
Scaling tomcat down to 0
Update succeeded. Deleting old controller: tomcat
Renaming tomcat to tomcat-d88a9205146d65acff8e0543aa3b6b62
replicationcontroller "tomcat" rolling updated

从上面命令的输出可以看出,升级过程是先创建一个新版的Pod,然后再停止一个旧版本的Pod,逐步完成整个RC的更新。 升级完成后,查看rc:

kubectl get rc tomcat -o wide
NAME      DESIRED   CURRENT   READY     AGE       CONTAINER(S)   IMAGE(S)   SELECTOR
tomcat    5         5         5         5m        tomcat         tomcat:8   app=tomcat,deployment=d88a9205146d65acff8e0543aa3b6b62

可以看到RC增加了一个deployment=88a9205146d65acff8e0543aa3b6b62的Label,是由RC的内容HASH计算得到的,作为签名用于表示RC是否发生变化。

如果滚动升级过程中发现问题,可以回滚:

kubectl rolling-update tomcat --image=tomcat:7 --rollback

参考

标题:Kubernetes服务的滚动升级
本文链接:https://blog.frognew.com/2017/01/kubernetes-service-rolling-updates.html
转载请注明出处。

目录