Archivos YAML orientados a Kubernetes.

Yaml en KubernetesYAML se utiliza para la configuración de despliegues con Kubernetes. Si se conocen otros formatos de estructura de datos como XML o JSON, este formato se entenderá fácilmente. Un archivo YAML orientado a Kubernetes se utiliza para representar datos. En este caso, los datos de configuración de Kubernetes. Las reglas son las mismas que ya se vieron en Docker Compose

La forma más simple es un listado de pares clave-valor separados por dos puntos + espacio (Es importante el espacio después de los dos puntos):

Fruit: Apple
Vegetable: Carrot
Liquid: Water
Meat: Chicken

Listas

Para representar una matriz se utiliza la clave seguida de dos puntos y en las siguientes lineas un guión con cada uno de los valores:

Fruits:
  - Apple
  - Orange
  - Banana

Vegetables:
  - Carrot
  - Cauliflower
  - Tomato

Diccionarios

Para representar un conjunto de propiedades agrupadas bajo un elemento (un diccionario), se coloca la clave y en las siguientes lineas las claves+valor de cada uno de ellos anteponiendo espacios. Siempre el mismo número de espacios para que estén alineados:

Banana:
  Calories: 105
  Fat: 0.4 g
  Carbs: 27 g

Grapes:
  Calories: 62
  Fat: 0.3 g
  Carbs: 27 g

Listas de diccionarios

Si algunos de los pares clave-valor tuviera diferentes espacios, YAML entendería que son propiedades de los anteriores elementos. Esto daría como resultado un error de sintaxis que le indicará que los valores no están permitidos, ya que el anterior ya tiene un valor. Cada clave puede tener un valor o un listado. Por esta razón, los espacios son importantes en un archivo YAML orientado a Kubernetes.

Si subimos de nivel, podemos tener listas que tienen diccionarios que tienen propiedades:

Fruits:
  - Banana:
    Calories: 105
    Fat: 0.4 g
    Carbs: 27 g

  - Grapes:
    Calories: 62
    Fat: 0.3 g
    Carbs: 27

Vistos los ejemplo, podem

os resumir que existen tres tipos de estructuras: Listas, Diccionarios y listas de diccionarios. El diccionario es una colección desordenada, mientras que las listas son colecciones ordenadas. Varios elementos con las mismas propiedades se pueden representar con esos elementos en diferente orden, serían los mismos. Sin embargo, si dos listas tienen los mismos elementos, pero en orden diferente, las listas son diferentes.

Por último decir que el hash (#) es el caracter de comentario, cualquier linea que comience con un # será ignorada.

Configuración de PODs con YAML orientado a Kubernetes

Kubernetes utiliza archivos YAML como entradas para la creación de objetos como POD, réplicas, servicios de implementación, etc. Todos estos siguen una estructura similar. El archivo de definición de Kubernetes siempre contiene 4 campos de nivel superior: La versión de API, tipo, metadatos y especificaciones. Estas son las propiedades de nivel superior o nivel raíz. Estos también son campos obligatorios, por lo que deben estar en el archivo de configuración:

  • apiVersion: Esta es la versión de la API de Kubernetes que se utiliza para crear los objetos. Dependiendo de lo que se esté tratando de crear, se debe usar la versión API correcta. Los valores posibles para este campo son v1, apps, beta, etc…
  • kind: Es el tipo de objeto que se quiere crear, puede ser un POD (pod), una replica (ReplicaSet), una implementación (Deployment) o un servicio (Service).
  • metadata: Son datos sobre el objeto, como sus etiquetas, su nombre, etc. Tiene estructura de un diccionario. Por lo tanto, todo lo que se encuentra debajo de los metadatos está un poco a la derecha.
  • spec:

 

Especifica el objeto que vamos a crear. La información es diferente para diferentes objetos, por lo que es importante comprender o consultar la sección de documentación para obtener el formato correcto para cada uno. Si solo creamos un POD con un solo contenedor spec sería un diccionario con una serie de propiedades específicas como son “containers” (lista de nombres e imagenes)

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
    type: front-end
spec:
  containers:
    - name: nginx-container
      image: nginx
  env:
    - name: VARIABLE_ENTORNO
      value: valor

Ejecución

Una vez creado el archivo desde la linea de comando ejecutar “kubectl create -f pod-definition.yml” para que Kubernetes cree el POD. Usando el comando “kubectl get pods” se puede ver la lista de pods disponibles. Para ver información detallada sobre el pod se ejecuta el comando “kubectl describe pod myapp-pod”. Mostrará las etiquetas, los contenedores que forman parte de él y los eventos asociados.

A la hora de crear un archivo YAML orientado a Kubernetes se puede usar una herramienta de validación como esta: https://kubeyaml.com/