Teorica 11 (Containers & Kubernetes) Flashcards
Containers & Kubernetes
Que son los containers
permiten que cada aplicacion se ejecute en un entorno propio separado del resto de las aplicaciones que estan en el SO
Que problemas resuelven los containers
Crean un entorno completo que permite la construccion de un paquete para que luego se pueda ejecutar en otro ambiente (deploy & run)
deploy&run sin tener que preocuparse por las dependencias
Se suele usar Docker
Workflow de containers
por un lado hay un entorno (un docker) donde vos haces el build y generas la imagen del container
Una vez que lo construis lo subis a un registry (para distribuirlo)
Despues el que lo quiera lo baja del registry y lo corre
Dockerfile
lo que define la forma en la que se va a construir la imagen de docker
Nomeclatura - container
Container: proceso y ambiente que utilizan la imagen para ejecutar
Nomeclatura - image registry y container runtime
Container Runtime: el que ejecuta el container
Image Registry: repositorio de imagenes
Nomeclatura - image e imageBuilder
image: paquete que incluye todo lo necesario para ejecutar un proceso
imageBuilder: el que genera la imagen
Image layers de los containers
la imagen se construye por capas
el file system que se crea se llama overlay file system
cada capa tiene como dependencia su capa inferior
Todo lo que se escribe durante la ejecucion va a una Layer efimera que se borra al terminar el container
Para que no se pierda es necesario usar un Volume
ejemplo de image layers
python app 1
custom python libs
python 3.8.15
Ubuntu 22.04
(si cambia unicamente la capa app se bajaria solo esa capa)
cual es el registry mas usado
Docker hub es el mas usado y el default (a donde va a ir a buscar las imagenes)
CGroups
control group
restringen el uso del CPU y memoria
Se genera un CGroup de CPU y otro de memoria por container
Se le asigna una cuota a cada CGroup. El container puede usar como maximo esa cantidad de recursos
Namespaces
Generan un entorno acotado para los procesos que corren en el (osea no deberia ver otros procesos que no sean del container)
Siempre hay un namespace default
tipos de namespaces
○ pid - Se asignan pids distintos dentro del NS
○ user - usuarios propios del NS ( root dentro del
container != root dentro del host )
○ uts - hostname que ve el container
○ ipc - interprocess communication
○ mnt - ve su propio FS que es el overlay
○ net - ve su propio stack de red e interfaces
que son Capabilites en los containers
Son los permisos de bajo nivel que tiene cada usuario
El usuario root tmb tiene capabilities (CAP_SYS_ADMIN o CAP_NET_ADMIN)
Algunas capabilities estan limitadas para usuarios dentro de los containers por motivos de seguridad
seccomp_bpf
Maneras de controlar la system calls que puede ejecutar el proceso
Docker bloquea varias system calls peligrosas ( por
ejemplo reboot )
pivot_root
Cambia el root del filesystem a un subdirectorio del host para ese container (para que el filesystem vea el / en donde esta la imagen)
Kubernetes
“Capitan de barco” en griego
Orquestador de containers
Algo que me administra una gran cantidad de containers de forma bastante automatica
yo tengo por un lado un registry y por otro una cierta configuracion que quiero que tenga un grupo de hosts que corran una serie de containers. Kubernetes en el medio intenta hacer que esta configuracion se respete en el grupo de containers
Funcionalidades principales de kubernetes
Rollback & rollout: Instalar algo nuevo o volver a una version anterior
Service Discovery: Configurar las relaciones entre servicios por nombres (como un dns)
Service Load Balancing: balancear pedidos entre servicios
Storage Orchestration: montar volumenes
Self Healing: reiniciar containers caidos, health checks, etc
Horizontal Scaling: Escala automatica o manual en containers
Manejo de config y secretos: guardar de forma segura la configuracion e info sensible
Conceptos principales de kubernetes
Cluster: deployment completo de ckubernetes
Nodo: donde se corren los pods
Pod: la unidad minima de ejecucion puede tener uno o mas container. Es como un container intermedio
Service: la manera de acceder a los podes que implementan algun servicio particular
Componentes de kubernetes
Api server: Interfaz por la que se ejecutan los comandos sobre el cluster
kubectl: interfaz de configuracion y admin de kubernetes. ejecuta los comandos llamando a la api
Controllers (controller manager, scheduler, kubelet): Ejecutan un loop donde checkean el estado de la config, el estado real del sistema , ejecutan acciones para que converjan
etcd: Base de datos key value con config distribuida redundante
Kubeproxy: manejo del networking del nodo en base a la config de iptables
Definicion de objetos en kubernetes
se definen en archivos Manifest con formato YAML
parametros:
- apiVersion de kubernetes
- kind: tipo de objeto
-metadata
Labels kubernetes
Key Values que identifican, describen y agrupan un grupo de objetos
La idea es que apliquen a muchos objetos
Parte de la metadata
Selectors kubernetes
Se usan los labels para especificar a que objetos aplican los comandos u otros objetos
Replica set
Manejo de replicas en los pods
Su mision es asegurar que siempre exista el numero requerido de pods de cadatipo
Deployment
Construye sobre el ReplicaSet
Permite manejar Updates y Rollbacks
Crea identificadores automáticos con cada update
para los replicaSets y sus Pods
Servicios
Forma de acceder a los pods
Recursos permanentes
Balancea los pedidos entre los pods
IPs estaticas del cluster
Nombres de servicio resuelto por DNS
Blue Green Deployments
Tener en paralelo dos deployments activos con distintos labels
Defino un servicio que apunte a uno u otro
Pueden ser versiones Actual y nueva o variantes que estoy probando
Networking General en kubernetes
Todos los containers dentro de un pod se pueden comunicar libremente
Cualquier pod puede comunicarse con cualquier otro sin NAT
Todos los nodos pueden comunicarse con todos los pods sin NAT y viceversa
La ip en que se ve un Pod es la misma que ven todos los otros Pods
Todos los pods comparten un unico namespace de networking
Se comunican por localhost del namespace que comparten
Para un servicio se asigna una IP fija del cluster independientemente del estado de los pods
Comunicacion entre containers - mismo pod
tiene su propio stack de networking
Se comunican por localhost
El localhost de los containers del pod no ve los otros containers en el mismo nodo, ya q no comparten namespace
Comunicacion entre containers - mismo nodo
cada pod tiene su eth0 con su ip en la red de los pods
los eth0 se conectan al root namespace con una veth en ese namespace
un virtual bridge dentro del root conecta los veth del nodo con los eth0 de cada pod
en resumen, se comunican mediante ips
Comunicacion entre pods - distinto nodo
cada pod sale con su ip y se comunica con cualquier otro pod usando la ip de ese pod
comunicacion entre pods - overlay networking
Red de containers de distintos hosts
encapsulamiento de paquetes (parecido a vpn pero layer 2)
antes de la interfaz de salida (osea antes del eth0 del root namespace) se agrega una interfaz que se encarga de encapsular el trafico saliente del nodo y de rutear hacia la otra interfaz
comunicacion pod - service
como el overlay, antes de la interfaz de salida agregas una interfaz llamada IPTables
IPTables elige un pod al azar de los que estan asociados al servicio y cambia la IP de destino al paquete
trafico externo a un servicio (ingreso)
el load balancer balancea entre nodos y lo deriva a alguno
la IPTables balancea entre pods que tienen el servicio por lo que podria llegar a derivarlo a otro nodo
Istio
agrega una capa de management y observabilidad para kubernetes
kiali
herramienta de visualizacion integrada con istio