BLOG

Hoja de trucos de Kubectl: Domina Kubernetes Con Estos Comandos [PDF Gratuito Incluido]

person coding on laptop

Table of contents

Hoja de trucos de Kubectl: Domina Kubernetes con estos comandos

En el corazón del kit de herramientas de todo administrador de Kubernetes se encuentra kubectl, la potente interfaz de línea de comandos diseñada para gestionar clústeres Kubernetes de forma eficiente.

Kubectl (pronunciado "kube-control" o "kube-C-T-L") sirve como tu línea directa de comunicación con el sistema Kubernetes que te permite desplegar aplicaciones, inspeccionar recursos, ver registros y ejecutar prácticamente cualquier operación dentro de tu clúster. Tanto si eres un ingeniero DevOps, un administrador de plataformas o un desarrollador que trabaja con aplicaciones en contenedores, dominar kubectl es esencial para lograr un funcionamiento eficaz Gestión de Kubernetes en la computación en nube.

Esta práctica hoja de trucos cubre comandos kubectl más útilescon ejemplos prácticos y consejos que te ayudarán a mejorar tus tareas cotidianas con Kubernetes.

¿Cuáles son las principales categorías de comandos kubectl?

Logotipo de Kubectl
Logotipo de Kubectl

Los comandos Kubectl pueden agruparse en tres categorías principales, cada una de las cuales sirve para diferentes aspectos de la gestión de clústeres:

1. Comandos de información del clúster

Los comandos de información del clúster proporcionan información sobre el estado y la configuración de tu clúster Kubernetes:

  • Obtener información sobre los componentes del clúster
  • Ver el estado y los recursos del nodo
  • Comprobar la salud del apiserver
  • Inspeccionar los componentes del plano de control

2. Comandos de gestión de recursos

Los comandos de gestión de recursos te permiten crear, modificar, eliminar e inspeccionar los recursos de Kubernetes:

  • Crear y actualizar recursos
  • Enumera y describe los recursos
  • Eliminar recursos
  • Ampliar y reducir recursos
  • Edita recursos en tiempo real

3. Comandos de despliegue de aplicaciones

Por último, los comandos de despliegue de aplicaciones facilitan la gestión del despliegue y del ciclo de vida de la aplicación:

  • Despliega aplicaciones desde YAML o JSON
  • Gestiona los despliegues y las implantaciones
  • Configurar el autoescalado
  • Actualiza las configuraciones de la aplicación
  • Gestionar la red de aplicaciones

Con estas tres categorías en mente, echemos un vistazo más de cerca a algunos comandos kubectl específicos que utilizarás a menudo en tu viaje por Kubernetes.

Profundizando: hoja de trucos de los comandos kubectl

persona codificando en un portátil
persona codificando en un portátil

A continuación encontrarás una hoja de trucos para que la tengas a mano que enumera comandos kubectl que probablemente utilices con frecuencia, con ejemplos para agilizar tus flujos de trabajo en Kubernetes.

Vainas

Pods son las unidades desplegables más pequeñas de Kubernetes, formadas por uno o más contenedores que comparten recursos de almacenamiento y red.

Enumera todas las vainas:

kubectl obtener pods

Enumera las vainas con más detalles:

kubectl get pods -o ancho

Obtén información detallada sobre una vaina concreta:

kubectl describe pod <nombre-pod>

Crea un pod a partir de un archivo YAML:

kubectl apply -f pod.yaml

Borrar un pod:

kubectl eliminar pod <nombre-pod>

Ejecuta un comando dentro del contenedor de un pod:

kubectl exec -it <pod-name> -- <comando>

Obtén los registros del pod:

kubectl logs <nombre-pod>

Transmite registros de pods en tiempo real:

kubectl logs -f <pod-name>

Obtener registros de un contenedor específico en un pod multicontenedor:

kubectl logs <pod-name> -c <container-name>

Reenvía a un pod:

kubectl port-forward <pod-name> <local-port>:<pod-port>

Copiar archivos a/desde un pod:

kubectl cp <pod-name>:/ruta/a/archivo /local/ruta

kubectl cp /ruta/local <pod-name>:/ruta/en/pod

