Ocho consejos y trucos de Kubernetes

Un programador trabajando en su oficina en casa

En este artículo, vamos a explorar algunos consejos y trucos que facilitarán el trabajo con Kubernetes.

La mayoría de los consejos que se dan a continuación utilizan kubectl, una poderosa herramienta de línea de comandos que le permite ejecutar comandos contra clústeres de Kubernetes.

Las últimas noticias tecnológicas, respaldadas por los insights de expertos

Manténgase al día sobre las tendencias más importantes e intrigantes de la industria sobre IA, automatización, datos y más con el boletín Think. Consulte la Declaración de privacidad de IBM.

¡Gracias! Ya está suscrito.

Su suscripción se entregará en inglés. En cada boletín, encontrará un enlace para darse de baja. Puede gestionar sus suscripciones o darse de baja aquí. Consulte nuestra Declaración de privacidad de IBM para obtener más información.

Antecedentes de Kubernetes

1. Establecer espacios de nombres predeterminados

Puede dividir un clúster de Kubernetes en varios entornos mediante el uso de espacios de nombres (por ejemplo, Dev1, Dev2, QA1, QA2, etc.), y cada entorno puede ser gestionado por un usuario diferente. Uno de los inconvenientes de escribir comandos de kubectl es que cada vez que escribe un comando, necesita la opción --namespace al final. Las personas a menudo olvidan esto y terminan creando objetos (pods, servicios, despliegues) en el espacio de nombres incorrecto. 

Con este truco, puede establecer la preferencia del espacio de nombres antes de ejecutar los comandos de kubectl. Ejecute el siguiente comando antes de ejecutar los comandos de kubectl, y guardará el espacio de nombres para todos los comandos de kubectl posteriores para su contexto actual:

kubectl config set-context $(kubectl config current-context) --namespace=mynamespace

A continuación, se enumeran algunos de los comandos más comunes y útiles con espacio de nombres:

  • kubectl get namespaces
  • kubectl create namespace mynamespace
  • kubectl get pods --all-namespaces (Enumere todos los pods con estado de todos los espacios de nombres.)
  • kubectl get po -o wide -n <namspace1> -n <namespace2> -n <namespace3> (Este comando identificará los pods en cada espacio de nombres)
  • kubectl describe namespace <namespace>
  • kubectl config view --minify | grep namespace (Este comando garantizará que configure correctamente el espacio de nombres para su contexto actual.) 
IBM Cloud

Red Hat OpenShift AI on IBM Cloud: desplegar cargas de trabajo de IA

Utilice las capacidades de IA con Red Hat OpenShift on IBM Cloud. Este video explora cómo construir, desplegar y administrar cargas de trabajo de IA de manera eficiente con una plataforma escalable de operaciones de machine learning.

2. Alias útiles para ahorrar tiempo

Los comandos de Kubernetes pueden ser bastante largos, por lo que es muy útil configurar algunos alias para ejecutar kubectl. Ya no tendrá que deletrear el comando completo una y otra vez, lo que le facilitará mucho la vida cuando desee ejecutar varios comandos de Kubernetes en una sola sesión.

A continuación, enumeramos los alias de algunos comandos de uso frecuente. Ejecútelos antes de ejecutar los comandos de kubectl para ahorrar tiempo. Ejemplo: solo necesita escribir k en lugar de escribir kubectl:

  • alias k='kubectl'
  • alias kc='k config view --minify | grep name'
  • alias kdp='kubectl describe pod'
  • alias krh='kubectl run --help | more'
  • alias ugh='kubectl get --help | more'
  • alias c='clear'
  • alias kd='kubectl describe pod'
  • alias ke='kubectl explain'
  • alias kf='kubectl create -f'
  • alias kg='kubectl get pods --show-labels'
  • alias kr='kubectl replace -f'
  • alias kh='kubectl --help | more'
  • alias krh='kubectl run --help | more'
  • alias ks='kubectl get namespaces'
  • alias l='ls -lrt'
  • alias ll='vi ls -rt | tail -1'
  • alias kga='k get pod --all-namespaces'
  • alias kgaa='kubectl get all --show-labels'

 

3. Edición de YAML con vi

Hay muchos editores diferentes disponibles para escribir archivos YAML, pero muchas veces es posible que deba modificar rápidamente un YAML generado mientras trabaja en una terminal. Este es un buen momento para utilizar nuestro fiel vi, el editor de texto creado originalmente para el sistema operativo Unix.

El editor vi está bien documentado y cuenta con el apoyo de una vibrante comunidad de código abierto. Sin embargo, uno de los problemas con el editor vi al crear archivos YAML es el espacio. Necesitamos una forma de dejar sangría con tabulaciones y alinear con espacios. El uso de tabulaciones en lugar de espacios para los espacios en blanco siempre ha creado problemas de sintaxis al escribir archivos YAML (por ejemplo, obtener el YAML de 2 espacios como predeterminado al presionar el retorno de carro).

