Kubernetes, a menudo escrito como K8s para abreviar, es una de las principales plataformas de orquestación de contenedores. Proporciona un marco sólido para que los desarrolladores y los equipos de TI administren aplicaciones en contenedores grandes y complejas.
La plataforma expone API RESTful a través de una interfaz de plano de control de kube-apiserver Componente para ayudar a gestionar y operar objetos. Se puede acceder al punto final de la API a través de la utilidad de línea de comandos kubectl o mediante el panel de control de K8s, ambos incluidos como parte de la distribución de Kubernetes. La utilidad kubectl proporciona una interfaz simple y potente para acceder al plano de control de K8s para crear, actualizar y eliminar recursos de K8s.
En este artículo, abordamos los casos de uso más comunes de kubectl y su sintaxis de línea de comandos. Analizamos las prácticas recomendadas para interactuar con el clúster K8s y algunos pasos de solución de problemas para la implementación de su aplicación. También explicamos cómo realizar copias de seguridad y recuperaciones de su clúster de Kubernetes.
Comandos de uso común de Kubectl
Antes de analizar las mejores prácticas para usar kubectl, familiaricémonos con algunos comandos de kubectl comúnmente utilizados y las tareas que realizan en la administración de recursos de Kubernetes.
Tenga en cuenta que algunos comandos presentados en una sección marcada al final de la tabla utilizan el Complemento KrewEl repositorio de complementos de Krew ofrece varias herramientas para mejorar su experiencia con kubectl al simplificar el descubrimiento, la instalación y la administración de implementaciones.
Comando | Descripción |
Comandos básicos de Kubectl: obtención de información | |
Información del clúster de Kubectl | Ver información del clúster |
kubectl obtener nodos | Ver todos los nodos |
kubectl consigue vainas | Ver todos los pods |
kubectl obtiene servicios | Vea todos nuestros servicios |
kubectl obtiene implementaciones | Ver todas las implementaciones |
Gestión de pods | |
Ejecutar kubectl –imagen= | Crear un Pod |
kubectl eliminar pod | Eliminar un Pod |
kubectl describe pod | Describir una vaina |
registros de kubectl | Salida de registro de un pod |
kubectl exec -it — /bin/sh | Iniciar un shell interactivo en un pod |
Gestión de la implementación | |
kubectl crea una implementación –imagen= | Crear una implementación |
Implementación a escala de Kubectl –réplicas= | Escalar una implementación |
kubectl establece la implementación de imágenes/ = | Actualizar una implementación |
Eliminar implementación de kubectl | Eliminar una implementación |
Service Management | |
Implementación de Kubectl Exposure –tipo= –puerto= | Crear un servicio |
kubectl describe el servicio | Ver detalles de un servicio |
servicio de eliminación de kubectl | Eliminar un servicio |
Los espacios de nombres | |
kubectl obtiene espacios de nombres | Listar todos los espacios de nombres |
kubectl crea un espacio de nombres | Crear un espacio de nombres |
kubectl eliminar espacio de nombres | Eliminar un espacio de nombres |
configuración de kubectl set-context –current –namespace= | Cambiar el contexto a un espacio de nombres |
Configuración y gestión | |
kubectl aplicar -f .yaml | Aplicar una configuración desde el archivo |
kubectl eliminar -f .yaml | Eliminar recursos de un archivo de configuración |
kubectl obtener todo | Ver configuraciones actuales |
kubectl obtener -o yaml | Ver la configuración de un recurso |
Comandos de resolución de problemas | |
kubectl obtiene eventos | Eventos |
kubectl describe pod | Ver el estado del pod |
kubectl exec -it — | Ejecutar un comando en un pod |
registros de kubectl -f | Sigue los registros de un pod en tiempo real |
cápsula superior kubectl | Mostrar el uso de recursos para los pods |
Nodo superior de kubectl | Mostrar el uso de recursos para los nodos |
Gestión de nodos | |
kubectl obtener nodos | Ver todos los nodos |
Cordón Kubectl | Marcar un nodo como no programable |
drenaje kubectl | Desalojar todos los pods de un nodo |
kubectl descordonar | Marcar un nodo como programable |
Complementos de Krew | |
Instalación ordenada de kubectl krew | Formato kubectl obtener Salida para una mejor legibilidad. |
Árbol de instalación de kubectl krew | Visualizar jerarquías y relaciones de recursos |
Implementación del árbol de kubectl | Muestra una vista de árbol de una implementación, que muestra sus pods asociados, conjuntos de réplicas y otros objetos relacionados |
Instalación de ctx de kubectl krew | Para administrar y cambiar entre múltiples contextos de Kubernetes. |
Recursos de instalación de kubectl krew | Ver solicitudes de recursos y límites para pods y contenedores. |
Resumen de las mejores prácticas de kubectl
Buenas prácticas | Descripción |
Utilice espacios de nombres | Aislar diferentes entornos, equipos o aplicaciones dentro del mismo clúster. |
Etiquetar y anotar recursos | Aplique etiquetas en todos los recursos para facilitar la gestión, el filtrado y la agrupación. |
Utilice configuraciones declarativas | Defina el estado deseado en los archivos YAML y utilice el comando kubectl apply para crear o actualizar recursos. |
Establecer límites de recursos | Establezca solicitudes y límites de recursos en sus contenedores para evitar el aprovisionamiento excesivo o la falta de recursos. |
Introducción a los componentes de Kubernetes
Antes de entrar en detalles sobre kubectl, aquí hay una lista de los componentes de K8s con los que la utilidad de línea de comandos puede interactuar a través de API:
- Racimo: Un clúster de Kubernetes es un grupo de computadoras interconectadas llamadas nodos que administran y ejecutan aplicaciones en contenedores.
- Nodo: Un nodo puede ser una máquina física o virtual administrada por el plano de control de K8s. Un nodo aloja componentes como kubelet, un entorno de ejecución de contenedores y el proxy kube, que son necesarios para ejecutar pods.
- Vaina: Un pod es un conjunto de contenedores que actúan como una sola unidad y brindan servicio a una sola aplicación. Los contenedores comparten recursos de un pod, como un volumen de almacenamiento y la dirección IP asignada al pod.
- Despliegue: Una implementación es un objeto declarativo que administra las réplicas y el estado de una aplicación. Una implementación define la cantidad de réplicas de una aplicación y la imagen que utilizan los contenedores de la aplicación.
- Servicio: Un servicio es un método para exponer aplicaciones que se ejecutan en pods en una red. Un objeto de servicio proporciona la dirección IP y el puerto para que los clientes accedan a los servicios y también puede realizar el equilibrio de carga para una aplicación que se ejecuta en varios pods.
- Espacio de nombres: Un espacio de nombres proporciona una separación lógica de los recursos dentro de un clúster de K8s. Puede dividir los recursos entre varios usuarios o equipos que trabajan en diferentes proyectos.
Protección de datos automatizada y recuperación inteligente de Kubernetes
Realice copias de seguridad seguras centradas en aplicaciones de contenedores, máquinas virtuales, timón y operadores
Utilice instantáneas preparadas previamente para probar, transformar y restaurar instantáneamente durante la recuperación
Escale con flujos de trabajo de copia de seguridad y restauración basados en políticas totalmente automatizados
Comandos de Kubectl y sintaxis básica
La utilidad kubectl requiere un archivo de configuración para interactuar con las API de Kubernetes. De forma predeterminada, el archivo se llama config y se coloca en el camino $HOME/.kube/configCon kubectl, puede crear nuevos recursos (como pods), obtener la lista de recursos existentes (como la lista de servicios), describir un recurso específico (como una implementación) o eliminar un recurso de K8s (como un espacio de nombres).
Sintaxis de comandos de Kubectl
La utilidad kubectl tiene la siguiente sintaxis de línea de comandos:
kubectl [comando] [TIPO] [NOMBRE] [banderas]
- [mando] es el nombre de la operación que desea realizar, como crear, eliminar, obtener o describir.
- [ESCRIBE] es el tipo de recurso en el que desea operar, como pod, implementación o servicio.
- [NOMBRE] es el nombre del recurso sobre el que desea operar.
- [banderas] se utilizan para argumentos adicionales a la línea de comando, como especificar el formato de salida del comando o filtrar recursos según etiquetas.
Obtener ayuda desde la línea de comandos
Hay muchos recursos disponibles en Internet que pueden ayudarle a comprender kubectl y sus distintas opciones. También hay disponible una breve ayuda con la línea de comandos:
$ kubectl --help kubectl controla el administrador de clústeres de Kubernetes. Encuentre más información en: https://kubernetes.io/docs/reference/kubectl/ Comandos básicos (principiante): create Crea un recurso desde un archivo o desde la entrada estándar exposed Toma un controlador de replicación, servicio, implementación . .
Puede obtener ayuda con un comando específico de la siguiente manera:
$ kubectl get --help Muestra uno o varios recursos. . . Ejemplos: # Enumera todos los pods en formato de salida ps kubectl get pods . .
Habilitar el autocompletado de kubectl
Si está utilizando un shell bash de Linux, puede habilitar el autocompletado para el comando kubectl de la siguiente manera:
$ kubectl finalización bash | \ sudo tee /etc/bash_completion.d/kubectl > /dev/null $ fuente /etc/bash_completion.d/kubectl
Comandos básicos de Kubectl: obtención de información
Comencemos con algunos comandos básicos sobre cómo obtener información sobre el clúster de Kubernetes y los recursos que se ejecutan en la plataforma.
Mostrar la dirección del plano de control y los servicios del clúster:
$ kubectl cluster-info El plano de control de Kubernetes se está ejecutando en https://127.0.0.1:6443
Mostrar todos los nodos y sus estados:
$ kubectl get nodes NOMBRE ESTADO ROLES EDAD VERSIÓN node1 Ready control-plane 60d v1.29.5 node2 Ready 21d v1.29.5
Ver todos los pods:
$ kubectl get pods NOMBRE LISTO ESTADO REINICIO EDAD nginx-7854ff8877-q9bxc 1/1 En ejecución 0 21d
Ver todos los servicios:
$ kubectl get services NOMBRE TIPO IP DEL CLÚSTER IP EXTERNA PUERTO(S) EDAD kubernetes ClusterIP 10.233.0.1 443/TCP 60d
Ver todas las implementaciones:
$ kubectl get deployments NOMBRE LISTO ACTUALIZADO DISPONIBLE EDAD nginx 1/1 1 1 60d
Pasos para la implementación del servidor web
Ahora enumeraremos los pasos y comandos para crear una implementación de servidor web NGINX en Kubernetes, incluida la creación de un espacio de nombres separado, la implementación de tres conjuntos de réplicas, la exposición del servicio y algunos pasos de solución de problemas.
Pasos del proceso de implementación
Crear un espacio de nombres
Según las mejores prácticas, se recomienda crear un espacio de nombres separado para cada aplicación.
$ kubectl crear espacio de nombres nginx-namespace espacio-de-nombres/nginx-namespace creado
Cambiar el contexto a un espacio de nombres
De forma predeterminada, el comando kubectl interactúa con los recursos en el la página predeterminada espacio de nombres. Para interactuar con recursos en otros espacios de nombres, puede utilizar el modificador de línea de comandos -norte o cambiar el contexto para que no sea necesario especificarlo -n parámetro con cada comando.
Contexto "[email protected]" modificado.
Crear una implementación
A continuación, cree un archivo YAML de implementación y defina el estado requerido de la aplicación. Cree un archivo llamado Implementación de nginx.yaml con las especificaciones del contenedor y la cantidad de réplicas. Especifique los límites mínimos y máximos de recursos en los contenedores:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment namespace: nginx-namespace spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: contenedores: - name: nginx image: nginx:latest ports: - contenedorPort: 80 recursos: solicitudes: memoria: "64Mi" cpu: "250m" límites: memoria: "128Mi" cpu: "500m"
A continuación, aplique la implementación de la siguiente manera:
$ kubectl apply -f nginx-deployment.yaml deployment.apps/nginx-deployment creado
Escalar la implementación
Puede aumentar o disminuir la cantidad de réplicas del contenedor después de la implementación:
Implementación a escala de kubectl nginx-deployment --replicas=4 deployment.apps/nginx-deployment scaled
Crea un servicio
Crea un archivo llamado servicio nginx.yaml con el siguiente contenido:
apiVersion: v1 kind: Service metadata: name: nginx-service namespace: nginx-namespace spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer
Ahora crea el servicio usando aplicar kubectl:
$ kubectl apply -f nginx-service.yaml servicio/nginx-service creado
Pasos para solucionar problemas
Si la aplicación no funciona como se espera en el clúster K8s, puede usar los siguientes comandos para verificar el estado de los recursos creados en el clúster y revisar los registros en busca de errores.
Compruebe el estado de la implementación. El siguiente comando mostrará el estado de las réplicas junto con el tiempo que lleva ejecutándose la implementación.
$ kubectl get deployments -n nginx-namespace NOMBRE LISTO ACTUALIZADO DISPONIBLE EDAD nginx-deployment 3/3 3 3 21h
Obtenga el estado de la implementación de nginx, junto con su historial, configuración y cualquier evento asociado con la implementación.
$ kubectl describe deployment nginx-deployment -n nginx-namespace Nombre: nginx-deployment Espacio de nombres: nginx-namespace CreationTimestamp: Sáb, 31 Ago 2024 06:08:00 +0000 Etiquetas: Anotaciones: deployment.kubernetes.io/revision: 1 Selector: app=nginx Réplicas: 3 deseadas | 3 actualizadas | 3 en total | 3 disponibles | 0 no disponibles . .
Verifique el estado de los conjuntos de réplicas dentro de un espacio de nombres.
$ kubectl get replicasets -n nginx-namespace NOMBRE DESEADO ACTUAL LISTO EDAD nginx-deployment-7c79c4bf97 3 3 3 21h
Muestra el estado y la antigüedad de todos los pods en un espacio de nombres.
$ kubectl get pods -n nginx-namespace NOMBRE LISTO ESTADO REINICIO EDAD nginx-deployment-7c79c4bf97-c8rkj 1/1 En ejecución 0 21 h nginx-deployment-7c79c4bf97-xz49p 1/1 En ejecución 0 21 h nginx-deployment-7c79c4bf97-zg292 1/1 En ejecución 0 21 h
Verifique el estado actual, la configuración y los eventos relacionados con un pod específico.
$ kubectl describe pod nginx-deployment-7c79c4bf97-c8rkj -n nginx-namespace Nombre: nginx-deployment-7c79c4bf97-c8rkj Espacio de nombres: nginx-namespace Prioridad: 0 Cuenta de servicio: predeterminada Nodo: node4/10.20.20.67 Hora de inicio: sáb., 31 ago. 2024 06:08:00 +0000 Etiquetas: app=nginx pod-template-hash=7c79c4bf97 . .
Comprobar los registros de un pod:
$ kubectl logs nginx-deployment-7c79c4bf97-c8rkj -n nginx-namespace 2024/08/31 06:08:04 [aviso] 1#1: usando el método de evento "epoll" 2024/08/31 06:08:04 [aviso] 1#1: nginx/1.27.1 2024/08/31 06:08:04 [aviso] 1#1: creado por gcc 12.2.0 (Debian 12.2.0-14) 2024/08/31 06:08:04 [aviso] 1#1: SO: Linux 5.15.0-107-generic 2024/08/31 06:08:04 [aviso] 1#1: getrlimit(RLIMIT_NOFILE): 65535:65535 2024/08/31 06:08:04 [aviso] 1#1: iniciar procesos de trabajo 2024/08/31 06:08:04 [aviso] 1#1: iniciar proceso de trabajo 29 2024/08/31 06:08:04 [aviso] 1#1: iniciar proceso de trabajo 30
Enumere los servicios en el espacio de nombres, el tipo, las direcciones IP internas y externas y los puertos expuestos. Puede obtener más detalles de un servicio específico.
$ kubectl get services -n nginx-namespace NOMBRE TIPO IP-CLÚSTER IP-EXTERNA PUERTO(S) EDAD nginx-service LoadBalancer 10.233.54.48 80:31455/TCP $ kubectl describe service nginx-service -n nginx-namespace Nombre: nginx-service Espacio de nombres: nginx-namespace Etiquetas: Anotaciones: Selector: app=nginx Tipo: LoadBalancer Política de familia de IP: SingleStack . .
Comprobar eventos en busca de errores:
$ kubectl get events -A ESPACIO DE NOMBRES VISTO POR ÚLTIMA VEZ TIPO RAZÓN OBJETO MENSAJE predeterminado 116 s Normal NodeHasSufficientMemory node/node3 El estado del nodo node3 ahora es: NodeHasSufficientMemory kube-system 35 m Advertencia Pod/kube-apiserver-node1 no saludable La sonda de preparación falló: la sonda HTTP falló con el código de estado: 500 . .
Ejecute comandos interactivos en los pods y verifique la conectividad:
$ kubectl exec -it nginx-deployment-7c79c4bf97-zg292 \ -n espacio-de-nombres-nginx -- curl http://servicio-nginx ¡Bienvenido a nginx! ¡Bienvenido a nginx!
Limpiar
Una vez que terminemos con nuestra aplicación, podemos hacer una limpieza de todos los recursos creados anteriormente para que podamos hacer espacio para otras aplicaciones.
Eliminar el servicio:
$ kubectl delete service nginx-service -n nginx-namespace servicio "nginx-service" eliminado
Eliminar la implementación:
$ kubectl delete deployment nginx-deployment -n nginx-namespace deployment.apps "nginx-deployment" eliminado
Eliminar el espacio de nombres:
$ kubectl delete namespace nginx-namespace espacio de nombres "nginx-namespace" eliminado
Copia de seguridad y restauración de Kubernetes con Trilio
¿Qué es Trilio para Kubernetes (T4K)?
Trilio es una solución de protección y respaldo de datos nativa de la nube para entornos de Kubernetes. Trilio proporciona definiciones de recursos personalizadas (CRD) que amplían las capacidades de la API de K8s para administrar y automatizar las operaciones de respaldo y restauración de aplicaciones e infraestructura. Puede crear copias de seguridad y restaurarlas mediante la consola de administración o usar archivos de definición YAML para el flujo de trabajo.
En esta sección, utilizaremos kubectl para crear destinos de copia de seguridad y restauración para un entorno K8s de nivel superior. Para abreviar, suponemos que T4K está instalado con su licencia verificada.
Crear un destino de respaldo
En el ejemplo, utilizaremos el almacenamiento de AWS S3 como destino de la copia de seguridad. Necesitamos definir las credenciales de acceso para AWS.
Crea un archivo llamado muestra-secreto.yaml con los secretos requeridos:
apiVersion: v1 kind: Secret metadata: name: sample-secret type: Opaco stringData: accessKey: AKIAS5B35DGFSTY7T55D secretKey: xWBupfGvkgkhaH8ansJU1wRhFoGoWFPmhXD6/vVDcode
Utilice kubectl para crear el recurso de secretos:
$ kubectl apply -f muestra-secreto.yaml
Créar un demostración-s3-target.yaml archivo que define el depósito AWS S3 como un destino de respaldo utilizando el secreto creado anteriormente:
apiVersion: triliovault.trilio.io/v1 kind: Target metadatos: nombre: demo-s3-target especificación: tipo: ObjectStore proveedor: AWS objectStoreCredentials: región: us-east-1 bucketName: trilio-browser-test credentialSecret: nombre: sample-secret espacio de nombres: TARGET_NAMESPACE capacidad de umbral: 5Gi
Ahora crea el recurso de destino usando kubectl:
$ kubectl apply -f demo-s3-target.yaml
Creación de un plan de respaldo y copia de seguridad
El siguiente paso es definir un plan de respaldo utilizando el destino S3 definido anteriormente. Cree un archivo llamado ns-backupplan.yaml con el recurso de destino creado anteriormente:
apiVersion: triliovault.trilio.io/v1 kind: BackupPlan metadata: name: ns-backupplan spec: backupConfig: target: namespace: predeterminado nombre: demo-s3-target
Crear el recurso del plan de respaldo:
$ kubectl apply -f ns-backupplan.yaml
Para verificar que el plan de respaldo se creó correctamente y verificar su estado:
$ kubectl obtener planes de respaldo
El comando anterior ayuda a confirmar si el plan de respaldo se creó correctamente a través de una salida de confirmación como la siguiente:
NOMBRE ESTADO EDAD ns-backupplan Completado hace 2 h
Puede definir una política para programar copias de seguridad con una frecuencia específica. Cree un archivo llamado programa de muestra.yaml:
tipo: "Política" apiVersion: "triliovault.trilio.io/v1" metadatos: nombre: "programación de muestra" especificación: tipo: "Programación" ScheduleConfig: programación: - "0 0 * * *" - "0 */1 * * *" - "0 0 * * 0" - "0 0 1 * *" - "0 0 1 1 *"
Ahora aplique la política de programación:
$ kubectl apply -f muestra-programación.yaml
Luego de realizar la programación, necesitamos definir el período de retención de las copias de seguridad utilizando el archivo retención de muestra.yaml:
apiVersion: triliovault.trilio.io/v1 tipo: Metadatos de política: nombre: especificación de retención de muestra: tipo: Retención predeterminada: falsa configuración de retención: última: 2 semanal: 1 día de la semana: miércoles mensual: 1 fecha del mes: 15 mes del año: marzo anual: 1
Y ahora crea la política de retención:
$ kubectl apply -f muestra-retención.yaml
Verifique que la política de retención se haya creado correctamente:
$ kubectl obtener políticas
La salida devuelve la lista de políticas que están activas:
NOMBRE EDAD retención de muestra 1m
Por último, cree el recurso de respaldo para una aplicación de muestra utilizando el archivo ejemplo-copia-de-seguridad.yaml:
apiVersion: triliovault.trilio.io/v1 kind: Backup metadata: name: sample-backup spec: type: Full backupPlan: name: sample-application namespace: predeterminado
Y crea el recurso de respaldo usando kubectl:
$ kubectl apply -f sample-backup.yaml
Verifique que la copia de seguridad se haya creado correctamente y verifique su estado:
$ kubectl obtener copias de seguridad
Un ejemplo de la salida podría verse así:
NOMBRE ESTADO EDAD sample-backup Completado 5m
Creando una restauración
Para las operaciones de restauración, utilice la consola de administración de Trilio o cree un recurso de restauración personalizado utilizando archivos YAML. Vamos a crear un archivo llamado muestra-restore.yaml Para la copia de seguridad que creamos arriba:
apiVersion: triliovault.trilio.io/v1 kind: Restaurar metadatos: nombre: sample-restore especificación: origen: tipo: Copia de seguridad copia de seguridad: nombre: sample-backup espacio de nombres: predeterminado
Cree el recurso de restauración utilizando kubectl:
$ kubectl apply -f sample-restore.yaml
Verifique que la restauración se haya creado correctamente y verifique su estado:
$ kubectl get restaura
Un ejemplo de la salida podría verse así:
NOMBRE ESTADO EDAD muestra-restauración Completada 2m
Últimos pensamientos
En Kubernetes, kubectl es la navaja suiza que brinda a sus usuarios la potencia y la utilidad para realizar una amplia gama de tareas, desde inspeccionar los recursos del clúster K8s hasta implementar aplicaciones y solucionar problemas. Kubectl se puede utilizar para ejecutar comandos interactivos, así como para aplicar operaciones a través de código declarativo que se alinea con las mejores prácticas de operaciones en la nube. Kubectl brinda a los desarrolladores y operadores las capacidades para administrar K8s con simplicidad y eficiencia.
¿Te gusta este artículo?
Suscríbete a nuestro boletín de LinkedIn para recibir más contenido educativo