Servicios

Servicios crean una red estable para los pods, facilitando la comunicación entre los distintos componentes al actuar como una capa de abstracción.

Enumera todos los servicios:

kubectl obtener servicios

Obtén información detallada sobre un servicio:

kubectl describe servicio <nombre-servicio>

Crea un servicio a partir de un archivo YAML:

kubectl apply -f servicio.yaml

Exponer un despliegue como servicio:

kubectl expose deployment <deployment-name> --port=<port> --target-port=<target-port>

Elimina un servicio:

kubectl eliminar servicio <nombre-servicio>

Ver los puntos finales asociados a un servicio:

kubectl get endpoints <nombre-servicio>

Crea un servicio ClusterIP:

kubectl create service clusterip <service-name> --tcp=<port>:<target-port>

Crea un servicio NodePort:

kubectl create service nodeport <service-name> --tcp=<port>:<target-port>

Crear un LoadBalancer servicio:

kubectl create service loadbalancer <service-name> --tcp=<port>:<target-port>

Despliegues

Despliegues proporcionan actualizaciones declarativas para Pods y ReplicaSets, lo que permite escalar y actualizar aplicaciones fácilmente.

Enumera todos los despliegues:

kubectl obtener despliegues

Obtén información detallada sobre una implantación:

kubectl describe despliegue <nombre-despliegue>

Crea un despliegue a partir de un archivo YAML:

kubectl aplicar -f despliegue.yaml

Crea una implantación directamente desde la línea de comandos:

kubectl create deployment <nombre> --image=<nombre-imagen>

Escala un despliegue:

kubectl scale deployment <deployment-name> --replicas=<number>

Actualiza la imagen de contenedor de un despliegue:

kubectl set image deployment/<deployment-name> <container-name>=<new-image>

Revertir una implantación a una revisión anterior:

kubectl rollout deshacer despliegue/<nombre-despliegue>

Ver el estado del despliegue:

kubectl estado despliegue/<nombre-despliegue>

Ver el historial de despliegue:

kubectl rollout history despliegue/<nombre-despliegue>

Pausa un despliegue:

kubectl rollout pause deployment/<nombre-despliegue>

Reanuda un despliegue:

kubectl rollout reanudar despliegue/<nombre-despliegue>

ConfigMaps y Secretos

ConfigMaps y Secretos se utilizan para almacenar datos de configuración e información sensible, respectivamente.

Nota importante sobre seguridad: Tanto ConfigMaps como Secrets se almacenan en etcd sin cifrar por defecto, lo que significa que los usuarios deben activar el cifrado en reposo si manejan datos sensibles.

Lista ConfigMaps:

kubectl get configmaps

Crea un ConfigMap a partir de valores literales:

kubectl create configmap <configmap-name> --from-literal=clave1=valor1 --from-literal=clave2=valor2

Crea un ConfigMap a partir de un archivo:

kubectl create configmap <configmap-name> --from-file=<path-to-file>

Obtén información detallada sobre un ConfigMap:

kubectl describe configmap <configmap-name>

Borrar un ConfigMap:

kubectl delete configmap <configmap-name>

Lista Secretos:

kubectl get Secretos

Crea un Secreto a partir de valores literales:

kubectl create secret generic <secret-name> --from-literal=clave1=valor1 --from-literal=clave2=valor2

Crea un Secreto a partir de un archivo:

kubectl create secret generic <secret-name> --from-file=<path-to-file>

Obtén información detallada sobre un Secreto:

kubectl describe secreto <nombre-secreto>

Borrar un secreto:

kubectl borrar secreto <nombre-secreto>

Consejos profesionales para el uso de kubectl

persona mirando el teléfono mientras codifica
persona mirando el teléfono mientras codifica

La herramienta de línea de comandos kubectl es imprescindible para trabajar con clusters Kubernetes y gestionar sus recursos. Dominarla puede hacerte la vida mucho más fácil, ayudándote a desplegar, escalar y solucionar problemas de forma más eficiente. Con kubectl edit, puedes puedes modificar rápidamente recursos como pods y despliegues directamente desde la línea de comandos.

Utilizar eficazmente los espacios de nombres

