我想编写一个通用的 helm 图表,该图表可以在 kubernetes 平台的所有提供商(Azure aks、AWS eks)上使用。我至少需要处理一个差异 - AWS eks 不支持将 sessionAffinity 作为服务规范的一部分。
(自动)检测 kubernetes 平台以便处理此类差异的最佳方法是什么?我总是可以要求用户提供该信息作为输入,但我想避免这种情况。
对于 EKS,您可以使用 Helm 功能,因为 EKS 似乎将
-eks
附加到 Kubernetes 集群的 GitVersion。
您可以使用
kubectl version
看到这一点。
Helm 中记录了如何读取 GitVersion 值:
https://helm.sh/docs/chart_template_guide/builtin_objects/
您的模板代码应如下所示:
{{- if (.Capabilities.KubeVersion.GitVersion | contains "-eks") }}
( specific EKS lines here )
{{- end }}
GKE 也是如此:
{{- if (.Capabilities.KubeVersion.GitVersion | contains "-gke") }}
( specific GKE lines here )
{{- end }}
对于 AKS,您不能执行此操作,因为
kubectl version
返回 GitVersion
,即标准 SemVer 版本,例如:v1.25.2
根据 Kubernetes 上的云提供商文档,“树内云提供商通常需要在命令行中为 kube-apiserver、kube-controller-manager 和 kube-controller-manager 指定 --cloud-provider 和 --cloud-config kubelet”。因此,如果您可以查询这些值,您就可以实现您想要的。