使用 kustomize 修补 kubernetes cronjob

patch kubernetes cronjob with kustomize

我正在尝试修补一个 cronjob,但不知何故它没有像我预期的那样工作。我使用相同的文件夹结构进行部署并且有效。

这是文件夹结构:

.
├── base
│   ├── kustomization.yaml
│   └── war.cron.yaml
└── overlays
    └── staging
        ├── kustomization.yaml
        ├── war.cron.patch.yaml
        └── war.cron.staging.env

base/kustomization.yaml

---
kind: Kustomization
resources:
- war.cron.yaml

base/war.cron.yaml

---
apiVersion: batch/v1
kind: CronJob
metadata:
  name: war-event-cron
spec:
  schedule: "*/5 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: war-event-cron
            image: my-registry/war-service
            imagePullPolicy: IfNotPresent
            command:
            - python
            - run.py
            args:
            - sync-events
            envFrom:
            - secretRef:
                name: war-event-cron-secret
          restartPolicy: OnFailure

然后我尝试在暂存覆盖中对此进行修补。

overlays/staging/kustomization.yaml

---
kind: Kustomization
namespace: staging
bases:
- "../../base"
patchesStrategicMerge:
- war.cron.patch.yaml
secretGenerator:
- name: war-event-cron-secret
  behavior: create
  envs:
  - war.cron.staging.env

overlays/staging/war.cron.patch.yaml

---
apiVersion: batch/v1
kind: CronJob
metadata:
  name: war-event-cron
spec:
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: war-event-cron
            image: my-registry/war-service:nightly
            args:
            - sync-events
            - --debug

但是kustomize build overlays/staging/的结果不是我想要的。 command 消失了,secret 没有被引用。

apiVersion: v1
data:
  ...
kind: Secret
metadata:
  name: war-event-cron-secret-d8m6bh7284
  namespace: staging
type: Opaque
---
apiVersion: batch/v1
kind: CronJob
metadata:
  name: war-event-cron
  namespace: staging
spec:
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - args:
            - sync-events
            - --debug
            image: my-registry/war-service:nightly
            name: war-event-cron
          restartPolicy: OnFailure
  schedule: '*/5 * * * *'

这是 kustomize 中的已知错误 - 查看并关注 GitHub 上的 this 主题(约一个月前创建)以获取更多信息。

目前,解决您问题的方法是在 base/war.cron.yamloverlays/staging/war.cron.patch.yaml 文件中使用 apiVersion:batch/v1beta1 而不是 apiVersion: batch/v1