容器服务: 分批发布控制台 BUG和产生原因

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 容器服务分批发布中的控制台设计不合理并存在BUG,本文为测试过程与修复建议。

容器服务

分批发布任务 BatchRelease 引用 statefulset 与 Service,并将2者 yaml 设置数据 Base64加密后在保密字典保存了一份,目前容器服务控制台在操作BatchRelease与其子资源statefulset 与 Service,后台并未同步更新数据,也没有相关提示,导致实际发布的statefulset,Service 在修改,删除等操作后,数据不一致,极其容易导致线上故障。

apiVersion: v1
items:
- apiVersion: alicloud.com/v1beta1
  kind: BatchRelease
  metadata:
    annotations:
      aliyun.batchnum: "2"
    name: lippi-hermes
    namespace: lippi-xxxx
  spec:
    serviceSecretName: batchrelease-lippi-xxxx-svc.secret
    statefulSetSecretName: batchrelease-lippi-xxxx.28802.secret
  status:
    control: {}
    release:
      batch_order: "1"
      progress: finished
      status: WaitingForConfirm
    resources:
      Service:
        name: batchrelease-lippi-xxxx-svc
        namespace: lippi-xxxx
      StatefulSet:
        name: batchrelease-lippi-xxxx
        namespace: lippi-hermes
kind: List

具体测试和验证步骤如下:

1. 建立容器服务分批发布任务:

操作过程
建立分批发布任务,控制台可设置选项只有:

  • 镜像地址、版本、secret;
  • 容器数量,资源限制和所需资源;
  • 访问设置的服务;
  • 容器配置的 command;
  • 数据卷和环境变量
    缺少容器应用配置最常用的就绪检查,存活检查,prestart,prestop,亲和力等设置(初次配置,认为肯定可以修改 yaml 方式修改配置);

保存建立后,容器服务顺利建立分批发布任务,同时在 statefulset和服务建立相应的有状态副本集、服务以及保密字典里保存的 service 和 statefulset 的 yaml(Base64加密,直接在控制台可见)。
根据自己的需求修改 statefulset 的 yaml,增加就绪检查,存活检查,prestop 做优雅下线,保存;
根据自己的需求修改 service 的相关设置,增加https 服务证书等设置
(注意修改了 statefulset 后实际上还需要修改保密字典,如果没有同步修改保密字典的 statefulset 和 service,后面发布会产生配置数据丢失,保密字典可编辑修改,是容器服务近期上线的不错的功能)

2. 更新分批发布任务分批发布

操作过程
点击分批发布任务的更新,设置条件中没有包含就绪检查,存活检查,prestop等配置选项, 使用 statefulset 并在保密字典修改过的数据卷设置也没法显示,点击保存;
查看有状态副本集 statefulset,之前设置的就绪检查,存活检查,prestop以及数据卷等设置已经丢失。
查看保密字典,生成了一个新的保密字典,之前设置的就绪检查,存活检查,prestop以及数据卷等设置已经丢失。
image

修复 BUG建议:

  • 编辑分批发布任务增加与 statefulset 一致的编辑选项,并提供 yaml 修改方式。
  • 编辑完毕更新后,除了更新 statefulset 设置也更新保密字典保存的 statefulset 数据,不要新建保密字典,在原保密字典上保存;
  • 编辑 statefulset 后,保存时判断该 statefulset 是否被分批发布任务引用,如果被引用,同步更新分批发布任务的保密字典设置数据。

3. 分批发布执行:

为了测试下面的 bug,继续在 statefulset,保密字典 添加就绪检查,存活检查,prestop以及数据卷等设置;
image

点击详情,点击新的变更进行分批发布,这个时候控制台不再显示就绪检查,存活检查,prestop,数据卷数据明显来自变更后新自动保存保密字典,丢失了数据,点击更新,这时候查看有状态副本集等配置,就绪检查,存活检查,prestop等数据再次丢失
修复 BUG建议:

  • 变更分批发布任务增加与 statefulset 一致的编辑选项,并提供 yaml 修改方式。
  • 变更完毕后,除了更新 statefulset 设置也更新保密字典保存的 statefulset 数据,不要新建保密字典,在原保密字典上保存;

4. 删除分批发布任务