Espacios de nombres son una función básica de Kubernetes que te permite dividir tu clúster en subclústeres virtuales. Esto es muy útil en configuraciones multiinquilino o cuando manejas aplicaciones más complejas.

Enumera los recursos de un espacio de nombres concreto:

kubectl get <resource-type> -n <namespace>

Crea un recurso en un espacio de nombres específico:

kubectl apply -f <file.yaml> -n <namespace>

Establece el espacio de nombres por defecto para todos los comandos kubectl:

kubectl config set-context --current --namespace=<namespace>

Ver recursos en todos los espacios de nombres:

kubectl get <resource-type> --all-namespaces

Crea un nuevo espacio de nombres:

kubectl crear espacio de nombres <nombre-del-espacio-de-nombres>

Es una buena idea agrupar los recursos relacionados en sus propios espacios de nombres para establecer límites claros entre aplicaciones o equipos. Intenta utilizar nombres que hagan obvia su finalidad, como dev-frontend, prod-backendo monitorización.

Selectores de etiquetas para filtrar recursos

Etiquetas son pares clave-valor que se añaden a los objetos de Kubernetes. Son una forma estupenda de organizar, seleccionar y gestionar grupos de recursos más fácilmente.

Enumera los recursos con una etiqueta específica:

kubectl get <tipo de recurso> -l clave=valor

Enumera los recursos con múltiples condiciones de etiqueta:

kubectl get <resource-type> -l 'clave1=valor1,clave2=valor2'

Enumera los recursos que tienen una clave de etiqueta específica (independientemente del valor):

kubectl get <resource-type> -l 'clave'

Enumera los recursos que no tienen una etiqueta específica:

kubectl get <resource-type> -l '!key'

Añade una etiqueta a un recurso existente:

kubectl label <resource-type> <resource-name> key=value

Eliminar una etiqueta de un recurso:

kubectl label <resource-type> <resource-name> key-

Tener una estrategia de etiquetado coherente es clave para gestionar tus recursos con eficacia. Prueba a utilizar etiquetas como aplicación, entorno, nivel, versióny propietario para crear un sistema claro y organizado para tus recursos.

Implementar actualizaciones continuas

Kubernetes facilita la actualización de aplicaciones sin tiempo de inactividad mediante actualizaciones continuas. Esta estrategia sustituye gradualmente las instancias de la versión antigua por la nueva.

Actualiza un despliegue con una nueva imagen (activa la actualización continua):

kubectl set imagen despliegue/<nombre-despliegue> <nombre-contenedor>=<nueva-imagen>:<etiqueta>

Comprueba el estado del despliegue:

kubectl rollout status despliegue/<nombre-despliegue>

Configura la estrategia de actualización en un YAML de despliegue:

espec:

estrategia:

tipo: RollingUpdate

rollingUpdate:

maxDisponible: 25%

maxSurge: 25%

Vuelve a la versión anterior si se detectan problemas:

kubectl rollout deshacer despliegue/<nombre-despliegue>

Pausa un despliegue:

Copykubectl rollout pausa despliegue/<nombre-despliegue>

Esto es especialmente útil para los despliegues por etapas, ya que te permite liberar a un subconjunto de pods, verificar la funcionalidad y luego continuar el despliegue tras la validación.

Reanudar un despliegue:

Copykubectl rollout reanudar despliegue/<nombre-despliegue>

Para las aplicaciones críticas, prueba a utilizar la bandera --record al hacer cambios en el despliegue. Añade una nota con el comando que utilizaste, para que puedas rastrear fácilmente el historial de cambios más adelante:

kubectl apply -f despliegue.yaml --record

Gestiona cuidadosamente las cuotas y límites de recursos

Gestión de recursos desempeña un papel importante en la gestión de Kubernetes. Establecer las solicitudes y los límites de recursos adecuados es clave para mantener estable tu clúster y asegurarte de que los recursos se comparten de forma justa.

Ver cuotas de recursos en un espacio de nombres:

kubectl get resourcequota -n <espacio de nombres>

Crea una cuota de recursos para un espacio de nombres:

kubectl create quota <quota-name> --hard=cpu=1,memory=1G,pods=10 -n <namespace>

