使用Kustomize渲染CockroachDB Helm Chart时API版本错误问询
使用kubectl kustomize渲染CockroachDB Helm Chart时,部分资源生成了不兼容的Kubernetes API版本。
我的kustomization配置:
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: apps generators: - cockroachdbChart.yaml
Helm Chart Inflator配置:
apiVersion: builtin kind: HelmChartInflationGenerator metadata: name: crdb name: cockroachdb repo: https://charts.cockroachdb.com/ version: 10.0.3 releaseName: crdb namespace: apps IncludeCRDs: true
执行kubectl kustomize --enable-helm后,部分资源被渲染为v1beta1版本,但我的Kubernetes集群(Server Version: v1.25.4)仅支持v1版本:
» kubectl kustomize --enable-helm crdb-test | grep -A 5 -B 1 v1beta --- apiVersion: batch/v1beta1 kind: CronJob metadata: labels: app.kubernetes.io/instance: crdb app.kubernetes.io/managed-by: Helm -- --- apiVersion: batch/v1beta1 kind: CronJob metadata: labels: app.kubernetes.io/instance: crdb app.kubernetes.io/managed-by: Helm -- --- apiVersion: policy/v1beta1 kind: PodDisruptionBudget metadata: labels: app.kubernetes.io/instance: crdb app.kubernetes.io/managed-by: Helm
本地工具版本:
» kubectl version --short Client Version: v1.24.3 Kustomize Version: v4.5.4 Server Version: v1.25.4 » helm version --short v3.10.3+gd506314
请问这是Kustomize的问题吗?能否在kustomization文件中指定使用的API版本?
这不是Kustomize的问题,根源在于你使用的CockroachDB Helm Chart(10.0.3版本)本身还在生成旧的API版本资源。
具体解决办法:
升级CockroachDB Chart版本
检查CockroachDB官方Chart仓库,更新到支持batch/v1(CronJob)和policy/v1(PodDisruptionBudget)的新版本。较新的Chart会适配Kubernetes 1.21+的API版本要求(这两个beta版本在1.21被弃用,1.25移除)。用Kustomize的patches字段修改API版本
如果暂时无法升级Chart,可以在kustomization.yaml中添加patches,批量替换旧API版本:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: apps generators: - cockroachdbChart.yaml patches: - target: kind: CronJob version: v1beta1 group: batch patch: |- - op: replace path: /apiVersion value: batch/v1 - target: kind: PodDisruptionBudget version: v1beta1 group: policy patch: |- - op: replace path: /apiVersion value: policy/v1这个配置会把所有
batch/v1beta1 CronJob替换为batch/v1,policy/v1beta1 PodDisruptionBudget替换为policy/v1。通过Helm参数强制生成兼容API版本
部分Chart支持通过设置Helm Values来切换API版本。查看CockroachDB Chart的values.yaml,是否有类似cronJob.apiVersion或者pdb.apiVersion的配置项,在HelmChartInflationGenerator中添加values:apiVersion: builtin kind: HelmChartInflationGenerator metadata: name: crdb name: cockroachdb repo: https://charts.cockroachdb.com/ version: 10.0.3 releaseName: crdb namespace: apps IncludeCRDs: true values: | cronJob: apiVersion: batch/v1 pdb: apiVersion: policy/v1注意:这个方法需要Chart本身支持对应的values配置,你需要先确认Chart的values.yaml是否有相关项。
内容的提问来源于stack exchange,提问作者hobyte

