在阿里云容器服务Kubernetes上使用分批发布

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 前言 Kubernetes作为非常流行的容器编排引擎已经逐渐成为容器交付的标准,为了解决标准化交付的问题,Kubernetes抽象了多种概念来代表不同的交付内容。 例如,不同应用场景的服务载体可以通过Deployment、DaemonSet、StatefulSet、CronJob来抽象;网络接入层可以通过Service进行抽象;服务配置可以通过ConfigMap或者Secret进行抽象等等。

前言

Kubernetes作为非常流行的容器编排引擎已经逐渐成为容器交付的标准,为了解决标准化交付的问题,Kubernetes抽象了多种概念来代表不同的交付内容。

lALPBY0V48AYTNTNAWrNAnQ_628_362_png_620x10000q90g

例如,不同应用场景的服务载体可以通过Deployment、DaemonSet、StatefulSet、CronJob来抽象;网络接入层可以通过Service进行抽象;服务配置可以通过ConfigMap或者Secret进行抽象等等。有了多种交付内容的抽象,开发者可以很简单将自身的应用交付进行拆分,变成多种抽象的组合,实现代码即交付。

分批发布

一个标准的应用可以抽象为网络、服务载体与存储,而一次应用的变更通常主要是针对服务载体进行的变更。但是如果我们只变更服务载体而操作网络会导致应用可能会出现服务中断等现象。为了解决上述的场景,我们通常会推荐使用不同的发布方式来解决,例如蓝绿发布解决零宕机发布的问题、金丝雀发布解决无差别快速验证的问题。

lALPBY0V48AYTFjMk80B_A_504_147_png_620x10000q90g

但是这些发布方式在Kubernetes中怎么使用呢?因为Kubernetes中抽象是非常原子的,而通常带有发布方式的变更过程需要组合服务载体和网络两种资源的变化。在标准的Kubernetes中是无法支持的,在开源社区中Helm或许是一个答案,而今天我们要给大家介绍一种更简单的方案,阿里云容器服务Kubernetes中的分批发布功能。(注意:目前仅支持1.9.3及以上的版本。)

分批发布顾名思义是通过分批的方式进行应用零宕机快速验证的方式。分批发布功能是基于Kubernetes中的CRD(CustomResourceDefinition)进行定义的,包含一个Service和一个StatefulSet,分批发布的过程同时操作了服务载体和网络,实现了应用的分批次发布、接入层快速变更、快速验证、发布继续、发布回滚、历史版本回滚等功能。

image

上图是一个分三批的分批发布流程,在发布时第一批次的Pod会进行新版本的变更,当第一批次的所有Pod都处在运行态的时候,service会进行流量的切换,将所有流量打到第一批次的Pod上面,进行快速验证,如果没有问题则继续发布,如果有问题可以立即进行回滚,整个过程无流量中断。

操作步骤

  1. 控制台选择左侧菜单中的发布,右侧点击创建分批发布按钮。如果按钮是灰色的,可以参考升级连接进行升级。lALPBY0V48Aku4jNA9PNBZw_1436_979_png_620x10000q90g
  2. 填写相关配置
    lALPBY0V48AkvLjNA9PNBaA_1440_979_png_620x10000q90g

此时查看分批发布详情,可以看到4个nginx Pod已经都启动完毕,关联的服务也生成完毕,发布处在未开始状态。
image_20180806153100344

  1. 接下点击右上角的新建变更,来进行一次分批发布的变更
    image_20180806153221908
  2. 再次查看分批发布详情,可以看到未开始中的Pod为2个,已完成的Pod为2个,表示分批发布第一个批次已完成。分批发布的整体状态处在 等待部署完成 (总共 2 个批次,当前处在第 1 个批次,当前批次状态为已完成)。
    image_20180806153413696
  3. 此时点击继续按钮会发布下一个批次,如果点击回滚按钮,那么此时会回滚掉刚才的版本。当发布完成后。点击历史,可以进行历史版本的回滚。
    image_20180806160131569

总结

