8 consejos y trucos de Kubernetes

Programador masculino trabajando en su oficina doméstica

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 potente herramienta de línea de comandos que le permite ejecutar comandos contra clústeres de Kubernetes.

Las últimas novedades sobre tecnología, respaldadas por conocimientos de expertos

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

¡Gracias! Está suscrito.

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

Contexto de Kubernetes

1. Establezca espacios de nombres predeterminados

Puede dividir un clúster Kubernetes en varios entornos usando 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 kubectl es que cada vez que escribe un comando, necesita la opción  --namespace al final. La gente suele olvidar esto y acaba creando objetos (pods, servicios, implementaciones) en el espacio de nombres equivocado. 

Con este truco, puede establecer la preferencia de espacio de nombres antes de ejecutar los comandos 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 nombre:

  • kubectl get namespaces
  • kubectl create namespace mynamespace
  • kubectl get pods --all-namespaces (Liste 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 en IBM Cloud: Implemente cargas de trabajo de IA

Utilice las capacidades de IA con Red Hat OpenShift on IBM Cloud. Este vídeo explora cómo crear, implementar y gestionar 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 escribir el comando completo una y otra vez, lo que le facilitará mucho la vida cuando quiera 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 tiene que 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

Existen muchos editores diferentes disponibles para escribir archivos YAML, pero hay muchas ocasiones en las que puede que necesite ajustar rápidamente un YAML generado mientras trabaja en un terminal. Este es un buen lugar 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 del editor vi al crear archivos YAML es la cuestión del espacio. Necesitamos una forma de sangrar con tabulaciones y alinear con espacios. El uso de tabulaciones frente a espacios en blanco siempre ha creado problemas de sintaxis al escribir archivos YAML (por ejemplo, obtener el YAML de 2 espacios como predeterminado al pulsar el retorno de carro).

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

  • set smarttab
  • set expandtab
  • set shiftwidth=4
  • set tabstop=4
  • set number

4. Cree YAML a partir de comandos de kubectl

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

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

Los siguientes comandos crearán un archivo YAML con nombre yamlfile . Una vez que haya creado el archivo YAML a partir de estos comandos de kubectl, puede modificarlo en función de sus requisitos y utilizarlo 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 que tiene una implementación llamada 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(Compruebe que --bin aparece al final. Esto creará un archivo yaml).
    

(Observe que --bin  aparece 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. Cambio entre espacios de nombres de Kubernetes

En el Consejo 1, aprendimos algunos comandos útiles para usar los espacios de nombres de Kubernetes y guardarlos para que no tenga que añadir a cada comando. Ampliemos el truco para que sea más fácil cambiar entre espacios de nombres y contextos kubectl.

Hay varias herramientas que pueden ayudar, pero nos gustan 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 los servicios 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
    

Finalmente, los pasa a su PATH:

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

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

Al trabajar con varios clústeres, kubectx facilita el cambio entre contextos:

6. Autocompletado de shell

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

Supongamos que comprende los conceptos de Kubernetes y tiene cierta experiencia con kubectl, pero quizás no sea tan bueno memorizando comandos. Primero instale bash-completion y luego habilite 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:

¡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 supervisar los procesos y los recursos del sistema. Proporciona una interfaz sencilla basada en caracteres y un acceso rápido a información crucial.

Puede ver la utilización de recursos por nodo:

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): 

watch kubectl top node -n 5

Nota: Es necesario descargar el comando watch 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. Extienda kubectl y cree sus propios comandos con outputs 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 utilizar el comando kubectl get con el output de recursos sin procesar para crear sus propias visualizaciones y comandos. 

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

kubectl get deployments -o json

También puede llamar directamente al recurso usando la llamada a la API:

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

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

Por ejemplo, puede ser difícil encontrar problemas en clústeres con múltiples espacios de nombres e implementaciones, pero el ejemplo siguiente utiliza la API en bruto para escanear todas las implementacions en el clúster y filtrar solo las implementaciones 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 todas las implementaciones. El output predeterminado 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 .

  • Observe que el documento de respuesta tiene una matriz de elementos para cada implementación. 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 última pieza del rompecabezas es utilizar la función seleccionar para mostrar solo las implementaciones 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 sean útiles al trabajar con Kubernetes. Si tiene algún consejo favorito o algún truco propio que quiera compartir, ¡cuéntenoslo!

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

¿Quiere tener una experiencia práctica y gratuita con Kubernetes? Benefíciese de IBM CloudLab, una nueva plataforma interactiva que ofrece tutoriales de Kubernetes con una certificación, sin coste ni configuración necesaria.

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.

Descubra 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 e implementación rápida.

Explore los contenedores
Servicios de consultoría en la nube 

Desbloquee nuevas capacidades e impulse la agilidad empresarial con los servicios de consultoría de nube de IBM. Descubra cómo cocrear soluciones, acelerar la transformación digital y optimizar el rendimiento mediante estrategias de nube híbrida y colaboraciones con expertos.

Servicio en la nube
Dé el siguiente paso

Comience con una plataforma Red Hat OpenShift totalmente gestionada o explore la flexibilidad del ecosistema IBM Cloud Kubernetes. Acelere su proceso de desarrollo e implementación con soluciones escalables y seguras adaptadas a sus necesidades.

Descubra Red Hat OpenShift Explore Kubernetes