首页 > 其他分享 >k8s 之 滚动更新

k8s 之 滚动更新

时间:2023-02-26 23:22:05浏览次数:53  
标签:1.0 image xxx svc 更新 server 滚动 k8s

背景

公司做的是医院的院内系统,医院存在24小时的急诊,所以需要程序7*24小时不间断;
在程序更新的时候,就需要滚动更新。

Docker Swarm中的滚动更新

目前公司部署使用的是docker swarm,对滚动更新的支持相当不友好;
假设某个服务需要同时启动5个实例才能保证上午高峰期的访问,
一般来说只需要部署一个service加5个replicas即可

version: '3.3'
services:
  svc:
    image: xxx:1.0.0
    deploy:
      # 部署5个副本
      replicas: 5

但是这种部署方式,当我们将服务升级到1.0.1时,会一次性全部重启所有的容器,达不到滚动更新的效果;
不得不将部署方式修改为5个service

version: '3.3'
services:
  svc1:
    image: xxx:1.0.0
  svc2:
    image: xxx:1.0.0
  svc3:
    image: xxx:1.0.0  
  svc4:
    image: xxx:1.0.0
  svc5:
    image: xxx:1.0.0

在配合nginx反向代理

upstream svc {
    server:port1 down;
    server:port2;
    server:port3;
    server:port4;
    server:port5;
}

server {
    listen 80;
    location / {
        proxy_pass http://svc/;
    }
}

在升级svc1时,先修改nginx配置将svc1 down掉,然后修改版本,启动成功后在恢复,在down掉svc2,升级恢复,以此内推。

缺点:需要消耗多个端口且更新过程繁琐。
优点:过程相对可控,假设升级第一个时发现问题,可及时回退。

k8s 滚动升级

k8s滚动升级配置相当简单

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-svc
spec:
  replicas: 5
  selector:
    matchLabels:
      app: svc
  # 服务启动到就绪需要的时间
  minReadySeconds: 30
  strategy:
    rollingUpdate:
      # Pod 数量可以超过定义的数量
      maxSurge: 1               
      # 和期望ready的副本数比,不可用副本数最大比例(或最大值)
      maxUnavailable: 0        
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: svc
    spec:
      restartPolicy: Always
      containers:
      - name: svc
        image: xxx:1.0.0

升级时只需要修改版本号即可,k8s将自动进行滚动更新。

缺点:过程不太可控,假设升级第一个时发现问题,不能及时回退(这个缺点只是我没发现怎么解决,相信有解决方式)。
优点:操作非常简单

标签:1.0,image,xxx,svc,更新,server,滚动,k8s
From: https://www.cnblogs.com/wh-blog/p/17158214.html

相关文章

  • 1、Kyuubi在竞技世界大数据平台实践--Kyuubi on K8S读取kerberosed CD
    背景为满足业务大数据架构使用多种sql引擎:spark,flink,trino(同时查询hive,clickhouse等),需要部署一个统一的sql入口,该入口满足多引擎多平台运行;本次实践是上述需求的一个......
  • K8S-pod进阶
    一.资源限制当定义Pod时可以选择性地为每个容器设定所需要的资源数量。最常见的可设定资源是CPU和内存大小,以及其他类型的资源。 当为Pod中的容器指定了req......
  • K8Syaml文件详解
    一、K8S支持的文件格式kubernetes支持YAML和JSON文件格式管理资源对象。JSON格式:主要用于api接口之间消息的传递YAML格式:用于配置和管理,YAML是一种简洁的非标记性语言,内......
  • K8SPod进阶资源限制以及探针
    一、Pod进阶1、资源限制当定义Pod时可以选择性地为每个容器设定所需要的资源数量。最常见的可设定资源是CPU和内存大小,以及其他类型的资源。当为Pod中的容器指......
  • window.addEventListener注册滚动scroll事件不生效
    window.addEventListener('scroll',xxx方法)不被触发的原因今天在做项目的时候,需要做一个滚动的效果。发现在mounted(){window.addEventListener('scroll',th......
  • 前端常考react面试题(持续更新中)
    reactdiff算法我们知道React会维护两个虚拟DOM,那么是如何来比较,如何来判断,做出最优的解呢?这就用到了diff算法diff算法的作用计算出VirtualDOM中真正变化的部分,并......
  • golang基础知识查漏补缺(持续更新)
    表达式与语句简单来说,一个表达式表示一个值,而一条语句表示一个操作。但是在实际中,有些个表达式可能同时表示多个值,有些语句可能是由很多更基本的语句组成的。另外,根据场合......
  • 《复试项目》报错汇总【持续更新】
    我推荐大家的学习路线是,先把我的视频花1~2天的时间刷完,然后再考虑做不做项目,如果时间紧张,把我的代码看懂,然后多准备准备机器学习相关的知识。如果有时间的话,那就二刷我的视......
  • K8S调度约束
    一、调度约束Kubernetes是通过List-Watch(监控)的机制进行每个组件的协作,保持数据同步的,每个组件之间的设计实现了解耦。用户是通过kubectl根据配置文件,向APIServer......
  • 【云原生】k8s 离线部署讲解和实战操作
    目录一、概述二、前期准备1)节点信息2)修改主机名和配置hosts3)配置ssh互信4)时间同步5)关闭防火墙6)关闭swap7)禁用SELinux8)允许iptables检查桥接流量三、开始部署1)离线安装d......