Comprueba el uso de recursos de los pods:

kubectl top pods

Comprueba el uso de recursos de los nodos:

kubectl top nodos

Al definir las especificaciones de los contenedores, establece siempre las solicitudes y los límites de recursos:

recursos:

peticiones:

memoria: "64Mi"

cpu: "250m"

límites:

memoria: "128Mi"

cpu: "500m"

Ten en cuenta que las peticiones de recursos ayudan al programador a decidir dónde colocar tu pod, mientras que los límites establecen el uso máximo antes de que los contenedores puedan ser terminados. Una buena regla general es establecer las solicitudes en función del uso estacionario previsto y los límites en función de lo que es aceptable durante los picos de uso.

Depuración maestra con kubectl

La depuración es importante para que tus aplicaciones Kubernetes funcionen sin problemas. Por suerte, kubectl tiene un montón de comandos que te ayudarán a solucionar problemas con facilidad.

Obtén los registros del contenedor:

kubectl logs <pod-name> -c <container-name>

Depuración interactiva con una vaina temporal:

kubectl run debug --rm -it --image=busybox -- sh

Crea un contenedor de depuración unido a un pod existente:

kubectl debug <pod-name> -it --image=busybox --share-processes --copy-to=<debug-pod-name>

Ver eventos en un espacio de nombres:

kubectl get events -n <espacio de nombres>

Comprueba las condiciones de la vaina y los detalles de su estado:

Copykubectl describe pod <nombre-pod>

Esto proporciona una salida más estructurada de las condiciones del pod, mostrando el historial completo de la transición y el estado actual en un formato fácil de leer.

Verifica la conectividad entre pods utilizando un contenedor de depuración de red:

kubectl run prueba-conectividad --rm -it --image=nicolaka/netshoot -- bash

Para problemas persistentes, considera usar la función --anterior para comprobar los registros de los contenedores que han fallado anteriormente:

kubectl logs <pod-name> --previous

Buenas prácticas de seguridad con kubectl

dos personas codificando en un portátil
dos personas codificando en un portátil

Mantener seguro tu clúster Kubernetes es increíblemente importante, y kubectl tiene mucho que ver en ello. Aquí tienes algunas buenas prácticas que te ayudarán a controlar tu seguridad:

Gestionar los controles de acceso con RBAC

Control de acceso basado en roles (RBAC) es el estándar para la autorización en Kubernetes. Te permite definir permisos detallados para usuarios y cuentas de servicio.

Ver roles en un espacio de nombres:

kubectl get roles -n <namespace>

Ver los roles del clúster:

kubectl get clusterroles

Ver vinculaciones de roles:

kubectl get rolebindings -n <espacio de nombres>

Ver las vinculaciones de roles de clúster:

kubectl get clusterrolebindings

Crea un rol con permisos específicos:

kubectl create role developer --verb=get,list,watch --resource=pods,deployments -n <namespace>

Vincula un rol a un usuario:

kubectl create rolebinding dev-user-binding --role=desarrollador --user=dev-usuario -n <namespace>

Utiliza siempre que sea posible RoleBindings en lugar de ClusterRoleBindings para limitar los permisos a un espacio de nombres concreto. Esto sigue el principio del menor privilegio al limitar el acceso sólo a los espacios de nombres que lo requieren, reduciendo el impacto potencial del compromiso de credenciales.

Sigue el principio del menor privilegio dando a los usuarios y a las cuentas de servicio sólo los permisos que necesitan para realizar su trabajo. Acostúmbrate a revisar periódicamente las vinculaciones de funciones para asegurarte de que siguen teniendo sentido a medida que cambian las funciones y responsabilidades.

Manipulación segura de Secretos

Secretos de Kubernetes deben manejarse con cuidado, ya que contienen información sensible como claves API, contraseñas y certificados.

Crea un secreto de forma segura a partir de un archivo:

kubectl create secret generic db-credentials --del-archivo=./nombre-deusuario.txt --del-archivo=./contraseña.txt

Crea un secreto TLS:

kubectl create secret tls tls-secret --cert=ruta/a/cert --key=ruta/a/key