¿La solución? Crear un archivo ~/.vimrc con estas líneas antes de crear archivos YAML con el editor vi para facilitar la edición:

  • establecer smarttab
  • establecer expandtab
  • establecer shiftwidth=4
  • establecer tabstop=4
  • establecer número

4. Crear YAML a partir de comandos de kubectl

Podemos crear archivos YAML complejos desde la línea de comandos mediante comandos de kubectl.

La mayoría de las personas estaría de acuerdo en que trabajar con archivos YAML no es ameno, y los archivos YAML de Kubernetes pueden ser muy detallados y difíciles de crear desde cero. Es mucho más fácil crear el archivo YAML a partir de comandos de kubectl en lugar de hacerlo desde una página en blanco con un editor.

Los siguientes comandos crearán un archivo YAML con el nombre yamlfile . Una vez que cree el archivo YAML a partir de estos comandos de kubectl, puede modificarlo según sus requisitos y usarlo en lugar de escribir desde cero:

  • kubectl run busybox --image=busybox --dry-run=client -o yaml --
    restart=Never > yamlfile.yaml
    
    kubectl create job my-job --dry-run=client -o yaml --image=busybox -- date>yamlfile.yaml
    
  • kubectl get -o yaml deploy/nginx > 1.yaml (Asegúrese de
    tener un despliegue denominado nginx)
    
  • kubectl run busybox --image=busybox --dry-run=client -o yaml 
    --restart=Never -- /bin/sh -c "while true; do echo hello; echo 
    hello again;done" > yamlfile.yaml
    
  • kubectl run wordpress --image=wordpress –-expose –-port=8989 -
    -restart=Never -o yaml
    
  • kubectl run test --image=busybox --restart=Never --dry -
    run=client -o yaml -- bin/sh -c 'echo test;sleep 100' > 
    yamlfile.yaml(Tenga en cuenta que --bin aparece al final. Esto creará un archivo yaml.)
    

(Observe que --bin  viene al final. Esto creará un archivo yaml.)

Otra buena idea para crear el archivo YAML es obtener el archivo directamente de Internet utilizando el comando wget. 

5. Cambiar entre espacios de nombres de Kubernetes

En el consejo 1, aprendimos algunos comandos útiles para usar los espacios de nombres de Kubernetes y almacenarlos para que no tenga que agregar a cada comando. Ampliemos la sugerencia para que sea más fácil cambiar entre espacios de nombres y contextos de kubectl.

Hay varias herramientas que pueden ayudar, pero nos gusta kubectx y kubens para gestionar contextos y espacios de nombres, respectivamente. Puede encontrar detalles sobre kubectx y kubens aquí.

A continuación, se explica cómo descargar los binarios de Linux para la utilidad kubectx y kubens:

  • wget https://github.com/ahmetb/kubectx/releases/download/v0.9.0/kubectx_v0.9.0_linux_x86_64.tar.gz
    
  • wget https://github.com/ahmetb/kubectx/releases/download/v0.9.0/kubens_v0.9.0_linux_x86_64.tar.gz
    

Luego los extrae con los siguientes comandos:

  • tar -xvf kubectx_v0.9.0_linux_x86_64.tar.gz
    
  • tar -xvf kubens_v0.9.0_linux_x86_64.tar.gz
    

Por último, muévalos a su RUTA:

  • sudo mv kubectx /usr/local/bin
  • sudo mv kubens /usr/local/bin

Una vez instalado, puede usar kubens para enumerar los espacios de nombres y cambiar entre ellos:

Una vez instalado, puede usar kubens para enumerar los espacios de nombres y cambiar entre ellos:

Cuando se trabaja con varios clústeres, kubectx hace que cambiar entre contextos sea muy sencillo:

Cuando se trabaja con varios clústeres, kubectx hace que cambiar entre contextos sea muy sencillo

6. Autocompletado de shell

¿Sabía que kubectl proporciona autocompletado para BASH y ZSH? Esta es una configuración opcional.

Digamos que entiende los conceptos de Kubernetes y tiene algo de experiencia con kubectl, pero tal vez no sea tan bueno memorizando comandos. Primero instala bash-completion y luego habilita el autocompletado de kubectl. Puede encontrar todos los detalles en la página de documentación Instalar y configurar kubectl para su entorno.

A continuación, se muestran las opciones de configuración con la función de autocompletado:

A continuación, se muestran las opciones de configuración con la función de autocompletado:

Ahora, simplemente pulse la tecla Tab.

7. Visualización de la utilización de recursos

El comando superior es probablemente una de las herramientas más populares para monitorear procesos y recursos del sistema. Proporciona una interfaz sencilla basada en caracteres y acceso rápido a información crucial.

Puede ver la utilización de recursos por nodo:

Puede ver la utilización de recursos por nodo:

Utilización de recursos por pod:

Utilización de recursos por pod:

