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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 在我们使用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快速部署和发布应用

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
2月前
|
运维
计算巢如何使用fluxcd在ack部署helm chart
为支持helm服务运维管理功能,现在改用fluxcd的方式进行helm chart部署,这里计算巢对fluxcd进行部署helm chart的过程进行了封装,封装成了ROS公共模块MODULE::ACS::ComputeNest::FluxOciHelmDeploy,下面将主要介绍下怎么使用这个模块在计算巢中进行Helm Chart的部署。
36 3
|
2月前
|
存储 Kubernetes 容器
百度搜索:蓝易云【Kubernetes使用helm部署NFS Provisioner】
现在,你已经成功使用Helm部署了NFS Provisioner,并且可以在Kubernetes中创建使用NFS存储的PersistentVolumeClaim。
43 10
|
4月前
|
存储 Kubernetes 数据安全/隐私保护
k8s学习-Secret(创建、使用、更新、删除等)
k8s学习-Secret(创建、使用、更新、删除等)
178 0
|
6月前
|
存储 Kubernetes 网络协议
kubernetes ConfigMap存储卷
kubernetes ConfigMap存储卷
|
6月前
|
存储 Kubernetes API
【K8S系列】第十一讲:包管理神器-Helm
【K8S系列】第十一讲:包管理神器-Helm
101 0
|
6天前
|
存储 Kubernetes 数据安全/隐私保护
Kubernetes的ConfigMap和Secret
Kubernetes的ConfigMap和Secret
26 0
|
4月前
|
存储 Kubernetes API
k8s学习-ConfigMap(创建、使用、更新、删除等)
k8s学习-ConfigMap(创建、使用、更新、删除等)
474 0
|
30天前
|
存储 Kubernetes 分布式数据库
利用Helm在K8S上部署 PolarDB-X 集群(详细步骤--亲测!!!)
利用Helm在K8S上部署 PolarDB-X 集群(详细步骤--亲测!!!)
77 0
|
4月前
|
Kubernetes Cloud Native 应用服务中间件
云原生|kubernetes|关于configMap的一些学习
云原生|kubernetes|关于configMap的一些学习
49 1
|
4月前
|
Kubernetes 数据安全/隐私保护 Docker
云原生|kubernetes|关于secret的一些使用
云原生|kubernetes|关于secret的一些使用
63 0

相关产品

  • 容器服务Kubernetes版