zoukankan      html  css  js  c++  java
  • 使用kubernetes的deployment进行RollingUpdate

    rolling update,可以使得服务近乎无缝地平滑升级,即在不停止对外服务的前提下完成应用的更新。

    replication controller与deployment的区别

    replication controller

    Replication Controller为Kubernetes的一个核心内容,应用托管到Kubernetes之后,需要保证应用能够持续的运行,Replication Controller就是这个保证的key,主要的功能如下:

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

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

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

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

    Deployment

    Deployment同样为Kubernetes的一个核心内容,主要职责同样是为了保证pod的数量和健康,90%的功能与Replication Controller完全一样,可以看做新一代的Replication Controller。但是,它又具备了Replication Controller之外的新特性:

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

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

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

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

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

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

    deployment的常用命令

      创建 Deployment

        

        

    更新Deployment

     

    扩容:

    kubectl scale deployment nginx-deployment --replicas 10

    如果集群支持 horizontal pod autoscaling 的话,还可以为Deployment设置自动扩展:

    kubectl autoscale deployment nginx-deployment --min=10 --max=15 --cpu-percent=80 

    更新镜像也比较简单:

    kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1

    回滚到上一个版本:

    kubectl rollout undo deployment/nginx-deployment

    也可以使用 --revision参数指定某个历史版本:

     kubectl rollout undo deployment/nginx-deployment --to-revision=2
    deployment "nginx-deployment" rolled back

    历史记录

    kubectl rollout history deployment/alpine-fbgweb   

    REVISION        CHANGE-CAUSE
    1               kubectl apply --filename=/data/scripts/app/fbgweb.yaml --record=true
    2               kubectl apply --filename=/data/scripts/app/fbgweb.yaml --record=true

    创建 Deployment 的时候使用了--record参数可以记录命令,我们可以很方便的查看每次 revision 的变化。

    查看单个revision 的详细信息:

    kubectl rollout history deployment alpine-fbgweb --revision=1

    复制代码
    [root@master scripts]# kubectl rollout history deployment alpine-fbgweb --revision=1
    deployments "alpine-fbgweb" with revision #1
    Pod Template:
      Labels:       app=alpine-fbgweb
            pod-template-hash=469852024
      Annotations:  kubernetes.io/change-cause=kubectl apply --filename=/data/scripts/app/fbgweb.yaml --record=true
      Containers:
       alpine-fbgweb:
        Image:      192.168.0.153:5000/fbgweb:2017-11-13-13-49-30
        Port:       80/TCP
        Environment:        <none>
        Mounts:
          /etc/localtmie from tz-config (rw)
      Volumes:
       tz-config:
        Type:       HostPath (bare host directory volume)
        Path:       /usr/share/zoneinfo/Asia/Shanghai 

     查看历史记录

     扩容:

  • 相关阅读:
    setup-nginx
    Sql Server
    第一次找工作
    JGroups 初探
    游戏与彩票
    MINA 网络黏包处理代码
    powershell遍历文件夹设置权限,解决文件无法删除的问题。
    c# 异步任务队列(可选是否使用单线程执行任务,以及自动取消任务)
    c#注册表对象映射
    最小安装centos 7 无GUI静默安装 oracle 12c,打造轻量linux化服务器
  • 原文地址:https://www.cnblogs.com/liyongsan/p/9140722.html
Copyright © 2011-2022 走看看