Docker generalmente proporciona la primera introducción de un desarrollador a los contenedores. Kubernetes es una plataforma de orquestación que resuelve los desafíos relacionados con la ejecución de contenedores en producción. Así es como los comandos de Docker se asignan a sus homólogos de Kubernetes.
No puedes usar el docker
CLI para interactuar con contenedores que se ejecutan en Kubernetes. Kubernetes proporciona su propia interfaz de línea de comandos, kubectl delete deployment
, para ayudarlo a administrar su clúster. Lea nuestra guía para comenzar con kubectl delete deployment
si no está familiarizado con la herramienta.
Ninguno de los docker
los comandos tienen el mismo nombre en kubectl delete deployment
. Kubernetes expone la funcionalidad a su manera. Las cargas de trabajo en sí mismas son fundamentalmente diferentes:Docker está diseñado para funcionar con un solo contenedor a la vez, mientras que Kubernetes permite la orquestación de varias réplicas.
El primer punto a apreciar es el cambio en la terminología. Docker se refiere a "contenedores", mientras que Kubernetes usa "vainas". Un pod puede ejecutar un contenedor o varias réplicas administradas como una sola unidad. Aparte de este detalle, cuando vea "contenedor" en Docker, debe pensar en un "pod" de Kubernetes. Los términos se utilizarán indistintamente en el resto de este artículo.
Obteniendo detalles de sus contenedores
En Docker, usa docker ps -a
para ver todos los contenedores en su máquina.
El equivalente de Kubernetes más cercano es kubectl get pods
.
La salida de los dos comandos es bastante diferente. Docker muestra más información sobre la carga de trabajo que está ejecutando el contenedor.
Kubernetes proporcionará detalles sobre la imagen y el comando al usar el describe pod
dominio. Necesitas pasar el nombre del pod. Esto brinda información mucho más detallada, utilizando una lista en lugar de una tabla.
Ejecutando Comandos en Contenedores
Docker le permite ejecutar un comando en un contenedor en ejecución usando docker exec
.
El equivalente de Kubernetes también se llama exec
. Utilice el nombre del pod de Kubernetes en lugar del nombre del contenedor de Docker. El comando se especifica de forma ligeramente diferente:debe estar separado del nombre del pod por un --
secuencia.
Puedes usar el -it
banderas para obtener acceso interactivo de la misma manera que Docker. Esta es una abreviatura de --stdin --tty
y debe usarse siempre que desee iniciar un shell dentro de un pod. Especifique el nombre del shell, como bash
, como comando.
Kubectl es compatible con attach
comando para cuando desee adjuntar a un proceso en un contenedor que ya se está ejecutando. Funciona de manera similar a docker attach
pero deberías pasar el -it
banderas si necesita acceso interactivo.
Visualización de registros de contenedores
Para ver los registros de un contenedor con Docker, utilice los docker logs
dominio. Agregando el -f
switch "seguirá" los registros para que se transmitan continuamente a su terminal.
logs
de Kubectl El comando tiene la misma sintaxis. Proporcione un nombre de pod de la misma manera que Docker acepta un nombre de contenedor.
Tanto Docker como Kubernetes recopilan registros de la salida estándar y el error estándar (stdout
/stderr
) flujos de contenedores en funcionamiento. Kubernetes maneja los reinicios de contenedores de manera diferente a Docker. Mientras que en Docker un contenedor reiniciado agrega sus registros a los existentes, Kubernetes crea un nuevo registro para cada ejecución. Puede obtener los registros de un contenedor reemplazado agregando --previous
marca a los logs
comando.
Creación de contenedores
Los contenedores Docker se crean con run
dominio. Así es como podría iniciar un nginx
servidor con Docker:
docker run -d --name nginx --restart=always -p 80:80 nginx
Esto crea un contenedor usando nginx
imagen base y la configura para que se reinicie automáticamente. El servidor está vinculado al puerto HTTP predeterminado 80.
Kubernetes requiere que piense en abstracciones de alto nivel al agregar contenedores a su clúster. En lugar de ejecutar un contenedor, está creando una implementación para representar su carga de trabajo:
kubectl create deployment --image=nginx nginx
Esto creará un nginx
despliegue. Un pod se inicia automáticamente; dentro del pod, habrá un contenedor que ejecuta el servidor web.
La creación de una implementación no vinculará sus contenedores a ningún puerto. El servidor recién creado aún no es accesible. Los puertos deben estar expuestos a través de un servicio . Los pods son efímeros y pueden contener múltiples contenedores replicados. Los servicios definen una colección lógica de pods y le permiten asignarles recursos de red, como una dirección IP y un puerto.
Exponiendo el nginx
la implementación en el puerto 80 permitirá acceder al servidor:
kubectl expose deployment nginx --port=80 --name nginx-http
Intentar acceder al puerto 80 en la dirección IP predeterminada del clúster ahora debería dirigirlo a nginx
servidor.
Kubectl no es compatible directamente con otras docker run
opciones como la creación de volúmenes y los montajes de enlace. Los contenedores que requieren almacenamiento persistente deberán tener volúmenes configurados manualmente a través de kubectl delete deployment
comandos o un manifiesto de volumen.
Eliminación de contenedores
Los contenedores de Docker se eliminan mediante docker rm
comando con el ID del contenedor.
Kubernetes no le permite eliminar contenedores directamente. En su lugar, trabaja con la implementación que creó la vaina. Use la implementación de eliminación de kubectl delete deployment
comando, pasando el nombre de la implementación.
Docker le permite detener un recipiente en lugar de retirarlo. Kubernetes ha eliminado el soporte para esta acción. La forma recomendada de suspender temporalmente una implementación es reducir su cuenta de réplicas a 0. Sin pods en ejecución, la carga de trabajo se detiene de manera efectiva.
kubectl scale --replicas=0 deployment/my-deployment
Cuando esté listo para reanudar la implementación, ejecute scale
comando de nuevo. Establezca el nuevo recuento de réplicas en 1
o mas alto. El uso de más réplicas puede aumentar la disponibilidad de su carga de trabajo.
Conclusión
No hay paralelos directos entre Docker CLI y kubectl delete deployment
. La mayoría de los comandos de Kubernetes tienen una sintaxis diferente a la de sus homólogos de Docker. Deberá aprender nuevos términos y opciones antes de poder realizar la transición de los flujos de trabajo basados en Docker a Kubernetes.
En muchos casos, no hay kubectl delete deployment
alternativa a la capacidad CLI de Docker. La funcionalidad de Docker se centra en el concepto de contenedor. Kubernetes toma eso y lo coloca en el centro de un ecosistema de recursos muy ampliado.
Los contenedores rara vez se tratan de forma aislada. En su lugar, deberá trabajar con recursos como implementaciones, servicios y conjuntos de réplicas. Es por eso que aprender Kubernetes puede parecer un desafío cuando se aborda desde la perspectiva de un usuario de Docker.
Si está familiarizado con los fundamentos de Docker, la transición a Kubernetes debería ser relativamente sencilla. La diferencia principal es que lo que Docker ve como un contenedor generalmente se accede como un "pod" agregado en Kubernetes. Los pods se crean mediante "implementaciones" que representan las cargas de trabajo en su clúster. En caso de duda, consulte el kubectl delete deployment
docs para encontrar una coincidencia adecuada para un comando de Docker.