Replication Controller为Kubernetes的一个核心内容,应用托管到Kubernetes之后,需要保证应用能够持续的运行。

  • 确保pod数量:它会确保Kubernetes中有指定数量的Pod在运行。如果少于指定数量的pod,Replication Controller会创建新的,反之则会删除掉多余的以保证Pod数量不变。

  • 确保pod健康:当pod不健康,运行出错或者无法提供服务时,Replication Controller也会杀死不健康的pod,重新创建新的。

  • 弹性伸缩 :在业务高峰或者低峰期的时候,可以通过Replication Controller动态的调整pod的数量来提高资源的利用率。同时,配置相应的监控功能(Hroizontal Pod Autoscaler),会定时自动从监控平台获取Replication Controller关联pod的整体资源使用情况,做到自动伸缩。

  • 滚动升级:滚动升级为一种平滑的升级方式,通过逐步替换的策略,保证整体系统的稳定,在初始化升级的时候就可以及时发现和解决问题,避免问题不断扩大。

Deploymet 

  • Replication Controller全部功能:Deployment继承了上面描述的Replication Controller全部功能。

  • 事件和状态查看:可以查看Deployment的升级详细进度和状态。

  • 回滚:当升级pod镜像或者相关参数的时候发现问题,可以使用回滚操作回滚到上一个稳定的版本或者指定的版本。

  • 版本记录: 每一次对Deployment的操作,都能保存下来,给予后续可能的回滚使用。

  • 暂停和启动:对于每一次升级,都能够随时暂停和启动。

  • 多种升级方案:Recreate:删除所有已存在的pod,重新创建新的; RollingUpdate:滚动升级,逐步替换的策略,同时滚动升级时,支持更多的附加参数,例如设置最大不可用pod数量,最小升级间隔时间等等。

RC的常用命令

创建

[root@node1 rc]# vim nginx_rc.yml
apiVersion: v1
kind: ReplicationController
metadata:
  name: myweb
spec:
  replicas: 2
  selector:
    app: myweb
  template:
    metadata:
      labels:
        app: myweb
    spec:
      containers:
       - name: myweb
         image: nginx:1.10
         ports:
         - containerPort: 80

RC和Pod关联 ------Lable,通过标签相互关联

[root@node1 rc]# kubectl get rc -o wide
NAME      DESIRED   CURRENT   READY     AGE       CONTAINER(S)   IMAGE(S)     SELECTOR
myweb     2         2         2         5m        myweb          nginx:1.10   app=myweb

滚动升级

从Nginx1.10升级到Nginx1.15      方法:是通过yaml 来实现更新配置升级

[root@node1 rc]# cp nginx_rc.yml nginx_rc2.yml 
apiVersion: v1
kind: ReplicationController
metadata:
  name: myweb2
spec:
  replicas: 2
  selector:
    app: myweb2
  template:
    metadata:
      labels:
        app: myweb2
    spec:
      containers:
       - name: myweb
         image: nginx:1.15
         ports:
         - containerPort: 80

升级

[root@node1 rc]# kubectl rolling-update myweb -f nginx_rc2.yml --update-period=30s        #要升级的rc + 升级后的配置文件  + 更新时间
Created myweb2
Scaling up myweb2 from 0 to 2, scaling down myweb from 2 to 0 (keep 2 pods available, don't exceed 3 pods)
Scaling myweb2 up to 1
Scaling myweb down to 1
Scaling myweb2 up to 2
Scaling myweb down to 0
Update succeeded. Deleting myweb
replicationcontroller "myweb" rolling updated to "myweb2"

 升级过程
当myweb2存活超过30s就会关闭一个myweb,开启一个myweb2

[root@node1 ~]# kubectl get pods
NAME           READY     STATUS    RESTARTS   AGE
myweb-g9ztp    1/1       Running   0          14m
myweb2-k3pcc   1/1       Running   0          59s
nginx2         2/2       Running   0          22m
[root@node1 ~]# kubectl get pods
NAME           READY     STATUS              RESTARTS   AGE
myweb2-k3pcc   1/1       Running             0          1m
myweb2-wdw0n   0/1       ContainerCreating   0          7s
nginx2         2/2       Running             0          23m

回滚

原理和滚动升级一样,即是将RC更新为之前的文件配置

[root@node1 rc]# kubectl rolling-update myweb2 -f nginx_rc.yml --update-period=1s
Created myweb
Scaling up myweb from 0 to 2, scaling down myweb2 from 2 to 0 (keep 2 pods available, don't exceed 3 pods)
Scaling myweb up to 1
Scaling myweb2 down to 1
Scaling myweb up to 2
Scaling myweb2 down to 0
Update succeeded. Deleting myweb2
replicationcontroller "myweb2" rolling updated to "myweb"

当我们从myweb升级到myweb2的时候发现有问题,立马中断,如何回滚到myweb?

[root@node1 rc]# kubectl rolling-update myweb myweb2 --rollback
Setting "myweb" replicas to 2
Continuing update with existing controller myweb.
Scaling up myweb from 2 to 2, scaling down myweb2 from 1 to 0 (keep 2 pods available, don't exceed 3 pods)
Scaling myweb2 down to 0
Update succeeded. Deleting myweb2
replicationcontroller "myweb" rolling updated to "myweb2"

 

deployment的常用命令

查看部署状态

kubectl rollout status deployment/review-demo  --namespace=scm
kubectl describe deployment/review-demo  --namespace=scm

或者这种写法

kubectl rollout status deployments review-demo --namespace=scm
kubectl describe deployments review-demo  --namespace=scm

升级

kubectl set image deployment/review-demo review-demo=library/review-demo:0.0.1 --namespace=scm

或者

kubectl edit deployment/review-demo --namespace=scm

编辑.spec.template.spec.containers[0].image的值

终止升级

kubectl rollout pause deployment/review-demo --namespace=scm

继续升级

kubectl rollout resume deployment/review-demo --namespace=scm

回滚

kubectl rollout undo deployment/review-demo --namespace=scm

查看deployments版本

kubectl rollout history deployments --namespace=scm

回滚到指定版本

kubectl rollout undo deployment/review-demo --to-revision=2 --namespace=scm
 
posted on 2022-02-18 11:14  属于我的梦,明明还在  阅读(110)  评论(0)    收藏  举报