【发布时间】:2022-01-02 23:45:40
【问题描述】:
我在一个 k8s 守护程序集上工作,其部署要求根据 k8s 集群提供程序类型更改某些值(gke、eks、aks、minikube、k3s、kind、使用 kubeadm 在 vm 上安装的自我管理 k8s、.. . 等)。
鉴于kubectl/kubeconfig 已配置,识别 k8s 集群提供程序类型的正确方法是什么?
一种选择是使用kubectl config current-context view:
CURRENT_CONTEXT_NAME="$(kubectl config current-context view)"
PLATFORM="self-managed"
autoDetectEnvironment(){
if [[ -z "$CURRENT_CONTEXT_NAME" ]]; then
echo "no configuration has been provided"
return
fi
echo "Autodetecting environment"
if [[ $CURRENT_CONTEXT_NAME =~ ^minikube.* ]]; then
PLATFORM="minikube"
elif [[ $CURRENT_CONTEXT_NAME =~ ^gke_.* ]]; then
PLATFORM="gke"
elif [[ $CURRENT_CONTEXT_NAME =~ ^kind-.* ]]; then
PLATFORM="kind"
elif [[ $CURRENT_CONTEXT_NAME =~ ^k3d-.* ]]; then
PLATFORM="k3d"
elif [[ $CURRENT_CONTEXT_NAME =~ ^kubernetes-.* ]]; then
PLATFORM="self-managed"
else
echo "No k8s cluster configured or unknown env!"
exit 2
fi
}
但是,这似乎很老套,并且确信它不会在所有情况下都有效。例如,对于 EKS,我无法弄清楚要使用什么正则表达式。
【问题讨论】:
-
看看这篇文章是否回答了你的问题stackoverflow.com/a/62542265/15964308
-
我不认为我可以使用
kubectl config view --minify -o jsonpath='{.clusters[].name}'...例如,在eks上我得到demo2-kubearmor-ub20.us-east-2.eksctl.io,在gke上我得到gke_mimetic-kit-294408_us-central1-c_accuknox-saas-dev....我不确定是否grepping“eksctl或gke”的名字将是一件明智的事情。你觉得还可以吗?
标签: kubernetes kubectl