Cómo cambiar rápidamente los contextos de Kubernetes con Kubectx y Kubens

Kubectx y Kubens son dos herramientas que aceleran su experiencia de gestión de Kubernetes. Abordan algunas de las deficiencias de Kubectl al hacer que cambiar entre entornos de clúster sea más rápido y conveniente.

Ambos comandos están desarrollados por el mismo autor y se agrupan en un solo paquete. Kubectx cambia el contexto activo de Kubernetes. Esta es la combinación de la URL del servidor y las credenciales de usuario que definen el clúster al que está conectado. Kubens cambia entre espacios de nombres dentro de ese clúster.

Índice de contenidos
  1. ¿Por qué son útiles?
  2. Contextos cambiantes
  3. Cambio de espacios de nombres
  4. Migración a Kubectx y Kubens desde KUBECONFIG
  5. Resumen

¿Por qué son útiles?

Cambiar entre clústeres usando Kubectl simple puede ser engorroso. Aunque la herramienta admite un par de métodos para el cambio de configuración, no son particularmente rápidos ni intuitivos para este caso de uso.

Una forma es crear un archivo de configuración separado para cada uno de sus clústeres. A continuación, puede configurar el KUBECONFIG variable de entorno para cambiar entre ellos:

$ KUBECONFIG=~/.kube/cluster-1.yml

# Gets pods in cluster-1
$ kubectl get pods

Esto requiere que memorice el nombre y la ruta de cada uno de sus archivos de configuración. Tampoco lo ayuda a definir espacios de nombres, por lo que debe usar Kubectl --namespace marca para anular el valor predeterminado con cada comando.

Kubectl también ofrece una experiencia de gestión de contexto integrada. Esto le permite definir múltiples clústeres y credenciales de usuario en un solo archivo de configuración. puedes emitir kubectl comandos para cambiar entre ellos.

apiVersion: v1
clusters:
  - cluster:
    name: demo-cluster
    insecure-skip-tls-verify: true
    server: https://127.0.0.1
users:
  - name: demo
    user:
      client-certificate: /path/to/cert
      client-key: /path/to/key
contexts:
  - context:
      name: demo-cluster-ns-1
      cluster: demo-cluster
      user: demo
      namespace: first-namespace
  - context:
      name: demo-cluster-ns-2
      cluster: demo-cluster
      user: demo
      namespace: second-namespace

Este archivo de configuración establece dos contextos. Ambos se conectan al mismo clúster mediante un único conjunto de credenciales. Los contextos están configurados para usar diferentes espacios de nombres dentro del clúster.

# Gets pods in first-namespace within demo-cluster
$ kubectl config use-context demo-cluster-ns-1
$ kubectl get pods

# Gets pods in second-namespace within demo-cluster
$ kubectl config use-context demo-cluster-ns-2
$ kubectl get pods

Esta es una experiencia más simplificada, pero sigue siendo relativamente detallada. Kubectx y Kubens eliminan toda la complejidad y le brindan comandos breves y simples para cambiar rápidamente de contexto y espacio de nombres.

# Gets pods in first-namespace within demo-cluster
$ kubectx demo-cluster-ns-1
$ kubectl get pods

# Overrides the context's namespace to get pods in second-namespace
$ kubens second-namespace
$ kubectl get pods

Kubectx y Kubens se distribuyen en varios formatos diferentes. Puede descargar binarios simples precompilados desde la página de lanzamientos de GitHub del proyecto, instalarlos desde los repositorios de paquetes Apt, Pacman o Homebrew, o usar el administrador de complementos de Kubectl, Krew. Nos centraremos en Krew, ya que es una buena forma de trabajar con todos los accesorios de Kubectl.

Asegúrese de que tiene Krew instalado y puede usar el kubectl krew dominio. Puede agregar Krew a su sistema usando el script de instalación en el sitio web del proyecto.

A continuación, utilice Krew para instalar los componentes de Kubectx y Kubens:

# Kubectx
$ kubectl krew install ctx

# Kubens
$ kubectl krew install ns

Opcionalmente, puede habilitar el soporte de finalización de shell para Bash, Fish y Zsh ejecutando los scripts relevantes proporcionados en el archivo README del proyecto.

