k8s 进阶: 动态更新镜像标签

kustomize 是 sig-cli 的一个子项目,它的设计目的是给 k8s 的用户提供一种可以重复使用配置的声明式应用管理,
从而在配置工作中用户只需要管理和维护 kubernetes 的原生API对象,而不需要使用复杂的模版。kustomize 的基本使用可以参见之前的一系列文章。
初体验
名称前缀
标注和注释

在 kubernetes 使用中,容器镜像的标签是需要经常更新的一个部分,而能够简单快速地更改容器镜像的标签也成了众多 Kustomize 用户迫切需要的一个功能。在 kustomize v1.0.5 中,这个功能终于实现了。在这篇文章中,我们通过一个>简单的 Pod 例子来学习使用这个 kustomize 的新功能。首先创建一个 kustomization,它包含了一个名为 pod.yaml 的资源。

DEMO_HOME=$(mktemp -d)

cat <$DEMO_HOME/kustomization.yaml
resources:
- pod.yaml
EOF

该 pod.yaml 包含如下内容

cat <$DEMO_HOME/pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox:1.29.0
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-mydb
    image: busybox:1.29.0
    command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']
EOF

可以看到,该 pod.yaml 定义了一个名字 myapp-pod 的 Pod,这个 Pod 会运行两个容器,一个是 initContainers 当中的 init-mydb, 一个是 containers 当中的 myapp-container,这两个容器中运行的都是同一个镜像 busybox:1.29.0,不同之处在于运行时的参数。假如现在需要更新 busybox 的版本到 1.29.1,怎样改动当前的 kusomization 才>能实现这个更新呢?除了手动更改 pod.yaml 当中的标签之外,kustomize v1.0.5 还提供了一种快速更改镜像标签的方法。
通过如下命令

cd $DEMO_HOME
kustomize edit set imagetag busybox:1.29.1

kustomization.yaml 文件添加 imageTags:

imageTags:
- name: busybox
  newTag: 1.29.1

运行 kustomize build $DEMO_HOME, 确认容器镜像的标签都改为了 1.29.1.

test 2 == \
  $(kustomize build $DEMO_HOME | grep busybox:1.29.1 | wc -l); \
  echo $?

参考资料

[introducing-kustomize-template-free-configuration-customization-for-kubernetes](Introducing kustomize; Template-free Configuration Customization for Kubernetes - Kubernetes)
kustomize demo: change image tags

你可能感兴趣的:(k8s 进阶: 动态更新镜像标签)