美文网首页
《每天5分钟玩转 Kubernetes》7 滚动升级

《每天5分钟玩转 Kubernetes》7 滚动升级

作者: SlowGO | 来源:发表于2018-12-12 18:24 被阅读3次

升级

第一次部署时使用 httpd:2.2.31,然后更新到 httpd:2.2.32

httpd.yml

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: httpd
spec:
  replicas: 3
  template:
    metadata:
      labels:
        run: httpd
    spec:
      containers:
        - name: httpd
          image: httpd:2.2.31
          ports:
            - containerPort: 80  

启动:

kubectl apply -f httpd.yml

查看:

kubectl get deployments httpd -o wide

NAME    READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES         SELECTOR
httpd   3/3     1            3           24m   httpd        httpd:2.2.31   run=httpd

IMAGEShttpd:2.2.31

把配置文件中的 httpd:2.2.31 改为 httpd:2.2.32,再次启动:

kubectl apply -f httpd.yml

查看:

kubectl get deployments httpd -o wide

NAME    READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES         SELECTOR
httpd   3/3     1            3           26m   httpd        httpd:2.2.32   run=httpd

IMAGES 变为 httpd:2.2.32

查看 deployment httpd 的详细信息:

...
Events:
  Type    Reason             Age                From                   Message
  ----    ------             ----               ----                   -------
...
  Normal  ScalingReplicaSet  3m33s              deployment-controller  Scaled up replica set httpd-94c4dcb56 to 1
  Normal  ScalingReplicaSet  2m48s              deployment-controller  Scaled down replica set httpd-8c6c4bd9b to 2
  Normal  ScalingReplicaSet  2m48s              deployment-controller  Scaled up replica set httpd-94c4dcb56 to 2
  Normal  ScalingReplicaSet  2m43s              deployment-controller  Scaled down replica set httpd-8c6c4bd9b to 1
  Normal  ScalingReplicaSet  2m43s              deployment-controller  Scaled up replica set httpd-94c4dcb56 to 3
  Normal  ScalingReplicaSet  2m38s              deployment-controller  Scaled down replica set httpd-8c6c4bd9b to 0

上面的日志信息就描述了滚动升级的过程:

  1. 启动一个新版 pod
  2. 把旧版 pod 数量降为 2
  3. 再启动一个新版,数量变为 2
  4. 把旧版 pod 数量降为 1
  5. 再启动一个新版,数量变为 3
  6. 把旧版 pod 数量降为 0

这就是滚动的意思,始终保持副本数量为3,控制新旧 pod 的交替,实现了无缝升级。

回滚

kubectl apply 每次更新应用时,kubernetes 都会记录下当前的配置,保存为一个 revision,这样就可以回滚到某个特定的版本。

创建3个配置文件,内容中唯一不同的就是镜像的版本号。

httpd.v1.yml

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: httpd
spec:
  revisionHistoryLimit: 10 # 指定保留最近的几个revision
  replicas: 3
  template:
    metadata:
      labels:
        run: httpd
    spec:
      containers:
        - name: httpd
          image: httpd:2.2.16
          ports:
            - containerPort: 80

httpd.v1.yml

...
          image: httpd:2.2.17
...

httpd.v1.yml

...
          image: httpd:2.2.18
...

部署:

kubectl apply -f /vagrant/httpd.v1.yml --record
kubectl apply -f /vagrant/httpd.v2.yml --record
kubectl apply -f /vagrant/httpd.v3.yml --record

--record 的作用是将当前命令记录到 revision 中,可以知道每个 revision 对应的是哪个配置文件。

查看 deployment:

kubectl get deployments -o wide
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS            IMAGES       
httpd                 0/3     1            0           4m4s    httpd                 httpd:2.2.18

查看 revision 历史记录:

kubectl rollout history deployment httpd

deployment.extensions/httpd
REVISION  CHANGE-CAUSE
1         kubectl apply --filename=httpd.v1.yml --record=true
2         kubectl apply --filename=httpd.v2.yml --record=true
3         kubectl apply --filename=httpd.v3.yml --record=true

CHANGE-CAUSE 就是 --record 的结果。

回滚到 revision 1

kubectl rollout undo deployment httpd --to-revision=1

再查看 deployment:

kubectl get deployments -o wide
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS            IMAGES       
httpd                 0/3     1            0           4m4s    httpd                 httpd:2.2.16

版本已经回退了。

查看 revision 历史记录:

kubectl rollout history deployment httpd

deployment.extensions/httpd
REVISION  CHANGE-CAUSE
2         kubectl apply --filename=httpd.v2.yml --record=true
3         kubectl apply --filename=httpd.v3.yml --record=true
4         kubectl apply --filename=httpd.v1.yml --record=true

revision 记录也发生了变化。

相关文章

网友评论

      本文标题:《每天5分钟玩转 Kubernetes》7 滚动升级

      本文链接:https://www.haomeiwen.com/subject/ssvphqtx.html