利用Helm驱动Kubernetes workload跟随ConfigMap/Secret联动更新

简介: 在我们使用kubernetes的过程中,通常都会将应用的配置文件放到ConfigMap或/和Secret中,但是也经常碰到配置文件更新后如何让其生效的问题,今天我们就来演示如何利用Helm来解决这个问题 环境准备 创建Kubernetes集群 阿里云容器服务Kubernetes

在我们使用kubernetes的过程中,通常都会将应用的配置文件放到ConfigMap或/和Secret中,但是也经常碰到配置文件更新后如何让其生效的问题,今天我们就来演示如何利用Helm来解决这个问题

环境准备

创建Kubernetes集群

阿里云容器服务Kubernetes 1.11.2目前已经上线,集群安装后会自动部署Helm Tiller

安装Helm Client

Helm Client是我们后续操作的基础,安装方法请参照这里

获取RabbitMQ Chart

为了后面演示Helm的功能,需要获取Chart至本地,可以使用Helm命令获取然后解压

helm fetch stable/rabbitmq
tar xvf rabbitmq-2.2.0.tgz

如果网络受限,可以从github上获取

部署RabbitMQ

helm upgrade --install rabbitmq rabbitmq \
--set-string rabbitmq.password=123456 \
--set ingress.enabled=true

查看Ingress Controller的EXTERNAL-IP

~ kubectl -n kube-system get svc nginx-ingress-lb
NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                      AGE
nginx-ingress-lb       LoadBalancer   172.19.5.242    47.xxx.61.xxx   80:30544/TCP,443:31608/TCP   11d

然后用浏览器访问EXTERNAL-IP地址,可以看到RabbitMQ管理后台的登录页面,使用下面的命令查看在secret中保存的密码,配合user用户即可登入管理后台

echo "Password      : $(kubectl get secret --namespace default rabbitmq -o jsonpath="{
   .data.rabbitmq-password}" | base64 --decode)"
Password      : 123456

更新RabblitMQ

如果我们现在希望更将RabbitMQ的密码做一下修改,执行下面的命令

helm upgrade --install rabbitmq rabbitmq \
--set-string rabbitmq.password=1234567 \
--set ingress.enabled=true

查看更新后的密码

echo "Password      : $(kubectl get secret --namespace default rabbitmq -o jsonpath="{
   .data.rabbitmq-password}" | base64 --decode)"
Password      : 1234567

可以发现secret已经更新,但是使用新的密码登录却会失败,这便是我们在利用ConfigMap和Secret来管理配置文件时常常碰到的问题,ConfigMqp和Secret更新后,使用它们内容的Deployment/Statefulset等workload不能联动更新,下面我们通过对官方的RabbitMQ Chart做一点修改,来实现解决这个问题

修改RabbitMQ Chart

rabbitmq/templates/statefulset.yaml的spec.template.metadata下加入这一段

annotations:
    checksum/config: {
   {
    include (print $.Template.BasePath "/secrets.yaml") . | sha256sum }}

如下图所示image

添加这一节的效果就是,在rabbitmq/templates/secrets.yaml中有任何内容改变,都会导致statefulset的sepc下的annotation被更新,进而驱动重建pod,达到我们想要的效果

重新执行上面的更新命令,pod重建后即可使用我们制定的密码登录管理后台

总结

本文演示了利用Helm内置Go Template函数和变量来实现kubernetes workload跟随配合自动更新效果

欢迎大家使用阿里云上的容器服务,利用kubernetes集群上自动部署的Helm快速部署和发布应用

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
运维 Kubernetes 容器
【Azure K8S】演示修复因AKS密钥过期而导致创建服务不成功的问题(The provided client secret keys for app ****** are expired)
【Azure K8S】演示修复因AKS密钥过期而导致创建服务不成功的问题(The provided client secret keys for app ****** are expired)
451 2
【Azure K8S】演示修复因AKS密钥过期而导致创建服务不成功的问题(The provided client secret keys for app ****** are expired)
|
Kubernetes 关系型数据库 MySQL
k8s之Secret
k8s之Secret
|
存储 Kubernetes 开发工具
k8s学习--ConfigMap详细解释与应用
ConfigMap 是 Kubernetes 中用于管理非机密配置数据的 API 对象,可将应用配置与容器分离,便于动态管理和更新。它支持四种创建方式:命令行参数、多个文件、文件内的键值对以及 YAML 资源清单文件。ConfigMap 可通过环境变量或挂载为卷的方式传递给 Pod,并且当通过卷挂载时支持热更新。这使得配置管理更加灵活和安全,无需重新部署应用即可更新配置。
1405 0
|
缓存 Kubernetes 应用服务中间件
k8s学习--helm的详细解释及安装和常用命令
k8s学习--helm的详细解释及安装和常用命令
758 0
k8s学习--helm的详细解释及安装和常用命令
|
存储 Kubernetes 数据安全/隐私保护
k8s学习笔记之ConfigMap和Secret
k8s学习笔记之ConfigMap和Secret
|
Kubernetes 关系型数据库 MySQL
k8s学习--利用helm部署应用mysql,加深helm的理解
k8s学习--利用helm部署应用mysql,加深helm的理解
1560 0
|
存储 Kubernetes 数据安全/隐私保护
k8s学习--Secret详细解释与应用
Secret 支持四种类型: - **Opaque Secrets**:存储任意类型机密数据,需自行加密。 - **Service Account Token Secrets**:自动管理 API 访问令牌。 - **Docker Registry Secrets**:存储 Docker 私有仓库认证信息。 - **TLS Secrets**:存储 TLS 证书和私钥,用于加密通信。
1436 0
|
11月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
842 1
|
11月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
594 89
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
1195 9

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多