Y el práctico comando watch puede ayudarle a mostrar el comando en un intervalo deseable sin tener que ejecutarlo una y otra vez. El siguiente ejemplo hace que se ejecute cada cinco segundos (el valor predeterminado es dos segundos): 

ver kubectl top node -n 5

Nota: El comando watch debe descargarse para su entorno.

Su clúster de Kubernetes también debe ejecutar heapster para que funcione el comando superior; de lo contrario, obtendrá el siguiente error: “Error from server (NotFound): the server could not find the requested resource (get services http:heapster:)”

8. Amplíe kubectl y cree sus propios comandos utilizando resultados sin procesar

El comando kubectl proporciona una vista resumida de los recursos almacenados por el apiserver. Hay muchos más campos almacenados por el apiserver que no se muestran. Puede usar el comando kubectl get con la salida de recursos sin procesar para crear su propia visualización y comandos. 

Puede imprimir los recursos sin procesar en JSON con el siguiente comando:

kubectl get deployments -o json

También puede llamar al recurso directamente mediante la llamada api:

kubectl get --raw=/apis/apps/v1/deployments

Incluso puede combinar la salida con herramientas como jq para proporcionar diferentes visualizaciones, filtrar la salida o alimentar la salida a otras herramientas para automatización avanzada. 

Por ejemplo, puede ser difícil encontrar problemas en clústeres con múltiples espacios de nombres y despliegues, pero el siguiente ejemplo utiliza la API sin procesar para escanear todos los despliegues en el clúster y filtrar solo los despliegues con réplicas defectuosas:

 

kubectl get --raw=/apis/apps/v1/deployments | jq '.items[] 
| {name: .metadata.name, replicas: .status.replicas, available:
 (.status.availableReplicas // 0), unavailable:
 (.status.unavailableReplicas // 0)} | select (.unavailable > 0)'

La siguiente es una explicación rápida del comando anterior:

  • Primero, llamamos a la API de Kubernetes para devolver todos los despliegues. La salida predeterminada está en JSON. Es difícil visualizar la estructura del documento JSON, pero puede canalizar a jq para tener una mejor idea, como en el siguiente ejemplo:

    kubectl get --raw=/apis/apps/v1/deployments | jq .

  • Tenga en cuenta que el documento de respuesta tiene una serie de elementos para cada despliegue. Queremos inspeccionar el campo de estado de esta matriz hasta el final. El siguiente comando muestra cómo imprimir solo los datos que necesita y un valor predeterminado de 0 cuando el campo no está disponible:

     

    kubectl get --raw=/apis/apps/v1/deployments | jq '.items[] |
    {name: .metadata.name, replicas: .status.replicas, available:
     (.status.availableReplicas // 0), unavailable: 
    (.status.unavailableReplicas // 0)}'
    
  • La pieza final del rompecabezas es usar la función de selección para mostrar solo los despliegues con réplicas no disponibles:

     

    kubectl get --raw=/apis/apps/v1/deployments | jq '.items[] | 
    {name: .metadata.name, replicas: .status.replicas, available:
     (.status.availableReplicas // 0), unavailable: 
    (.status.unavailableReplicas // 0)} | select (.unavailable > 0)'
    

Resumen

Esperamos que algunos de estos consejos y trucos le resulten útiles al trabajar con Kubernetes. Si tiene algún consejo favorito o uno propio que le gustaría compartir, avísenos.

No olvide consultar IBM Cloud Kubernetes Service y poner en práctica estos consejos y trucos.

¿Quiere tener una experiencia práctica y gratis con Kubernetes? Use IBM CloudLab, una nueva plataforma interactiva que ofrece tutoriales de Kubernetes con una certificación sin costo ni configuración.

Autor

Ravi Saraswathi

IBM Chief Architect

IBM Blog

Marcelo Borges

Lead Cloud Solution Architect

Soluciones relacionadas
IBM Red Hat OpenShift

Red Hat OpenShift on IBM Cloud es una plataforma de contenedores OpenShift (OCP) totalmente gestionada.

Conozca Red Hat OpenShift
Soluciones de contenedores

Las soluciones de contenedores ejecutan y amplían cargas de trabajo en contenedores con seguridad, innovación de código abierto y despliegue rápido.

Explorar contenedores
Servicios de consultoría en la nube 

Desbloquee nuevas capacidades e impulse la agilidad empresarial con los servicios de IBM de asesoramiento sobre la nube. Descubra cómo crear conjuntamente soluciones, acelerar la transformación digital y optimizar el rendimiento a través de estrategias de nube híbrida y asociaciones de expertos.

Servicios en la nube
Dé el siguiente paso

Dé los primeros pasos con una plataforma Red Hat OpenShift totalmente gestionada o explore la flexibilidad del ecosistema IBM Cloud Kubernetes. Acelere su proceso de desarrollo y despliegue con soluciones escalables y seguras adaptadas a sus necesidades.

Conozca Red Hat OpenShift Conozca Kubernetes