我有一个关于.Capability.APIVersions.Has 的问题 - 我不确定它是如何工作的我有以下功能:
{{- define "fybrik.certManagerApiVersion" -}}
{{- if .Capabilities.APIVersions.Has "cert-manager.io/v1beta1" -}}
cert-manager.io/v1beta1
{{- else if .Capabilities.APIVersions.Has "cert-manager.io/v1alpha2" -}}
cert-manager.io/v1alpha2
{{- else if .Capabilities.APIVersions.Has "certmanager.k8s.io/v1alpha1" -}}
certmanager.k8s.io/v1alpha1
{{- else -}}
cert-manager.io/v1
{{- end -}}
kubectl api-versions 显示:
cert-manager.io/v1
cert-manager.io/v1alpha2
cert-manager.io/v1alpha3
cert-manager.io/v1beta1
但是当使用 helm install 命令生成资源时,我总是将 cert-manager.io/v1 作为 api。我希望 api 是 cert-manager.io/v1beta1,我想知道缺少什么?谢谢
这取决于您使用的 Helm 命令。
helm template
将使用 kubectl 编译的 apiVersions(查看此处 https://github.com/helm/helm/blob/main/go.mod#L43)。
helm install
将使用 k8s 服务器提供的 apiVersions,使用 helm install --dry-run --debug
查看渲染结果。
您的集群需要一个首选版本。
$ kubectl get --raw /apis/cert-manager.io | python -m json.tool
{
"apiVersion": "v1",
"kind": "APIGroup",
"name": "cert-manager.io",
"preferredVersion": {
"groupVersion": "cert-manager.io/v1",
"version": "v1"
},
"versions": [
{
"groupVersion": "cert-manager.io/v1",
"version": "v1"
},
{
"groupVersion": "cert-manager.io/v1beta1",
"version": "v1beta1"
},
{
"groupVersion": "cert-manager.io/v1alpha3",
"version": "v1alpha3"
},
{
"groupVersion": "cert-manager.io/v1alpha2",
"version": "v1alpha2"
}
]
}