Kubernetes yaml 文件不能用作 helm 模板
Posted
技术标签:
【中文标题】Kubernetes yaml 文件不能用作 helm 模板【英文标题】:Kubernetes yaml file not working as a helm template 【发布时间】:2021-10-06 03:51:03 【问题描述】:我知道这是一个重复的问题,但是我没有得到满足我查询的答案。我正在尝试为 cronjob 部署创建一个掌舵图。我将掌舵图名称保留为 cronjob-example。
现在,当我手动运行命令 helm install
或 helm upgrade
时,我可以安装或更新 cronjob,但是当我尝试从 CICD 管道执行相同操作时,它会在 @987654323 的第 19 行将文件 YAML 转换为 JSON 时出错@文件。
cronjob.yaml 文件。
apiVersion: batch/v1beta1
kind: CronJob
metadata:
namespace: .Values.metadata.namespace
creationTimestamp: .Values.metadata.creationTimestamp
name: .Values.name
spec:
jobTemplate:
metadata:
creationTimestamp: .Values.metadata.creationTimestamp
name: .Values.name
spec:
template:
metadata:
creationTimestamp: .Values.metadata.creationTimestamp
spec:
imagePullSecrets:
- name: .Values.image.imagePullSecrets
containers:
- image: .Values.image.repository
name: .Chart.Name
resources:
restartPolicy: OnFailure
schedule: '*/1 * * * *'
status:
values.yaml 文件
---
metadata:
namespace: "K8S_NS"
name: "HELM_APP_NAME"
#name: "cronjob-example"
nodeLabel: agent
image:
repository: "CI_REGISTRY_IMAGE/CI_COMMIT_REF_SLUG:CI_COMMIT_SHA.CI_PIPELINE_IID"
pullPolicy: "Always"
imagePullSecrets: git-image-pull-secret-cron
creationTimestamp: null
variables:
- name: "TLS_ENV"
value: "tst"
我想知道为什么当我手动运行它时它会成功,以及为什么它通过 CICD 管道失败。除部署阶段外,一切都在 CICD 管道中正常工作。那里失败了。我所做的只是对手动安装/升级时从 cicd 中先前阶段获得的值进行硬编码。
【问题讨论】:
你是如何在你的 values.yml 中填写占位符的?您能否发布一个示例,生成您的 CI 作业的 values.yml 的外观如何? 我为K8S_NS
类似变量设置了gitlab CICD 变量,CI_REGISTRY_IMAGE
类似变量是gitlab 提供的标准变量。我已经有这种用于部署的实现,现在我想实现它 cronjob。
【参考方案1】:
问题是模板中的这个位置。
- image: .Values.image.repository
repository: "CI_REGISTRY_IMAGE /CI_COMMIT_REF_SLUG:CI_COMMIT_SHA.CI_PIPELINE_IID"
的替换值导致无效值。
【讨论】:
这些是 gitlab 提供的标准变量。请看看这个 --> docs.gitlab.com/ee/ci/variables/predefined_variables.html @ShaileshSutar 我明白这一点。但是如果没有某种逻辑,这些将不会神奇地填充到您的 values.yml 中。那么您是否设置了一种机制将这些放入您的 values.yaml 中? 谢谢 Lukas 和 Harsh。我弄清楚我的问题是什么。我们在部署中使用 j2 模板。 values.yaml 实际上是一个类似于 values.yaml.j2 的 j2 模板,它执行所有占位符替换。该文件刚刚命名为 values.yaml。我需要那个文件是 values.yaml.j2【参考方案2】:正如你提到的,第 19 行存在问题
- image: .Values.image.repository
您在本地尝试时可能会给出正确的值,并检查在 CI 期间传递了哪些值
repository: "CI_REGISTRY_IMAGE /CI_COMMIT_REF_SLUG:CI_COMMIT_SHA.CI_PIPELINE_IID"
如果你想调试更多你也可以尝试
helm install --dry-run --debug
或 helm template --debug
这是让服务器呈现您的模板,然后返回生成的清单文件的好方法。
【讨论】:
以上是关于Kubernetes yaml 文件不能用作 helm 模板的主要内容,如果未能解决你的问题,请参考以下文章