Gestionando y Venciendo a los Pods
Tenemos un archivo pod.yaml
donde hemos definido un Pod de la siguiente manera:
apiVersion: v1
kind: Pod
metadata:
name: pod-nginx
labels:
app: nginx
service: web
spec:
containers:
- image: nginx:1.16
name: contenedor-nginx
imagePullPolicy: Always
Podemos crear el Pod directamente desde el archivo YAML con el siguiente comando:
kubectl create -f pod.yaml
Para verificar el estado del Pod y si está listo, usamos:
kubectl get pods
(Es equivalente usar po
, pod
o pods
).
Para obtener más información sobre los Pods, como el nodo del clúster donde se está ejecutando, usamos:
kubectl get pod -o wide
Para obtener información detallada del Pod (similar a docker inspect
):
kubectl describe pod pod-nginx
Podemos editar el Pod y ver todos los atributos que lo definen. Muchos de estos valores son asignados automáticamente por Kubernetes, y algunos pueden ser actualizados:
kubectl edit pod pod-nginx
Sin embargo, esta opción es compleja para este punto del curso. Es importante comprender mejor cómo funcionan los objetos de Kubernetes antes de hacer modificaciones. Más adelante veremos una manera más adecuada de actualizar un objeto de Kubernetes.
Normalmente no se interactúa directamente con el Pod a través de una shell, pero se pueden obtener los logs de manera similar a Docker:
kubectl logs pod-nginx
En el caso poco común de que necesitemos ejecutar un comando adicional en el Pod, podemos usar exec
. Por ejemplo, para abrir una shell interactiva:
kubectl exec -it pod-nginx -- /bin/bash
Podemos acceder a la aplicación redirigiendo un puerto de localhost al puerto de la aplicación:
kubectl port-forward pod-nginx 8080:80
Luego accedemos al servidor web en la URL http://localhost:8080.
Atención:
NOTA: Esta no es la forma recomendada de acceder a las aplicaciones en Kubernetes. Para el acceso a las aplicaciones usaremos un recurso llamado Service.
NOTA2: El port-forward
no es igual a la redirección de puertos en Docker, ya que en este caso la redirección se hace en el equipo que ejecuta kubectl
, no en el equipo que ejecuta los Pods o los contenedores.
Para obtener las etiquetas de los Pods que hemos creado:
kubectl get pods --show-labels
Las etiquetas se definen en la sección metadata
del archivo YAML, pero también podemos añadirlas a los Pods ya creados:
kubectl label pods pod-nginx service=web --overwrite=true
Las etiquetas son muy útiles, ya que permiten seleccionar un recurso determinado (en un clúster de Kubernetes puede haber cientos o miles de objetos). Por ejemplo, para visualizar los Pods que tienen una etiqueta con un valor específico:
kubectl get pods -l service=web
También podemos visualizar los valores de las etiquetas como una nueva columna:
kubectl get pods -Lservice
Finalmente, para eliminar el Pod usamos:
kubectl delete pod pod-nginx