一看必会系列:k8s 练习4 pod滚动升级

来源:本站原创 Kubernetes 超过149 views围观 0条评论

Pod滚动升级

rolling-update 可用在 滚动升级,回滚,POD重启等操作

正式配置文件在最下面

[root@k8s-master redis_rolling]#  kubectl rolling-update redis-master-rc-v2 -f redis-master-rc-v4.yaml
Command "rolling-update" is deprecated, use "rollout" instead

第一阶段
Created redis-master-rc-v4  #开始创建 redis-master-rc-v4
第二阶段
Scaling up redis-master-rc-v4 from 0 to 4,  #将 redis-master-rc-v4 加到4个副本
scaling down redis-master-rc-v2 from 2 to 0  #将 redis-master-rc-v2 从2减到0
(keep 4 pods available, don’t exceed 5 pods)
第三阶段
Scaling redis-master-rc-v4 up to 3  # redis-master-rc-v4 加到3
Scaling redis-master-rc-v2 down to 1 #V2 减到1
Scaling redis-master-rc-v4 up to 4  #V4 加到4
Scaling redis-master-rc-v2 down to 0 #V2 减到0
第4阶段
Update succeeded.
Deleting old controller: redis-master-rc-v2 #更新成功删除掉的rc-v2
Renaming redis-master-rc-v4 to redis-master-rc-v2  #将V4改名为V2
replicationcontroller/redis-master-rc-v2 rolling updated #升级完成
完成

验证
[root@k8s-master ~]# kubectl get rc,pod
NAME                                       DESIRED   CURRENT   READY   AGE
replicationcontroller/redis-master-rc-v2   2         2         2       11m
#刚执行,第1-2阶段,两个RC同时存在
replicationcontroller/redis-master-rc-v4   3         3         3       50s

NAME                           READY   STATUS    RESTARTS   AGE
#刚执行,第1-2阶段,两个RC同时存在
pod/redis-master-rc-v3-69rjr   1/1     Running   0          12m
pod/redis-master-rc-v3-vhnbs   1/1     Running   0          12m
pod/redis-master-rc-v4-cp9h8   1/1     Running   0          50s
pod/redis-master-rc-v4-jfhcx   1/1     Running   0          50s
pod/redis-master-rc-v4-nqqkp   1/1     Running   0          50s

过段时间之后 #第3-4阶段
[root@k8s-master ~]# kubectl get rc,pod
NAME                                       DESIRED   CURRENT   READY   AGE
#只剩一个了
replicationcontroller/redis-master-rc-v2   4         4         4       11m

NAME                           READY   STATUS      RESTARTS   AGE
只剩一个了
pod/redis-master-rc-v4-cp9h8   1/1     Running     0          14m
pod/redis-master-rc-v4-h5f6r   1/1     Running     0          13m
pod/redis-master-rc-v4-jfhcx   1/1     Running     0          14m
pod/redis-master-rc-v4-nqqkp   1/1     Running     0          14m
[root@k8s-master ~]# kubectl get rc,pod

使用命令进行 rolling-update 正常升级的结果是 原来的pod和rc会被替换掉,
新rc-v4会重命名为原来的rc-v2,保持服务正常

 

下面是直接用命令升级 kubectl rolling-update  现在的RC –image=要升级的镜像
[root@k8s-master ~]# kubectl rolling-update redis-master-rc  –image=kubeguide/redis-master:1.0
Command "rolling-update" is deprecated, use "rollout" instead
Found existing update in progress (redis-master-rc-v2), resuming.
Continuing update with existing controller redis-master-rc-v2.
Scaling up redis-master-rc-v2 from 1 to 1, scaling down redis-master-rc from 1 to 0 (keep 1 pods available, don’t exceed 2 pods)
Scaling redis-master-rc down to 0
Update succeeded. Deleting redis-master-rc
replicationcontroller/redis-master-rc-v2 rolling updated to "redis-master-rc-v2"

验证
[root@k8s-master yaml]# kubectl get rc,pod
NAME                                       DESIRED   CURRENT   READY   AGE

replicationcontroller/redis-master-rc-v2   1         1         1       19m 

NAME                           READY   STATUS    RESTARTS   AGE
pod/redis-master-rc-v2-2rc4x   1/1     Running   0          19m  #

[root@k8s-master yaml]# kubectl describe pod/redis-master-rc-v2-2rc4x
Name:               redis-master-rc-v2-2rc4x
Namespace:          default
Node:               k8s-node1/192.168.10.69
Labels:             deployment=4e423afb21f081b285503ab911a2c748
                    name=redis-master-lb
Containers:
  master:
    Image:          kubeguide/redis-master:1.0

