es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo identificar el proveedor del clúster de Kubernetes utilizando kubectl.

Trabajo en un daemonset de k8s cuya implementación requiere que determinados valores sean cambiados dependiendo del tipo de proveedor de clúster k8s (gke, eks, aks, minikube, k3s, kind, k8s autoadministrado instalado utilizando kubeadm en una vm, … etc.).

¿Cuál es la forma correcta de identificar qué tipo de proveedor de clúster k8s es, dado que kubectl/kubeconfig ya están configurados?

Una opción es usar kubectl config current-context view:

CURRENT_CONTEXT_NAME="$(kubectl config current-context view)"
PLATFORM="autoadministrado"

autoDetectEnvironment(){
    if [[ -z "$CURRENT_CONTEXT_NAME" ]]; then
        echo "no se ha proporcionado ninguna configuración"
        return
    fi  

echo "Detectando el entorno automáticamente"

    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="autoadministrado"
    else
        echo "¡No se ha configurado ningún clúster k8s o es un entorno desconocido!"
        exit 2
    fi  
}

Sin embargo, parece un poco chapucero y seguro que no funcionará en todos los casos. Por ejemplo, para EKS no pude descubrir qué expresión regular usar.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Otra opción es utilizar el comando kubectl describe node y buscar el campo ProviderID bajo la sección Spec. El valor del campo ProviderID se puede utilizar para determinar el tipo de proveedor de clúster de Kubernetes.

    Por ejemplo, para un clúster de GKE, el ProviderID tendrá el formato gce: //project_id/zone/instance_id. Para EKS, tendrá el formato aws: /// <aws-region> / <cluster-id>. Para AKS, tendrá el formato azure: ///subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ContainerService/managedClusters/<cluster-name>.

    Aquí hay un ejemplo de fragmento de código que se puede utilizar:

    “`bash
    get_cluster_provider_type() {
    # Obtener el nombre del nodo del primer nodo en el clúster k8s
    node_name=$(kubectl get nodes -o jsonpath='{.items[0].metadata.name}’)

    # Obtener el ProviderID del nodo
    provider_id=$(kubectl describe node $node_name | awk '/ProviderID/ {print $2}')
    
    # Determinar el tipo de proveedor de clúster de Kubernetes
    if [[ $provider_id == *"gce://"* ]]; then
        echo "GKE"
    elif [[ $provider_id == *"aws://"* ]]; then
        echo "EKS"
    elif [[ $provider_id == *"azure://"* ]]; then
        echo "AKS"
    else
        echo "Tipo de proveedor de clúster k8s desconocido"
        exit 1
    fi
    

    }

    Ejemplo de uso

    cluster_provider_type=$(get_cluster_provider_type)
    echo “Tipo de proveedor de clúster de Kubernetes: $cluster_provider_type”
    “`

Comments are closed.