Kubectl y Kubens también son compatibles con fzf para generar menús interactivos con soporte de búsqueda difusa. Esta integración se habilita automáticamente cuando tienes fzf en tus PATH. Puede apagarlo configurando el KUBECTX_IGNORE_FZF variable de entorno a 1.

Contextos cambiantes

El comando Kubectx se usa para cambiar entre los contextos de Kubectl disponibles. Toma el nombre del contexto de destino como su único parámetro. Los contextos ya deben existir en su archivo de configuración de Kubectl activo. uso regular kubectl config comandos para crear sus contextos antes de usar el comando.

# Switch to first-context
$ kubectx first-context
$ kubectl get pods

kubectx es un envoltorio alrededor kubectl config use-context. El contexto será el objetivo de todos los comandos posteriores de Kubectl hasta que seleccione uno diferente con kubectx o kubectl.

Kubectx acepta - como el nombre del contexto para volver rápidamente al contexto seleccionado previamente. Esto coincide con el comportamiento de herramientas CLI familiares como cd y gitlo que facilita el trabajo con varios contextos al mismo tiempo.

$ kubectx first
$ kubectx second
$ kubectx -

# Gets the pods in the first context
$ kubectl get pods

Kubectx también puede crear alias para sus contextos. Estos le permiten hacer referencia a nombres de contexto descriptivos usando una etiqueta más conveniente.

$ kubectx production=gce-web-app-production-2022

# Switches to gce-web-app-production-2022
$ kubectx production
$ kubectl get pods

Cambio de espacios de nombres

kubens cambia entre espacios de nombres. Tiene el mismo efecto que cambiar el espacio de nombres del contexto activo. Los comandos de Kubectl se ejecutarán en el espacio de nombres especificado, dentro del contexto seleccionado actualmente.

$ kubectx production
$ kubens api

# Gets pods in the "api" namespace of the "production" context
$ kubectl get pods

similar a kubectxpuedes usar - para volver a su espacio de nombres anterior:

$ kubens -

Migración a Kubectx y Kubens desde KUBECONFIG

Los contextos de Kubectl, Kubectx y Kubens funcionan mejor cuando almacena todos sus contextos y clústeres en un archivo Kubeconfig. Este suele estar ubicado en ~/.kube/config. Si ha estado trabajando anteriormente con varios archivos de configuración, puede fusionarlos usando Kubectl:

# Reference all your config files so Kubectl load them all
$ export KUBECONFIG=~/.kube/cluster-1:~/.kube/cluster-2:~/.kube/cluster-3

# Save a merged version of the current config to a new file
$ kubectl config view --flatten > ~/.kube/.config

Poner sus contextos en un solo ~/.kube/config los pone a todos a disposición kubectx y kubens. Puedes dejar de usar KUBECONFIG para hacer malabarismos manualmente con varios archivos.

Cuando agrega un nuevo clúster a su flota, puede combinar su archivo de configuración con el existente usando una variación de la secuencia que se muestra arriba:

$ export KUBECONFIG=~/.kube/config:~/new-config-file
$ kubectl config view --flatten > ~/.kube/.config

Una alternativa más sencilla es la konfig administrador de archivos de configuración, disponible como complemento de Kubectl a través de Krew. Esto incluye un import Comando que fusiona automáticamente un nuevo archivo de configuración con el que Kubectl está usando actualmente:

$ kubectl krew install konfig
$ kubectl konfig import -s ~/new-config-file

Resumen

Kubectx y Kubens son dos utilidades convenientes para optimizar su experiencia con Kubectl. Si bien los contextos de Kubectl son adecuados para un uso ocasional, aún tienden a sentirse torpes cuando cambia rápidamente entre entornos. Kubectx y Kubens lo ayudan a inspeccionar varios clústeres y espacios de nombres sin que se lo impidan los largos comandos de terminal.

El atractivo de estas herramientas radica en su simplicidad. También agregan algunas capacidades únicas además de la gestión de contexto de Kubernetes, como el retroceso rápido con - y alias de contexto para acortar nombres largos.

Descubre más contenido

Subir Change privacy settings