3.1 Describiendo un pod
Es posible crear un Pod directamente (lo que se denomina utilización imperativa) mediante kubectl:
kubectl run pod-nginx --image=nginx
De esta forma se crea un Pod con un contenedor que utiliza la imagen nginx:latest (no hemos especificado una versión) del registro que esté definido por defecto en el cluster de Kubernetes, se asigna una dirección IP y se lanza en uno de los nodos del cluster.
Un Pod tiene otros muchos parámetros asociados, que en este caso quedarán sin definir o Kubernetes asumirá los valores por defecto. Sin embargo es mucho más habitual trabajar con los objetos de Kubernetes de manera declarativa, definiendo los objetos de forma detallada a través de un fichero en formato YAML. De esta forma tenemos un fichero con la definición del objeto que hemos lanzado y podemos utilizar en otro momento exactamente la misma definición o podemos ir modificándola y aplicando los cambios cuando sea conveniente.
Un ejemplo podría ser el contenido del fichero pod.yaml:
apiVersion: v1 # required
kind: Pod # required
metadata: # required
name: pod-nginx # required
labels:
app: nginx
service: web
spec: # required
containers:
- image: nginx:1.16
name: contenedor-nginx
imagePullPolicy: Always
Veamos cada uno de los parámetros que hemos definido:
apiVersion: v1: La versión de la API que vamos a usar.kind: Pod: La clase de recurso que estamos definiendo.metadata: Información que nos permite identificar unívocamente el recurso:name: Nombre del podlabels: Las Labels nos permiten etiquetar los recursos de Kubernetes (por ejemplo un pod) con información del tipo clave/valor.
spec: Definimos las características del recurso. En el caso de un Pod indicamos los contenedores que van a formar el Pod (seccióncontainers), en este caso sólo uno.image: La imagen desde la que se va a crear el contenedorname: Nombre del contenedor.imagePullPolicy: Las imágenes se guardan en un registro interno. Se pueden utilizar registros públicos (google o docker hub son los más usados) y registros privados. La política por defecto esIfNotPresent, que se baja la imagen si no está en el registro interno. Si queremos forzar la descarga desde el repositorio externo, tendremos que indicarimagePullPolicy:Always.