kubernetes - 获取helm回滚镜像版本
问题描述
我正在使用 C# 代码运行命令helm rollback <ImageName>
以回滚到以前的版本(通过new Proccess()
使用 helm 创建)。
有没有办法知道命令回滚到的图像的标签?
解决方案
环境
部署了 2 个 helm 图表的小型集群:
helm
使用 v3.7.0。
还安装了yq以处理 yaml 中的输出,就像jq
处理 json 一样。
回滚逻辑
如果revision
设置为 no,则将在 previous 上执行回滚revision
。如果在没有 的情况下再次rollback
运行revision
,将再次使用前一个。
$ helm history traefik
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Tue Oct 12 11:28:22 2021 superseded traefik-10.3.5 2.5.3 Install complete
2 Tue Oct 12 11:42:47 2021 superseded traefik-10.3.6 2.5.3 Upgrade complete
3 Tue Oct 12 11:44:32 2021 superseded traefik-10.3.2 2.5.1 Upgrade complete
4 Tue Oct 12 12:03:26 2021 superseded traefik-10.3.6 2.5.3 Rollback to 2
5 Tue Oct 12 13:26:02 2021 deployed traefik-10.3.2 2.5.1 Rollback to 3
6 Tue Oct 12 13:26:53 2021 deployed traefik-10.3.6 2.5.3 Rollback to 4
因此,要弄清楚回滚修订的详细信息,我们可以使用当前修订。
与它可用于从其他地方查找详细信息的方式相同revisions
,将使用标志--revision XX
,例如
$ helm get manifest traefik --revision 3
回答
经过一些研究,我发现至少有 3 个可以检索此信息的选项:
从应用的清单(最精确的方法):
$ helm get manifest ingress-nginx -n ingress-nginx | yq eval '.spec.template.spec.containers[].image' - | grep -oE '[v]?[0-9]\.[0-9]\.[0-9]' v1.0.0 $ helm get manifest traefik | yq eval '.spec.template.spec.containers[].image' - | grep -oE '[v]?[0-9]\.[0-9]\.[0-9]' 2.5.3
在此示例中使用
yq
,因为helm manifest
仅在以下位置提供输出yaml
:$ helm 获取清单 --help
此命令获取给定版本的生成清单。
清单是由此版本的图表生成的 Kubernetes 资源的 YAML 编码表示。如果一个图表依赖于其他图表,这些资源也将包含在清单中。
从值(并不总是有效,取决于图表和/或图像详细信息是否位于
values.yaml
或使用--set
标志设置):$ helm get values ingress-nginx --all -n ingress-nginx -o json | jq '.controller.image.tag' "v1.0.0" $ helm get values traefik --all -o json | jq '.controller.image.tag' null
来自 kubernetes 的秘密(最困难的):
所有
revisions
都存储secrets
在部署的同一命名空间中chart
,例如:$ kubectl get secrets NAME TYPE DATA AGE sh.helm.release.v1.traefik.v1 helm.sh/release.v1 1 134m sh.helm.release.v1.traefik.v2 helm.sh/release.v1 1 119m sh.helm.release.v1.traefik.v3 helm.sh/release.v1 1 118m sh.helm.release.v1.traefik.v4 helm.sh/release.v1 1 99m sh.helm.release.v1.traefik.v5 helm.sh/release.v1 1 16m sh.helm.release.v1.traefik.v6 helm.sh/release.v1 1 15m
数据存储在这些
secrets
中的方式更加复杂,但image tag
也可以从中检索。提供的链接包含有关如何从中提取数据的详细信息secrets
。这是解码其中一个秘密的命令引用:
kubectl get secrets sh.helm.release.v1.wordpress.v1 -o json | jq .data.release | tr -d '"' | base64 -d | base64 -d | gzip -d
有用的链接:
推荐阅读
- c# - 根据用户下拉选择更改排序方法
- powershell - 在 Powershell 中查询给定进程的 TCP 连接数
- json - 将值列数组转换为字符串列(包含序列化的 json)
- c++ - 将字符串拆分为单个单词并将它们放在向量中
- email - 禁用 javamail 电子邮件地址验证
- mysql - mysql:列出与表中列相关的所有关系视图
- java - 我的 leetcode 753 解决方案有一个神秘的错误:使用 HashSet 而不是 Set 作为对象的引用会导致 StackOverFlow,为什么?
- python - 熊猫应用函数将 4 元素列表返回到 4 列键错误
- perl - 从 Perl 数据结构序列化 YAML 文档
- c# - 抛出异常:WindowsBase.dll 中的“System.InvalidOperationException”