google context container clusters kubernetes google-container-engine google-kubernetes-engine minikube

kubernetes - context - Cómo cambiar los grupos de kubectl entre gcloud y minikube



kubectl config (9)

Tengo Kubernetes funcionando bien en dos entornos diferentes, es decir, en mi entorno local (MacBook ejecutando minikube) y también en el motor de contenedores de Google (GCE, Kubernetes en Google Cloud). Utilizo el entorno MacBook / local para desarrollar y probar mis archivos YAML y luego, al finalizar, probarlos en GCE.

Actualmente necesito trabajar con cada entorno individualmente: necesito editar los archivos YAML en mi entorno local y, cuando esté listo, (git) clonarlos en un entorno GCE y luego usarlos / implementarlos. Este es un proceso algo engorroso.

Idealmente, me gustaría usar kubectl de mi Macbook para cambiar fácilmente entre el minikube local o los entornos GCE Kubernetes y determinar fácilmente dónde se usan los archivos YAML. ¿Hay una manera simple de cambiar los contextos para hacer esto?


Clonar los archivos YAML en repositorios para diferentes entornos es definitivamente ideal. Lo que debe hacer es crear plantillas de sus archivos YAML, extrayendo los parámetros que difieren de un entorno a otro.

Por supuesto, puede usar un motor de plantillas y separar los valores en un YAML y producir el YAML para un entorno específico. Pero esto es fácilmente factible si adoptas los Helm Charts . Para ver algunos gráficos de muestra, vaya al directorio estable en este repositorio de Github

Para tomar un ejemplo del gráfico de Wordpress , podría tener dos comandos diferentes para dos entornos:

Para Dev:

helm install --name dev-release --set / wordpressUsername=dev_admin, / wordpressPassword=dev_password, / mariadb.mariadbRootPassword=dev_secretpassword / stable/wordpress

Sin embargo, no es necesario pasar estos valores en la CLI, puede almacenar los valores en un archivo llamado values.yml y podría tener diferentes archivos para diferentes entornos

Necesitará algo de trabajo para convertir a los estándares de gráficos de Helm, pero el esfuerzo valdrá la pena.


Consulte también el último comando de docker context (docker 19.03).

Ajeet Singh Raina ) lo ilustra en " Docker 19.03.0 Pre-Release: Cambio rápido de contexto, Docker sin raíz, soporte de Sysctl para Swarm Services "

Un contexto es esencialmente la configuración que utiliza para acceder a un clúster particular.

Digamos, por ejemplo, en mi caso particular, tengo 4 grupos diferentes: mezcla de Swarm y Kubernetes que se ejecutan local y remotamente.
Suponga que tengo un clúster predeterminado que se ejecuta en mi máquina de escritorio, un clúster de enjambre de 2 nodos que se ejecuta en Google Cloud Platform, un clúster de 5 nodos que se ejecuta en Play with Docker playground y un clúster de Kubernetes de un solo nodo que se ejecuta en Minikube y que necesito acceder a bastante regularmente.

Utilizando la CLI de contexto de Docker, puedo cambiar fácilmente de un clúster (que podría ser mi clúster de desarrollo) para probarlo en segundos.

$ sudo docker context --help Usage: docker context COMMAND Manage contexts Commands: create Create a context export Export a context to a tar or kubeconfig file import Import a context from a tar file inspect Display detailed information on one or more contexts ls List contexts rm Remove one or more contexts update Update a context use Set the current docker context Run ''docker context COMMAND --help'' for more information on a command.

Por ejemplo:

[:)Captain''sBay=>sudo docker context ls NAME DESCRIPTION DOCKER ENDPOINT KUBERNETES ENDPOINT ORCHESTRATOR default * Current DOCKER_HOST based configuration unix:///var/run/docker.sock https://127.0.0.1:16443 (default) swarm swarm-context1


La respuesta canónica de cambiar / leer / manipular diferentes entornos de kubernetes (también conocidos como contextos de kubernetes) es, como mencionó Mark, usar la kubectl config , ver a continuación:

$ kubectl config Modify kubeconfig files using subcommands like "kubectl config set current-context my-context" Available Commands: current-context Displays the current-context delete-cluster Delete the specified cluster from the kubeconfig delete-context Delete the specified context from the kubeconfig get-clusters Display clusters defined in the kubeconfig get-contexts Describe one or many contexts rename-context Renames a context from the kubeconfig file. set Sets an individual value in a kubeconfig file set-cluster Sets a cluster entry in kubeconfig set-context Sets a context entry in kubeconfig set-credentials Sets a user entry in kubeconfig unset Unsets an individual value in a kubeconfig file use-context Sets the current-context in a kubeconfig file view Display merged kubeconfig settings or a specified kubeconfig file Usage: kubectl config SUBCOMMAND [options]

Detrás de escena, hay un archivo YAML ~/.kube/config que almacena todos los contextos disponibles con sus credenciales y puntos finales correspondientes para cada contexto.

Kubectl listo para usar no facilita la gestión de diferentes contextos de kubernetes como probablemente ya sepa. En lugar de crear su propio script para administrar todo eso, un mejor enfoque es utilizar una herramienta madura llamada kubectx , creada por un Googler llamado "Ahmet Alp Balkan" que está en Kubernetes / Google Cloud Platform, el equipo de experiencias de desarrollador que construye herramientas como esta. Lo recomiendo altamente.

kubectx

$ kctx --help USAGE: kubectx : list the contexts kubectx <NAME> : switch to context <NAME> kubectx - : switch to the previous context kubectx <NEW_NAME>=<NAME> : rename context <NAME> to <NEW_NAME> kubectx <NEW_NAME>=. : rename current-context to <NEW_NAME> kubectx -d <NAME> [<NAME...>] : delete context <NAME> (''.'' for current-context) (this command won''t delete the user/cluster entry that is used by the context) kubectx -h,--help : show this message



Puede cambiar de local (minikube) a gcloud y volver con:

kubectl config use-context CONTEXT_NAME

para enumerar todos los contextos:

kubectl config get-contexts

Puede crear diferentes entornos para local y gcloud y ponerlo en archivos yaml separados.


Sí, creo que esto es de lo que estás preguntando. Para ver su configuración actual, use kubectl config view. kubectl carga y combina la configuración de las siguientes ubicaciones (en orden)

--kubeconfig=/path/to/.kube/config command line flag KUBECONFIG=/path/to/.kube/config env variable $HOME/.kube/config - The DEFAULT

uso --kubeconfig ya que cambio mucho entre múltiples clústeres. es un poco engorroso pero funciona bien.

ver estos para más información. https://kubernetes.io/docs/tasks/administer-cluster/share-configuration/ y https://kubernetes.io/docs/concepts/cluster-administration/authenticate-across-clusters-kubeconfig/


Si está buscando una solución basada en GUI para Mac y tiene instalado Docker Desktop, puede usar el icono de la barra de menú de Docker. Aquí puede encontrar el menú "Kubernetes" con todos los contextos que tiene en su kubeconfig y cambiar fácilmente entre ellos.


TL; DR: creé una GUI para cambiar los contextos de Kubernetes a través de AppleScript. Lo activo a través de shift-cmd-x.

Yo también tuve el mismo problema. Fue un dolor cambiar de contexto por la línea de comando. Utilicé FastScripts para configurar un combo de teclas (shift-cmd-x) para ejecutar el siguiente AppleScript (ubicado en este directorio: $ (HOME) / Library / Scripts / Applications / Terminal).

use AppleScript version "2.4" -- Yosemite (10.10) or later use scripting additions do shell script "/usr/local/bin/kubectl config current-context" set curcontext to result do shell script "/usr/local/bin/kubectl config get-contexts -o name" set contexts to paragraphs of result choose from list contexts with prompt "Select Context:" with title "K8s Context Selector" default items {curcontext} set scriptArguments to item 1 of result do shell script "/usr/local/bin/kubectl config use-context " & scriptArguments display dialog "Switched to " & scriptArguments buttons {"ok"} default button 1


Un acceso directo más rápido a los comandos estándar de kubectl es usar kubectx :

  • kubectx lista: kubectx
    • Equivalente a los kubectl config get-contexts
  • Cambiar contexto (a foo): kubectx foo
    • Equivalente a kubectl config use-context foo

Para instalar en macOS: brew install kubectx

El paquete kubectx también incluye una herramienta similar para cambiar los espacios de nombres llamados kubens .

Estos dos son muy convenientes si trabajas en múltiples contextos y espacios de nombres regularmente.

Más información: https://ahmet.im/blog/kubectx/