选择分批发布任务,点击删除,任务成功删除,查服务和 statefulset,发现服务,有状态副本集,保密字典,服务对应的 SLB 都被无预警删除干净,slb 包含的设置信息,比如访问控制等都被清除;
修复建议:

  • 分批发布任务删除时,必须提示服务和 statefulset等都可能被删除,提供可选是否接连删除的选项后执行;
  • 服务删除连带 slb 删除是很容易产生故障的,slb 的地址往往是域名,访问控制等使用的,修复需要一定时间;

5. 修改或删除 statefulset

  修改或删除 statefulset,该操作后,如果有分批发布任务关联,并没有随着修改保密字典的 statefulset 数据,如果删除,分批发布任务BatchRelease中引用的 statefulset 并没有清除, 在发布分批发布任务或某种状态下,BatchRease 会按照保密字典的 statefulset 设置,重新建立 statefulset,并发布;

修复建议:

  • 修改 statefulset 后,提示确认后,判断是否有分批发布任务引用,如果有修改分批发布任务的保密字典里 statefulset 的设置与 statefulset 保持一致;
  • 删除 statefulset 后,提示确认后,判断是否有分批发布任务引用,如果有清理 BatchRelease 里对该任务的引用,删除对该 BatchRelease 里保密字典引用;

6. 修改或删除 service

修改或删除 service,该操作后,如果有分批发布任务关联,并没有随着修改保密字典的 service 数据,如果删除,分批发布任务BatchRelease中引用的 service 并没有清除;
修复建议:

  • 修改 service 后,提示确认后,判断是否有分批发布任务引用,如果有修改分批发布任务的保密字典里 service 的设置与 service 保持一致;
  • 删除 service 后,提示确认后,判断是否有分批发布任务引用,如果有清理 BatchRelease 里对该任务的引用,删除对该 service 里保密字典引用;
相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
7月前
|
存储 Kubernetes Docker
容器服务ACK常见问题之阿里云控制台进不去了如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
7月前
|
消息中间件 Linux 开发工具
rabbitmq使用docker容器挂载宿主机配置文件时无法访问控制台
rabbitmq使用docker容器挂载宿主机配置文件时无法访问控制台
|
Kubernetes Serverless 容器
使用ASK创建容器组,在ECI控制台查看
使用ASK创建容器组,在ECI控制台查看
141 0
使用ASK创建容器组,在ECI控制台查看
|
Kubernetes 容器
容器服务 kubernetes Deployment实现分批发布
1. 前言  容器服务官网提供的分批发布基于 StatefulSet 开发,有状态副本集部署 POD 是按照顺序一台一台的发布重启,需要消耗很长的时间,并且控制台不尽人意,存在不少坑。 StatefulSet 分批发布不支持任意数目任意批数的发布,实际操作中往往需要先发布一台线上服务做灰度,然后逐步放大。
1246 0
|
负载均衡 应用服务中间件 容器
阿里云容器服务新建集群优化方案(更新版)-使用控制台创建与ingress绑定的SLB
本文为之前博文 阿里云容器服务新建集群优化方案:https://yq.aliyun.com/articles/696136 的补充,使用控制台可以更快速的创建于 ingress 绑定的VPC 类型 SLB
1599 0
|
容器 数据安全/隐私保护
建立容器服务的分批发布功能
容器服务实现完整分批发布。
1611 0
|
Kubernetes 容器 Perl
在阿里云容器服务Kubernetes上使用分批发布
前言 Kubernetes作为非常流行的容器编排引擎已经逐渐成为容器交付的标准,为了解决标准化交付的问题,Kubernetes抽象了多种概念来代表不同的交付内容。 例如,不同应用场景的服务载体可以通过Deployment、DaemonSet、StatefulSet、CronJob来抽象;网络接入层可以通过Service进行抽象;服务配置可以通过ConfigMap或者Secret进行抽象等等。
2437 0
Visual Studio 控制台中文乱码Bug
对vs不是很熟,百度了一下,有的告诉你设置编码格式,还有的让你去下载一个插件ForceUTF8 ,然后都是辣鸡,并没有卵用,最后解决在控制台上方的白色区域右键选择默认值,然后选择选项,设置简体中文。
2696 0
|
3天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
118 77
|
11天前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序

相关产品

  • 容器计算服务