En este tutorial, vamos a aprender cómo crear y administrar Pods de Kubernetes. Primero, comenzaremos con qué es un Pod en Kubernetes y cómo funciona un Pod. A continuación, daremos un breve vistazo a los tipos de Pods. Y luego veremos cómo crear un nuevo Pod y cómo ver la información del Pod desde la línea de comandos. Finalmente, aprenderemos cómo eliminar el Pod cuando ya no sea necesario.
¿Qué es un pod en Kubernetes?
En Kubernetes , los pods son las unidades informáticas desplegables más pequeñas que puede construir y controlar. Un pod es una colección de uno o más contenedores con almacenamiento compartido y recursos de red, así como un conjunto de reglas sobre cómo se deben ejecutar los contenedores.
El contenido de un pod siempre se ubica, se programa y se ejecuta en el mismo entorno. Un pod representa un "host lógico" específico de la aplicación:incluye uno o más contenedores de aplicaciones estrechamente conectados.
En la perspectiva de Docker, un pod es equivalente a un conjunto de contenedores de Docker con espacios de nombres y volúmenes de sistemas de archivos comunes.
Tipos de pods de Kubernetes
En un clúster de Kubernetes, hay dos tipos de pods.
- POD de un solo contenedor: El caso de uso más frecuente de Kubernetes es el enfoque de "un contenedor por pod"; en este escenario, considere un Pod como un envoltorio sobre un solo contenedor; Kubernetes mantiene pods en lugar de contenedores directamente.
- POD de varios contenedores: Un pod puede encapsular una aplicación que se compone de numerosos contenedores estrechamente conectados que necesitan compartir recursos. Estos contenedores se agrupan para formar una sola unidad de servicio y estos contenedores se comunicarán entre sí.
¿Cómo funciona POD?
Cada Pod está diseñado para ejecutar una sola instancia de aplicación. Puede utilizar varios Pods, uno para cada instancia, si necesita extender su aplicación horizontalmente. Esto se conoce comúnmente como replicación en Kubernetes . Un recurso de carga de trabajo y su controlador normalmente producen y administran pods replicados en un grupo.
El objetivo final de Kubernetes es implementar la aplicación en forma de contenedores en un conjunto de máquinas que se denomina nodo trabajador. en el clúster de Kubernetes.
Kubernetes no lanza contenedores directamente en el nodo, sino que los contenedores se encapsulan como Pod, que es una instancia única de una aplicación.
En un clúster de Kubernetes, un nodo consta de pods y un pod consta de contenedores. Por ejemplo, tiene una sola instancia de una aplicación que se ejecuta en un solo contenedor encapsulado por un Pod.
Si aumenta el número de usuarios que acceden a la aplicación, debe escalar su aplicación. En ese caso, es posible que deba activar instancias adicionales para compartir la carga.
Para ampliar la aplicación, debe activar un nuevo Pod adicional en el nodo con la misma aplicación. Si la carga aumenta aún más y el nodo actual no tiene capacidad, debe tener un nodo adicional para hacer girar los pods con el mismo contenedor de aplicaciones.
Del mismo modo, para reducir la escala, debe eliminar el Pod existente.
Espero que tenga una idea básica sobre los pods de Kubernetes. Veamos ahora cómo crear y administrar Pods en Kubernetes.
Antes de comenzar, asegúrese de haber instalado Kubernetes en su sistema. Los siguientes enlaces tienen instrucciones sobre cómo configurar una implementación de clúster de Kubernetes de un solo nodo y de varios nodos en Linux.
- Cómo instalar Kubernetes usando Minikube en CentOS Linux
- Instalar clúster de Kubernetes mediante Kubeadm en RHEL, CentOS, AlmaLinux, Rocky Linux
Una vez instalado Kubernetes, puede comenzar a crear Pods.
Por lo general, no necesita crear pods directamente, ni siquiera pods únicos. En su lugar, créelos usando recursos de carga de trabajo como Implementación o Trabajo . Una implementación proporciona actualizaciones declarativas para Pods y ReplicaSets.
Crear una implementación
Cree una implementación de muestra utilizando una imagen existente "echoserver" . Es un servidor HTTP simple y podemos exponerlo en el puerto 8080
usando --port
opción.
Una imagen de contenedor es un archivo que envuelve un programa y todas sus dependencias de software en datos binarios. Las imágenes de contenedor son paquetes de software ejecutables independientes que hacen suposiciones extremadamente específicas sobre su entorno de ejecución.
En este artículo, repasaremos todas las demostraciones en un clúster de un solo nodo .
Puede conocer los detalles del nodo ejecutando el siguiente comando como root
usuario
# kubectl get nodes
Salida de muestra:
NAME STATUS ROLES AGE VERSION ostechnix Ready Master 25h v1.22.3
Ahora, implemente una aplicación de muestra llamada "hello-ostechnix" usando el siguiente comando. Puede nombrarlo según su conveniencia.
# kubectl create deployment hello-ostechnix --image=k8s.gcr.io/echoserver:1.10
Salida de muestra:
deployment.apps/hello-ostechnix created [[email protected] ~]#
Se crea la implementación, verifique la implementación con el siguiente comando.
# kubectl get deployments
Salida de muestra:
NAME READY UP-TO-DATE AVAILABLE AGE hello-ostechnix 1/1 1 1 85s
Despliegue de acceso
Para acceder a esta implementación como un servicio, debe exponerla como un servicio. Use el siguiente comando para exponer la implementación en el puerto 8080
.
# kubectl expose deployment hello-ostechnix --type=NodePort --port=8080
Salida de muestra:
service/hello-ostechnix exposed
Use el siguiente comando para obtener la URL del servicio expuesto.
# minikube service hello-ostechnix --url
Salida de muestra:
http://192.168.181.131:30525
Copie la URL y péguela en su navegador, enumerará los detalles de la aplicación implementada.
Asegúrese de que el puerto 30525
está permitido en su enrutador o firewall. Si este puerto está bloqueado, es posible que no vea la información del Pod en el navegador.
Eliminar implementación
Primero, elimine el servicio "hello-ostechnix" usando el comando:
# kubectl delete services hello-ostechnix
Salida de muestra:
service "hello-ostechnix" deleted
A continuación, elimine la implementación "hello-ostechnix":
# kubectl delete deployment hello-ostechnix
Salida de muestra:
deployment.apps "hello-ostechnix" deleted
Una vez que eliminó la implementación, el Pod asociado con la aplicación se cancelará. Tardará unos segundos en completar la terminación.
# kubectl get pods
Salida de muestra:
NAME READY STATUS RESTARTS AGE hello-ostechnix-5d4cf4df75-jlwff 1/1 Terminating 0 57m
Después de finalizar la implementación, ya no se podrá acceder a la aplicación.
# kubectl get pods
Resultado de muestra:
No resources found in default namespace.
Ejecutar pods con imágenes
Podemos usar el 'kubectl run
' comando para crear y ejecutar una aplicación en un Pod.
$ kubectl run <POD name> --image=<image name>
Aquí, el nombre del pod puede ser cualquier cosa y el nombre de la imagen debe ser específico y estar disponible en Docker Hub o en cualquier repositorio local.
Vamos a crear un Pod con la imagen de Nginx.
# kubectl run ostechnix-nginx --image=nginx
Salida de muestra:
pod/ostechnix-nginx created
Se ha creado un Pod llamado 'ostechnix-nginx'. Puede verificar el estado del Pod con el siguiente comando.
# kubectl get pods
Salida de muestra:
NAME READY STATUS RESTARTS AGE ostechnix-nginx 1/1 Running 0 4m20s
Puede obtener información adicional, como dónde se está ejecutando el Pod y la IP del Pod, mediante el uso de 'wide
' opción.
# kubectl get pods -o wide
Salida de muestra:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES ostechnix-nginx 1/1 Running 0 38m 172.17.0.6 ostechnix <none> <none>
Puede obtener información completa sobre el POD utilizando el 'kubectl describe
' comando.
# kubectl describe pod ostechnix-nginx
Este comando le proporcionará los detalles completos del POD, como los detalles del contenedor y sus estados, los detalles de los eventos que ocurrieron desde que se creó el Pod.
Name: ostechnix-nginx Namespace: default Priority: 0 Node: ostechnix/192.168.181.131 Start Time: Thu, 03 Feb 2022 01:40:48 -0800 Labels: run=ostechnix-nginx Annotations: <none> Status: Running IP: 172.17.0.6 IPs: IP: 172.17.0.6 Containers: ostechnix-nginx: Container ID: docker://29eeb0392247aef193d6dff0138f8ef132dfb6359d8e67c3a5e4a21d7e259989 Image: nginx Image ID: docker-pullable://[email protected]:2834dc507516af02784808c5f48b7cbe38b8ed5d0f4837f16e78d00deb7e7767 Port: <none> Host Port: <none> State: Running Started: Thu, 03 Feb 2022 01:40:54 -0800 Ready: True Restart Count: 0 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-ggvk6 (ro) Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True Volumes: kube-api-access-ggvk6: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: <nil> DownwardAPI: true QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 7m26s default-scheduler Successfully assigned default/ostechnix-nginx to ostechnix Normal Pulling 7m24s kubelet Pulling image "nginx" Normal Pulled 7m20s kubelet Successfully pulled image "nginx" in 4.114836826s Normal Created 7m20s kubelet Created container ostechnix-nginx Normal Started 7m20s kubelet Started container ostechnix-nginx [[email protected] ~]#
Una vez que haya terminado, puede eliminar el Pod usando 'kubectl delete
' comando.
# kubectl delete pod ostechnix-nginx
Salida de muestra:
pod "ostechnix-nginx" deleted
Verifique si el Pod se eliminó enumerando los Pods disponibles:
# kubectl get pods No resources found in default namespace.
Conclusión
En este tutorial, hemos repasado el concepto de Pod en Kubernetes, una implementación sencilla de aplicaciones y cómo ejecutar un Pod. Tendremos más detalles sobre la creación de Pod con YAML
archivo de definición en nuestros próximos detalles.