容器服务 kubernetes Deployment实现分批发布

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 1. 前言 容器服务官网提供的分批发布基于 StatefulSet 开发,有状态副本集部署 POD 是按照顺序一台一台的发布重启,需要消耗很长的时间,并且控制台不尽人意,存在不少坑。 StatefulSet 分批发布不支持任意数目任意批数的发布,实际操作中往往需要先发布一台线上服务做灰度,然后逐步放大。

1. 前言

 容器服务官网提供的分批发布基于 StatefulSet 开发,有状态副本集部署 POD 是按照顺序一台一台的发布重启,需要消耗很长的时间,并且控制台不尽人意,存在不少坑。
 StatefulSet 分批发布不支持任意数目任意批数的发布,实际操作中往往需要先发布一台线上服务做灰度,然后逐步放大。
因而采用无状态副本集 Deployment 对象分批部署,并通过同一个 labels指向统一一个 Service 暴露给访问者,成为大应用中最合适的分批发布。

2. 配置过程

  1. 首先建立一个副本数目为1的初始灰度 Deployment,yaml 如下:

apiVersion: apps/v1beta2
kind: Deployment
metadata:
# service 选择标签
  labels:
    app: {app_name}-aone
  name: {app_name}-aone-1
  namespace: {app_name}
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: {app_name}-aone
  template:
    metadata:
      labels:
        app: {app_name}-aone
    spec:
      containers:
        - image: >-
            registry-vpc.cn-north-2-gov-1.aliyuncs.com/app-cloud/{app_name}:20190101191052
          imagePullPolicy: Always
# 在应用停止前调用优雅下线脚本,摘除 hsf,lwp 服务
          lifecycle:
            preStop:
              exec:
                command:
                  - sudo
                  - '-u'
                  - admin
                  - /home/admin/appconf/bin/appctl.sh
                  - {app_name}
                  - stop
# 就绪检查和存活检查
          livenessProbe:
            failureThreshold: 10
            initialDelaySeconds: 30
            periodSeconds: 10
            successThreshold: 1
            tcpSocket:
              port: 508
            timeoutSeconds: 1
          name: {app_name}-aone
          readinessProbe:
            failureThreshold: 10
            initialDelaySeconds: 30
            periodSeconds: 10
            successThreshold: 1
            tcpSocket:
              port: 508
            timeoutSeconds: 1
          resources:
            limits:
              cpu: '4'
              memory: 8196Mi
            requests:
              cpu: '4'
              memory: 8196Mi
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          volumeMounts:
            - mountPath: /home/admin/logs
              name: volume-1553680362129
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
# 日志统一写到映射的宿主机数据盘日志目录
      volumes:
        - hostPath:
            path: /var/lib/docker/logs/{app_name}
            type: ''
          name: volume-1553680362129

  2. 第二批,比如设置为16台,分4次发布,每次25%,只需要复制上面脚本,编写 yaml 的 name 为{app_name}-aone-2, 注意保持labels 一致,确保 pod 为同一个Service 配置提供服务,并修改副本数为16,增加更新策略配置,同理同法建立第三批,第四批...。

metadata:
# service 选择标签
  labels:
    app: {app_name}-aone
  name: {app_name}-aone-2
  namespace: {app_name}
spec:
  progressDeadlineSeconds: 600
  replicas: 16
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: {app_name}-aone
strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  1. 建立 Service 服务,通过 labels 标签映射指向以上每批 Deployment,使用 NodePort 结合 SLB 方式,解耦 SLB 负载均衡与 k8s service 关系,房子 Cloud controller manager 同步删除 Service 与 SLB 负载均衡。
apiVersion: v1
kind: Service
metadata:
  name: {app_name}-http
  namespace: {app_name}
spec:
  clusterIP: 133.33.33.33
  externalTrafficPolicy: Cluster
  ports:
    - nodePort: 32168
      port: 80
      protocol: TCP
      targetPort: 7001
  selector:
    app: {app_name}-aone
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}

 配置好后,可以在容器服务的 Service 控制台这里点击服务名称,可以看到该服务对应以上4批部署(Deployment)。
至此,使用多个 Deployment 配置分批发布完成。

3. 使用多个 Deployment 分批发布优缺点

优点:
无状态部署速度快,回滚,重启速度也非常快,可以自己控制重启每批多少台机器;
无状态部署可控性好,容器服务控制台在该类型操作坑少。
缺点:
云监控按照 Deployment 分组,监控信息变为在多个组查看;
云效,EDAS 都不支持此种分批发布模式,需要自己二次开发运维发布来实现。

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
2月前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
针对本地存储和 PVC 这两种容器存储使用方式,我们对 ACK 的容器存储监控功能进行了全新升级。此次更新完善了对集群中不同存储类型的监控能力,不仅对之前已有的监控大盘进行了优化,还针对不同的云存储类型,上线了全新的监控大盘,确保用户能够更好地理解和管理容器业务应用的存储资源。
362 180
|
10天前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
|
12天前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
|
14天前
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
20天前
|
弹性计算 人工智能 资源调度
DeepSeek大解读系列公开课上新!阿里云专家主讲云上智能算力、Kubernetes容器服务、DeepSeek私有化部署
智猩猩「DeepSeek大解读」系列公开课第三期即将开讲,聚焦阿里云弹性计算助力大模型训练与部署。三位专家将分别讲解智能算力支撑、Kubernetes容器服务在AI场景的应用实践、以及DeepSeek一键部署和多渠道应用集成,分享云计算如何赋能大模型发展。欲观看直播,可关注【智猩猩GenAI视频号】预约。 (239字符)
|
13天前
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。
|
存储 Kubernetes NoSQL
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(六)
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(六)
208 0
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(六)
|
监控 应用服务中间件 nginx
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(五)
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(五)
210 0
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(五)
|
数据可视化 Perl 容器
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(四)
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(四)
319 0
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(四)
|
数据可视化 NoSQL 应用服务中间件
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(三)
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(三)
265 0
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(三)

相关产品

  • 容器计算服务
  • 容器服务Kubernetes版