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.
$ 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
Me aburrí de escribir esto una y otra vez, así que escribí una simple utilidad bash para cambiar de contexto
Puede encontrarlo aquí https://github.com/josefkorbel/kube-switch
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
-
Equivalente a los
-
Cambiar contexto (a foo):
kubectx foo
-
Equivalente a
kubectl config use-context foo
-
Equivalente a
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/