Saltar al contenido principal

manifest

Por debajo de todas las acciones de kubernetes, lo que el motor entiende, son archivos manifiesto que definen el tipo de cada elemento.

Cuando se coge cierta experiencia se dejan de usar comandos para usar manifiestos y poder aplicar varios a la vez, haciendo el proceso menos tedioso.

Obtener el manifiesto de un pod

kubectl get pods <nombre pod> -o <formato>

Existen varios formatos de salida pero los más comunes son yaml (el usado nativamente por kubernetes), json, name, go-template (para customizaciones)... https://kubernetes.io/docs/reference/kubectl/overview/#custom-columns

Definir un pod en un manifiesto

Creamos la definición de un pod de prueba que escribirá “Hello world” cada hora:

apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: busybox
command: ['sh', '-c', 'echo Hello World!; sleep 3600']

Luego podríamos crear el elemento con el comando:

kubectl apply -f pods.yaml

También podríamos eliminarlo usando el manifiesto con el comando:

kubectl deletec-f pods.yaml

Multiples contenedores en un pod

Podemos definir varios contenedores en un pod. En este ejemplo podemos ver el balanceo que hace kubernetes a nivel de red entre los distintos contenedores de un pod.

apiVersion: v1
kind: Pod
metadata:
name: doscont
spec:
containers:
- name: cont1
image: python:3.6-alpine
command: ['sh', '-c', 'echo "cont1 > index.html" && python -m http.server 8082']
- name: cont2
image: python:3.6-alpine
command: ['sh', '-c', 'echo "cont2 > index.html" && python -m http.server 8083']

Labels

Podemos usar etiquetas para filtrar recursos en proyectos de cierto tamaño. Por ejemplo, separando frontend de backend:

apiVersion: v1
kind: Pod
metadata:
name: podtest2
labels:
app: front
env: dev
spec:
containers:
- name: cont1
image: nginx:alpine