Kubernetes

Pods

Pods

Ciclo de vida de una aplicación

imagen.png

Pods

YAML

#Las cadenas no requieren comillas:
Título: Introducción a YAML

# Pero se pueden usar:
title-w-quotes: 'Introducción a YAML'

# Las cadenas multilínea comienzan con |
ejecutar: |
    npm ci
    npm build
    prueba npm

#Secuencias
#Las secuencias nos permiten definir listas en YAML:
# Una lista de números usando guiones:
números:
    - uno
    - dos
    - Tres

# La versión en línea:
números: [uno, dos, tres]

#Valores anidados
#Podemos usar todos los tipos anteriores para crear un objeto con valores anidados, así:
# Mil novecientos ochenta y cuatro datos nuevos.
1984:
    autor: George Orwell
    publicado en: 1949-06-08
    recuento de páginas: 328
    descripción: |
        Una novela, a menudo publicada como 1984, es una novela distópica del novelista inglés George Orwell.
        Fue publicado en junio de 1949 por Secker & Warburg como noveno y último b de Orwell.


#Lista de objetos
#Combinando secuencias y valores anidados  podemos crear una lista de objetos.
# Hagamos una lista de libros:
- 1984:
    autor: George Orwell
    publicado en: 1949-06-08
    recuento de páginas: 328
    descripción: |
        Una novela, a menudo publicada como 1984, es una novela distópica del novelista inglés George Orwell.

- el Hobbit:
    autor: J. R. R. Tolkien
    publicado en: 1937-09-21
    recuento de páginas: 310
    descripción: |
        The Hobbit, o There and Back Again es una novela de fantasía para niños del autor inglés J. R. R.

 

Pods

Pods

imagen.png

imagen.png

Pods

pod.yaml

Fichero inicial de ejemplo para levantar un pod en Kubernetes mediante el modo declarativo

apiVersion: v1
kind: Pod 
metadata:
  name: nginx
  labels:
    zone: prod
    version: v1
spec:
  containers:
   - name: nginx   
     image: nginx

 

Pods

comandos para ver estados y opciones de pods

kubectl get pod name_pod
kubectl get pods
#Mas datos
kubectl get pod name_pod -o wide

#El estado actual y su configuración
kubectl describe pod name_pod

#En formato json o yaml para obtener un fichero de lo que hay montado actualmente
kubectl describe pod name_pod -o yaml / -o json

#Ver etiquetas asignadas
kubectl get pods --show-labels

#Desalojar todos los pods de un nodo en concreto y dejarlos como no schedulable
#Respeta los PodDisruptionObjects
kubectl drain --ignore-daemmonsets nombre-node

#Indicar a k8s que puede utilizar un nodo para asignar nuevos pods
kubectl uncordon nombre-node









Deployments

Deployments

Workloads y controllers

imagen.png

imagen.png

Deployments

Diferencias con Pods

imagen.png

Deployments

Ejemplo de deployment declarativo

apiVersion: apps/v1 # i se Usa apps/v1beta2 para versiones anteriores a 1.9.0
kind: Deployment
metadata:
  name: nginx-d
spec:
  selector:   #permite seleccionar un conjunto de objetos que cumplan las condicione
    matchLabels:
      app: nginx
  replicas: 2 # indica al controlador que ejecute 2 pods
  template:   # Plantilla que define los containers
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

 

Servicios

Servicios

ClusterIp - NodePort - LoadBalancer

imagen.png

Servicios

Porque un servicio?

imagen.png

Servicios

Ejemplo de uso de labels

imagen.png

Kubeconfig

Kubeconfig

Descripción

Es un fichero yaml que usa kubectl para obtener la configuración de acceso a los cluster de Kubernetes

La ubicación de este fichero se puede configurar mediante:

Suele redisir en el directorio del usuario actual.

Linux: ~/.kube/config

Windows %USERPROFILE%\.kube\config

Mac ~/.kube/config

 

 

 

Kubeconfig

Que contiene el fichero config

Certificado de conexión creado en el momento de la instalación

Servidor donde se conectará

Nombre 

Usuario

Token de usuario

#Ejemplo de contenido

apiVersion: v1
kind: Config
preferences: {}

#Datos cluster
clusters:
- cluster:
  name: desarrollo
- cluster:
  name: produccion

#Datos usuarios
users:
- name: usu1
- name: usu2

#Datos contextos
contexts:
- context:
  name: desa
- context:
  name: desa1
- context:
  name: prod1

Clúster

Usuario

Contextos

Kubeconfig

Comandos interesantes

DECLARATIVO

apiVersion: v1
clusters:
- cluster:
server: http://localhost:8080
name: local-server
contexts:
- context:
cluster: local-server
namespace: the-right-prefix
user: myself
name: default-context
current-context: default-context
kind: Config
preferences: {}
users:
- name: myself
user:
password: secret
username: admin

COMANDOS DE CONFIGURACIÓN

kubectl config set-credentials myself  --username=admin --password=pass

kubectl config set-cluster local-server --server?http://localhost:8080

kubectl config set-context default-context --cluster=local-server --user=myself

kubectl use-context default-context

kubectl config set contexts.default-context.namespace the-right-prefix

kubectl config view


ConfigMaps / Secrets

ConfigMaps / Secrets

ConfigMaps

Objeto de la api de kubernetes para almacenar información no confidencial en parejas clave-valor

Permite descoplar información específica del despliegue de la máquina.

Los pods pueden utilizar los configMaps como:

No pueden almacenar más de 1MB.

 

 

ConfigMaps / Secrets

Secrets

Objeto de la Api de Kubernetes que contienen una pequeña cantidad de información sensible. Passwords, tokens i/o llaves.

Casos de uso:

Los valores de todas las claves del campo data han de estar ofuscados en base64, se puede evitar usando el campo stringDAta, que acepta valores arbitrarios.

TIPOS DE SECRETOS

 

 

Volums

Volums

Volums - PV - PVC

Los ephemeral volumes no nos aseguran la persistencia de los datos en caso de eliminar el  POD, necesitaremos un mecanismo para definir volumenes persistentes.

Los pods en kubernetes son objetos efímeros.

PV

PersistenVolume

Un volum persistent representa una porción de almacenamiento disponible para los pods, se trata de un recurso más del cluster.

Se pueden crear de dos maneres:

Modos de acceso a un PV

 

PVC

PersistentVolumeClaim

Se trata de una petición de un volumen por un usuario de clúster. El PVC hace referencia al PV.

Si el PV no existe, el aprovisionamiento se hará dinamicamente a partir del StorageClass. 

Los PODS hacen referencia al PVC

 

imagen.png

Volums

CSI

Container Storage Interface (CSI)

Extensión de k8s que simplifica la gestión del almacenamiento, es un estándar que permite exponer almacenamiento de todo tipo a los workloads de kubernetes.

aws, google cloud, etc.

imagen.png

Enlace para ver los drivers disponibles

https://kubernetes-csi.github.io/docs/drivers.html

Se utilizan dos cláusulas para su montaje:

  1. volumeMounts: Le indicamos donde montaremos dentro del POD
  2. volumes: Para indicarle los volúmenes que vamos a utilizar

Tipos de volumes que soporta:

TODO

Anotar apunts snapshots