分批发布功能主要是为了解决快速无流量损失的验证,与蓝绿发布相比更节省资源,目前暂时只支持页面操作,后续会开放yaml文件编辑,支持更复杂的操作。

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
18天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
61 2
|
28天前
|
Kubernetes 监控 开发者
掌握容器化:Docker与Kubernetes的最佳实践
【10月更文挑战第26天】本文深入探讨了Docker和Kubernetes的最佳实践,涵盖Dockerfile优化、数据卷管理、网络配置、Pod设计、服务发现与负载均衡、声明式更新等内容。同时介绍了容器化现有应用、自动化部署、监控与日志等开发技巧,以及Docker Compose和Helm等实用工具。旨在帮助开发者提高开发效率和系统稳定性,构建现代、高效、可扩展的应用。
|
28天前
|
弹性计算 人工智能 Serverless
阿里云ACK One:注册集群云上节点池(CPU/GPU)自动弹性伸缩,助力企业业务高效扩展
在当今数字化时代,企业业务的快速增长对IT基础设施提出了更高要求。然而,传统IDC数据中心却在业务存在扩容慢、缩容难等问题。为此,阿里云推出ACK One注册集群架构,通过云上节点池(CPU/GPU)自动弹性伸缩等特性,为企业带来全新突破。
|
2月前
|
专有云 Serverless 持续交付
亚太唯一,阿里云再度入选Gartner®容器管理魔力象限领导者
Gartner正式发布 2024《容器管理魔力象限》报告,阿里云再度成为中国唯一一家入选「领导者象限」的科技公司。
|
20天前
|
存储 Kubernetes Docker
【赵渝强老师】Kubernetes中Pod的基础容器
Pod 是 Kubernetes 中的基本单位,代表集群上运行的一个进程。它由一个或多个容器组成,包括业务容器、基础容器、初始化容器和临时容器。基础容器负责维护 Pod 的网络空间,对用户透明。文中附有图片和视频讲解,详细介绍了 Pod 的组成结构及其在网络配置中的作用。
【赵渝强老师】Kubernetes中Pod的基础容器
|
7天前
|
Kubernetes Cloud Native API
深入理解Kubernetes——容器编排的王者之道
深入理解Kubernetes——容器编排的王者之道
26 1
|
2月前
|
Kubernetes 监控 Cloud Native
|
17天前
|
存储 Kubernetes 网络协议
k8s的无头服务
Headless Service 是一种特殊的 Kubernetes 服务,其 `spec:clusterIP` 设置为 `None`,不会分配 ClusterIP,通过 DNS 解析提供服务发现。与普通服务不同,Headless Service 不提供负载均衡功能,每个 Pod 都有唯一的 DNS 记录,直接映射到其 IP 地址,适用于有状态应用的场景,如与 StatefulSet 一起部署数据库。示例中通过创建 Nginx 的 StatefulSet 和 Headless Service,展示了如何直接访问单个 Pod 并进行内容修改。
32 3
|
20天前
|
运维 Kubernetes Shell
【赵渝强老师】K8s中Pod的临时容器
Pod 是 Kubernetes 中的基本调度单位,由一个或多个容器组成,包括业务容器、基础容器、初始化容器和临时容器。临时容器用于故障排查和性能诊断,不适用于构建应用程序。当 Pod 中的容器异常退出或容器镜像不包含调试工具时,临时容器非常有用。文中通过示例展示了如何使用 `kubectl debug` 命令创建临时容器进行调试。
|
20天前
|
Kubernetes 调度 容器
【赵渝强老师】K8s中Pod中的业务容器
Pod 是 Kubernetes 中的基本调度单元,由一个或多个容器组成。除了业务容器,Pod 还包括基础容器、初始化容器和临时容器。本文通过示例介绍如何创建包含业务容器的 Pod,并提供了一个视频讲解。示例中创建了一个名为 "busybox-container" 的业务容器,并使用 `kubectl create -f firstpod.yaml` 命令部署 Pod。

相关产品

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