3.2 Gestionando los pods

Tenemos un fichero 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 directamente el Pod desde el fichero yaml:

kubectl create -f pod.yaml

Y podemos ver el estado en el que se encuentra y si está o no listo:

kubectl get pods

(Sería equivalente usar po, pod o pods).

Si queremos ver más información sobre los Pods, como por ejemplo, saber en qué nodo del cluster se está ejecutando:

kubectl get pod -o wide

Para obtener información más detallada del Pod (equivalente al inspect de docker):

kubectl describe pod pod-nginx

Podríamos editar el Pod y ver todos los atributos que definen el objeto, la mayoría de ellos con valores asignados automáticamente por el propio Kubernetes y podremos actualizar ciertos valores:

kubectl edit pod pod-nginx

Sin embargo, es una opción compleja para utilizarla a estas alturas del curso y hay que comprender mejor cómo funcionan los objetos de Kubernetes para poder hacer modificaciones de forma apropiada, y además, veremos más adelante otra manera más correcta de actualizar un objeto de Kubernetes.

Normalmente no se interactúa directamente con el Pod a través de una shell, pero sí se obtienen directamente los logs al igual que se hace en docker:

kubectl logs pod-nginx

En el caso poco habitual de que queramos ejecutar alguna orden adicional en el Pod, podemos utilizar el comando exec, por ejemplo, en el caso particular de que queremos abrir una shell de forma 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

Y accedemos al servidor web en la url http://localhost:8080.

NOTA: Esta no es la forma con la que accedemos a las aplicaciones en Kubernetes. Para el acceso a las aplicaciones usaremos un recurso llamado Service. Con la anterior instrucción lo que estamos haciendo es una redirección desde localhost el puerto 8080 al puerto 80 del Pod y es útil para pequeñas pruebas de funcionamiento, nunca para acceso real a un servicio. NOTA2: El port-forward no es igual a la redirección de puertos de docker, ya que en este caso la redirección de puertos 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 las hemos definido en la sección metadata del fichero yaml, pero también podemos añadirlos 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 cluster de Kubernetes puede haber cientos o miles de objetos).Por ejemplo para visualizar los Pods que tienen una etiqueta con un determinado valor:

kubectl get pods -l service=web

También podemos visualizar los valores de las etiquetas como una nueva columna:

kubectl get pods -Lservice

Y por último, eliminamos el Pod mediante:

kubectl delete pod pod-nginx