Events:
  Type    Reason     Age   From                Message
  —-    ——     —-  —-                ——-
  Normal  Scheduled  28m   default-scheduler   Successfully assigned default/redis-master-rc-v2-2rc4x to k8s-node1
  Normal  Pulling    28m   kubelet, k8s-node1  pulling image "kubeguide/redis-master:1.0"
  Normal  Pulled     28m   kubelet, k8s-node1  Successfully pulled image "kubeguide/redis-master:1.0"
  Normal  Created    28m   kubelet, k8s-node1  Created container
  Normal  Started    28m   kubelet, k8s-node1  Started container
[root@k8s-master yaml]#

———–配置方式1------------
配置文件v2
redis-master-rc-v2.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: redis-master-rc-v2  #升级的不能一样
  labels:
    names: redis-master-lb-2   #升级的不能一样
spec:
  replicas: 2
  selector:
    name: redis-master-lb-2 #升级的不能一样
  template:
    metadata:
      labels:
        name: redis-master-lb-2  #升级的不能一样
    spec:
     containers:
     – name: master
       image: kubeguide/redis-master:1.0  #升级的不能一样
       ports:
       – containerPort: 6379
      
配置v4
redis-master-rc-v4.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: redis-master-rc-v4  #升级的不能和v2一样
  labels:
    names: redis-master-lb-4 #升级的不能和v2一样
spec:
  replicas: 4
  selector:
    name: redis-master-lb-4 #升级的不能和v2一样
  template:
    metadata:
      labels:
        name: redis-master-lb-4  #升级的不能和v2一样
    spec:
     containers:
     – name: master
       image: kubeguide/redis-master:latest  #升级的不能和v2一样
       ports:
       – containerPort: 6379

———–配置方式2------------
配置文件v2
redis-master-rc-v2.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: redis-master-rc-v2  #升级的不能一样
  labels:
    names: redis-master-lb  
    ver: v1                 #建rc的时候这个就要存在,否则后面升级会报错
spec:
  replicas: 2
  selector:
    name: redis-master-lb
    ver: v1                #建rc的时候这个就要存在,否则后面升级会报错

  template:
    metadata:
      labels:
        name: redis-master-lb-2
        ver: v1            #建rc的时候这个就要存在,否则后面升级会报错

    spec:
     containers:
     – name: master
       image: kubeguide/redis-master:1.0  #升级的不能一样
       ports:
       – containerPort: 6379
      
配置v4
redis-master-rc-v4.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: redis-master-rc-v4 
  labels:
    names: redis-master-lb-4
    ver: v2                #这个原来的版本就要存在,本次要不一样,否则升级会报错
spec:
  replicas: 4
  selector:
    name: redis-master-lb
    ver: v2                #这个原来的版本就要存在,本次要不一样,否则升级会报错

  template:
    metadata:
      labels:
        name: redis-master-lb
        ver: v2                #这个原来的版本就要存在,本次要不一样,否则升级会报错
    spec:
     containers:
     – name: master
       image: kubeguide/redis-master:latest  #升级的不能和v2一样
       ports:
       – containerPort: 6379

 

————-升级有误 进行回滚 kubectl rolling-update RC名 –image=镜像 –rollback
[root@k8s-master redis_rolling]# kubectl rolling-update redis-master-rc-v2 –image=kubeguide/redis-master:1.0 –rollback
Command "rolling-update" is deprecated, use "rollout" instead
error: Don’t specify –filename or –image on rollback
See ‘kubectl rolling-update -h’ for help and examples.
[root@k8s-master redis_rolling]#

升级正常就不能用这种方式进行回滚

———–报错
[root@k8s-master yaml]# kubectl rolling-update redis-master-rc -f redis-master-rc-v2.yaml
Command "rolling-update" is deprecated, use "rollout" instead
error: redis-master-rc-v2.yaml contains a /v1, Kind=ReplicationController not a ReplicationController
问题和解决方法看 配置方式2------------

报错2
[root@k8s-master redis_rolling]# kubectl rolling-update redis-master-rc-v2 -f redis-master-rc-v3.yaml
Command "rolling-update" is deprecated, use "rollout" instead
error: redis-master-rc-v3.yaml must specify a matching key with non-equal value in Selector for redis-master-rc-v2
[root@k8s-master redis_rolling]# !v
说明
must specify a matching key with non-equal value in Selector for redis-master-rc-v2
这里报错说明是配置文件的问题,
 
问题和解决方法看 配置方式2------------

文章出自:CCIE那点事 http://www.jdccie.com/ 版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。 禁止全文转载。
本文链接:http://www.jdccie.com/?p=4124转载请注明转自CCIE那点事
如果喜欢:点此订阅本站
  • 相关文章
  • 为您推荐
  • 各种观点

暂时还木有人评论,坐等沙发!
发表评论

您必须 [ 登录 ] 才能发表留言!