Montar Secretos como variables de entorno:

env:

- nombre: DB_PASSWORD

valorDesde:

secretKeyRef:

nombre: db-credentials

clave: contraseña

Montar Secretos como archivos:

volúmenes:

- nombre: volumen-secreto

secreto:

secretName: certificados-ssl

Piensa en utilizar herramientas externas de gestión de secretos como HashiCorp Vault, AWS Secrets Manager o Sealed Secrets para aumentar la seguridad. Estas herramientas ofrecen funciones útiles como rotación de secretos, registros de auditoría y cifrado.

Utilizar kubectl con contexto seguro

Asegúrate siempre de que operas en el contexto correcto para evitar modificar accidentalmente el clúster equivocado.

Ver todos los contextos disponibles:

kubectl config get-contexts

Cambia a un contexto específico:

kubectl config usar-contexto <nombre-contexto>

Ver el contexto actual:

kubectl config contexto-actual

Establece el espacio de nombres del contexto actual:

kubectl config set-context --current --namespace=<namespace>

En entornos de producción importantes, es una buena idea utilizar señales visuales, como los avisos del shell, para mostrar el clúster y el espacio de nombres actuales. Esto facilita evitar acciones accidentales en los recursos equivocados.

Utilizar políticas de red

Políticas de red actúan como cortafuegos dentro de tu clúster Kubernetes, controlando la comunicación entre pods.

Enumera las políticas de red:

kubectl obtener políticas de red

Crea una política de red que deniegue por defecto todo el tráfico de entrada:

kubectl aplicar -f - <<EOF

apiVersion: networking.k8s.io/v1

tipo: NetworkPolicy

metadatos:

nombre: default-deny-ingress

espec:

podSelector: {}

tipos de política:

- Entrada

EOF

Crea una política de red que permita un tráfico específico:

kubectl aplicar -f - <<EOF

apiVersion: networking.k8s.io/v1

tipo: Política de red

metadatos:

nombre: allow-frontend-to-backend

espec:

podSelector:

emparejarEtiquetas:

app: backend

entrada:

- de:

- podSelector:

emparejarEtiquetas:

app: frontend

puertos:

- puerto 8080

EOF

Empieza con una política de red "denegar todo" como línea de base, y luego permite sólo el tráfico que realmente necesites. De este modo, seguirás el principio del menor privilegio y mantendrás tu superficie de ataque lo más reducida posible.

Domina la gestión de Kubernetes con estos comandos kubectl y las mejores prácticas

Kubectl es una herramienta imprescindible en el mundo de los comandos de Kubernetes, ya que actúa como tu interfaz de referencia para gestionar y trabajar con clusters de Kubernetes. Aprendiendo estos comandos de ejecución y siguiendo las mejores prácticas de esta hoja de trucos, estarás preparado para afrontar los retos de las aplicaciones en contenedores con la máxima confianza.

Ten en cuenta que Kubernetes siempre está evolucionando, y kubectl también. Mantente al día de las nuevas funciones y actualizaciones para seguir mejorando tus habilidades de gestión de clústeres.

Si estás listo para sumergirte en temas más avanzados como la ampliación de los rangos de IP del servicio Kubernetes, consulta nuestra guía detallada en cómo ampliar rangos de IP de servicio sin problemas.

A medida que tu configuración de Kubernetes se amplía y se hace más compleja, disponer de las herramientas y los conocimientos adecuados resulta aún más importante. Ahí es donde DoiT entra. Nuestro equipo global de arquitectos de la nube está especializado en ayudar a las empresas a crear infraestructuras en la nube rentables, escalables y resistentes. Estamos aquí para ayudar a afrontar los difíciles retos de configuración e integración de Kubernetes, a la vez que resolvemos problemas e impulsamos la eficiencia operativa.

Chatea con nosotros para saber cómo podemos ayudarte a optimizar tu estrategia de orquestación de contenedores para mejorar el rendimiento y ahorrar costes.

Schedule a call with our team

You will receive a calendar invite to the email address provided below for a 15-minute call with one of our team members to discuss your needs.

You will be presented with date and time options on the next step

ES form

This field is for validation purposes and should be left unchanged.