Kubernetes 滚动更新,不宕机发布

应用服务升级部署时候在Kubernetes不停止原有服务情况下,发布应用服务最新版本,达到用户无感知。在Kubernetes中称为滚动更新。
Kubernetes 滚动更新过程中最大程度地减少服务的中断,一旦新的 Pod 处于活动状态并准备就绪后,Kubernetes 就将会停止就的 Pod,从而将 Pod 的状态更新为 “Terminating”,然后从 Endpoints 对象中移除,并且发送一个 SIGTERM 信号给 Pod 的主进程。SIGTERM 信号就会让容器以正常的方式关闭,并且不接受任何新的连接。Pod 从 Endpoints 对象中被移除后,前面的负载均衡器就会将流量路由到其他新的Pod 中去。因为在负责均衡器注意到变更并更新其配置之前,终止信号就会去停用 Pod,这个重新配置过程又是异步发生的,所以并不能保证正确的顺序,所以就可能导致很少的请求会被路由到终止的 Pod 上去。

  • 创建滚动更新 部署文件
    k8s.cloud-communal.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cloud-communal-service
  namespace: cloud
spec:
  selector:
    matchLabels:
      app: cloud-communal-service
  # 副本数 根据实际情况设置
  replicas: 1
  minReadySeconds: 10       # pod启动后等待10秒才就绪,方便查看回滚效果
  revisionHistoryLimit: 10   # 设置可记录的版本数
  strategy:
    type: RollingUpdate   # 滚动更新
    rollingUpdate:
      maxSurge: 25%           # 滚动更新期间可以创建的pod的最大数量超过指定数量的pod。1表示当一个新的pod被创建才会删除一个pod,以此类推。可以是具体的整数,也可以是百分百 默认值为25%
      maxUnavailable: 1   # 默认值为25%;maxSurge和maxUnavailable值不能同时为零。
  template:
    metadata:
      labels:
        app: cloud-communal-service
    spec:
      hostNetwork: true
      containers:
        - name: cloud-communal-service
          image: registry.cn-shanghai.aliyuncs.com/jbk/cloud-communal:v1.0.0  #你自己镜像库的镜像名称+版本
          ports:
            - containerPort: 18080
              protocol: TCP
          imagePullPolicy: Always  # 拉取策略  Always:总是拉取 pull  IfNotPresent:默认值,本地有则使用本地镜像,不拉取

---
# --- 是必须的,否则无法执行 kind: Service 代码
# 创建 Service
apiVersion: v1
kind: Service
metadata:
  name: cloud-communal-service
  namespace: cloud
  labels:
    app: cloud-communal-service
spec:
  type: NodePort # 指定service类型
  ports:
    - port: 18080 # 供集群中其它服务访问的端口
      targetPort: 18080 # 后端pod中container暴露的端口
      nodePort: 30080  # 节点暴露的端口
      protocol: TCP
      name: http
  selector:
    app: cloud-communal-service  # 选择的pod的label
  • 部署k8s.cloud-communal.yaml
root@master:/home/ljy/桌面# kubectl apply -f k8s-cloud-communal.yaml
  • 设置新版本镜像滚动更新
    将deployment中的cloud-communal-service容器镜像设置为“cloud-communal:v1.0.1”
    kubectl set image deployment/自己的deployment名称 -n 命名空间 镜像名称=镜像
root@master:/home/ljy/桌面# kubectl set image deployment/cloud-communal-service -n cloud cloud-communal-service=registry.cn-shanghai.aliyuncs.com/jbk/cloud-communal:v1.0.1 
  • 查看滚动更新是否成功
root@master:/home/ljy/桌面# kubectl rollout status deployment/cloud-communal-service -n cloud
deployment "cloud-communal-service" successfully rolled out
root@master:/home/ljy/桌面# kubectl  get pod -n cloud -w | grep cloud-communal-service 
cloud-communal-service-79ddd45bb8-r86bp   1/1     Running            0          18m
root@master:/home/ljy/桌面#  kubectl get pods -n cloud -o wide
NAME                                      READY   STATUS    RESTARTS   AGE     IP          NODE     NOMINATED NODE   READINESS GATES
cloud-communal-service-79ddd45bb8-r86bp   1/1     Running   67         2d22h   10.0.2.15   master   <none>           <none>
  • 回滚
  1. 查看历史信息
root@master:/home/ljy/桌面# kubectl rollout history deployment cloud-communal-service -n cloud
deployment.apps/cloud-communal-service 
REVISION  CHANGE-CAUSE
1         <none>
2         <none>
3         <none>
  1. 回滚
    回滚到上一个版本
root@master:/home/ljy/桌面# kubectl rollout undo deployment cloud-communal-service   -n cloud
deployment.apps/cloud-communal-service  rolled back

使用 --revision参数指定回滚某个历史版本; 版本号通过kubectl rollout history deployment cloud-communal-service -n cloud 查看

root@master:/home/ljy/桌面# kubectl rollout undo cloud-communal-service  -n cloud  --to-revision=2
  1. 回滚结果确认
root@master:/home/ljy/桌面# kubectl get deployment -n cloud -o wide
root@master:/home/ljy/桌面# kubectl get pods -n cloud -o wide
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,013评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,205评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,370评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,168评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,153评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,954评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,271评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,916评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,382评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,877评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,989评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,624评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,209评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,199评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,418评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,401评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,700评论 2 345

推荐阅读更多精彩内容