Lam*_*bda 12 kubernetes google-kubernetes-engine kustomize
在我们的项目中,也使用 Kustomize,我们的基本deployment.yaml文件如下所示:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:IMAGE_TAG # <------------------------------
ports:
- containerPort: 80
Run Code Online (Sandbox Code Playgroud)
然后我们用它sed来替换IMAGE_TAG我们想要部署的镜像版本。
是否有更复杂的方法来执行此操作,而不是使用 编辑文本 yaml 文件sed?
ITC*_*hap 12
为此有一个特定的转换器,称为图像转换器。您可以保持部署不变,带或不带标签:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
Run Code Online (Sandbox Code Playgroud)
然后在你的自定义文件中:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
images:
- name: nginx
newTag: MYNEWTAG
Run Code Online (Sandbox Code Playgroud)
请记住,这将替换 kustomization 文件中包含的所有资源的所有 nginx 映像的标签。如果您需要运行多个版本的 nginx,您可以用占位符替换部署中的映像名称,并在转换器中使用不同的条目。
可以使用环境变量中的图像标签,而无需为每个不同的标签编辑文件。如果您的图像标签需要变化而不更改版本控制文件,这非常有用。
\n标准kubectl足以达到此目的。简而言之,使用configMapGenerator由环境变量填充的数据。然后添加replacements引用此 ConfigMap 数据来替换相关图像标签。
继续您的示例deployment.yaml,您可以kustomization.yaml在同一文件夹中拥有一个如下所示的文件:
apiVersion: kustomize.config.k8s.io/v1beta1\nkind: Kustomization\n\n# Generate a ConfigMap based on the environment variables in the file `.env`.\nconfigMapGenerator:\n - name: my-config-map\n envs:\n - .env\n\nreplacements:\n - source:\n # Replace any matches by the value of environment variable `MY_IMAGE_TAG`.\n kind: ConfigMap\n name: my-config-map\n fieldPath: data.MY_IMAGE_TAG\n targets:\n - select:\n # In each Deployment resource \xe2\x80\xa6\n kind: Deployment\n fieldPaths:\n # \xe2\x80\xa6 match the image of container `nginx` \xe2\x80\xa6\n - spec.template.spec.containers.[name=nginx].image\n options:\n # \xe2\x80\xa6 but replace only the second part (image tag) when split by ":".\n delimiter: ":"\n index: 1\n\nresources:\n - deployment.yaml\nRun Code Online (Sandbox Code Playgroud)\n在同一文件夹中,您需要一个.env仅包含环境变量名称的文件(注意:仅包含名称,未分配值):
MY_IMAGE_TAG\nRun Code Online (Sandbox Code Playgroud)\n现在MY_IMAGE_TAG从本地环境集成为运行时的图像标签kubectl kustomize,kubectl apply --kustomize等等。
演示:
\nMY_IMAGE_TAG=foobar kubectl kustomize .\nRun Code Online (Sandbox Code Playgroud)\n这将打印生成的图像标签,这是foobar所需的:
MY_IMAGE_TAG\nRun Code Online (Sandbox Code Playgroud)\n请记住configMapGenerator文档中的以下内容:
\n\n注意:建议谨慎使用本地环境变量填充功能 - 带补丁的覆盖通常更易于维护。当无法轻松预测时,从环境中设置值可能会很有用,例如 git SHA。
\n
如果您只是想在多个文件之间共享固定图像标签,请参阅已经建议的images转换器。
| 归档时间: |
|
| 查看次数: |
11632 次 |
| 最近记录: |