From fd2defa6fda37b1863c490ab87006bfae8445c50 Mon Sep 17 00:00:00 2001 From: pablosanchezpaz Date: Wed, 1 Mar 2023 08:52:29 +0000 Subject: [PATCH 1/4] extend formation with tolerations taints and affintys --- .../07_taints_and_tolerations.md | 148 ++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 cursos/kubernetes/02_kubernetes/07_taints_and_tolerations.md diff --git a/cursos/kubernetes/02_kubernetes/07_taints_and_tolerations.md b/cursos/kubernetes/02_kubernetes/07_taints_and_tolerations.md new file mode 100644 index 00000000..cfb1bb98 --- /dev/null +++ b/cursos/kubernetes/02_kubernetes/07_taints_and_tolerations.md @@ -0,0 +1,148 @@ +# Que son las Taints y las toleratins + +Las [taints y tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) en kubernetes son unas herramientas que te permiten controlar qué pods se pueden desplegar en qué nodos. Las taints son aplicadas a los nodos y las tolerations a los pods. Así, puedes evitar que ciertos pods se ejecuten en nodos que no sean adecuados para ellos, por ejemplo, por cuestiones de rendimiento, seguridad o disponibilidad. + +Ejemplo: + Imagina que tienes una casa con varias habitaciones y quieres que solo tus amigos puedan entrar en tu habitación. Puedes poner un cartel en la puerta que diga “Solo amigos” (eso sería el taint). Entonces, solo las personas que sepan que son tus amigos y que tú les has dado permiso podrán entrar en tu habitación (eso sería la toleration). Las demás personas no podrán entrar porque no tienen la toleration adecuada. + +## Como definir una toleration + +Para definir una tolerancia en un pod, se debe usar el campo tolerations en la especificación del pod. Una tolerancia tiene los siguientes atributos: key, operator, value y effect. La clave y el valor son cadenas arbitrarias que identifican la contaminación(taint). El operador puede ser Equal o Exists. El efecto puede ser NoSchedule, PreferNoSchedule o NoExecute. + +## Como definir una taint + +Para aplicar un taint a un nodo, puedes usar el comando ``` kubectl taint nodes =: ```. Para eliminar un taint de un nodo, puedes usar el mismo comando con un signo menos(-) al final: ```kubectl taint nodes =:-``` + +### Ejemplo toleration: + +``` +apiVersion: v1 +kind: Pod +metadata: + name: dev-pod +spec: + containers: + - name: dev-container + image: nginx + tolerations: + - key: "type" + operator: "Equal" + value: "dev" + effect: "NoSchedule" +``` + + +## Practica de taints: + +Para poder hacer una practica necesitamos un cluster con minimo 3 nodos. +Para esto vamos a utilizar kind. + +``` +kind: Cluster +apiVersion: kind.x-k8s.io/v1alpha4 +#featureGates: +# TaintNodesByCondition: true +nodes: +- role: control-plane + image: kindest/node:v1.26.0 + kubeadmConfigPatches: + - | + kind: InitConfiguration + nodeRegistration: + kubeletExtraArgs: + node-labels: "ingress-ready=true" + node-labels: "master=master" + system-reserved: memory=1000m,cpu="1" + extraPortMappings: + - containerPort: 8080 + hostPort: 8080 + protocol: TCP + - containerPort: 4443 + hostPort: 4443 + protocol: TCP +- role: worker + image: kindest/node:v1.26.0 + kubeadmConfigPatches: + - | + kind: InitConfiguration + nodeRegistration: + kubeletExtraArgs: + node-labels: "ingress-ready=true" + node-labels: "worker=worker" + system-reserved: memory=1000m,cpu="1" +- role: worker + image: kindest/node:v1.26.0 + kubeadmConfigPatches: + - | + kind: InitConfiguration + nodeRegistration: + kubeletExtraArgs: + node-labels: "ingress-ready=true" + node-labels: "worker=worker" + system-reserved: memory=1000m,cpu="1" + +``` + +Ejercicio: + +a) Aplicar taints a un nodo y ver el comportamiento de los pods: + +b) Verificar que la taint se ha aplicado correctamente usando el comando kubectl describe node . + +c) Crear un pod con una toleration que coincida con la taint usando el campo tolerations en el archivo YAML del pod. + +d) Verificar que el pod se ha programado en el nodo con la taint usando el comando kubectl get pods -o wide. + +Repetir los pasos anteriores con diferentes combinaciones de taints y tolerations para ver cómo afectan al comportamiento de los pods y los nodos. + + + +# PodAffinity y NodeAffinity + +Otra forma de controlar en que nodo se van a desplegar los pods es mediante el uso de podAffinity y nodeAffinity. + +[Pod affinity y node affinity](https://kubernetes.io/docs/tasks/configure-pod-container/assign-pods-nodes-using-node-affinity/) son dos conceptos de Kubernetes que permiten asignar pods a nodos según ciertas condiciones. Pod affinity se refiere a la preferencia o requerimiento de que un pod se ejecute en el mismo nodo que otro pod existente. Node affinity se refiere a la preferencia o requerimiento de que un pod se ejecute en un nodo que tenga ciertas etiquetas o atributos. + +Ejemplo de podAffinity: + +``` +affinity: + podAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: name + operator: In + values: + - web-app + topologyKey: kubernetes.io/hostname + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + podAffinityTerm: + labelSelector: + matchExpressions: + - key: type + operator: In + values: + - primary + topologyKey: kubernetes.io/hostname + + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: type + operator: NotIn + values: + - primary + containers: + - name: node-affinity + image: nginx + +``` + +Estas 2 practicas para controlar pods se pueden combinar para formar reglas mas precisas que controlen el funcionamiento de los pods en nodos de kubernetes + + + + From 339ae05ba1f524913b62cd794828dfc545915b26 Mon Sep 17 00:00:00 2001 From: pablosanchezpaz Date: Wed, 1 Mar 2023 08:54:08 +0000 Subject: [PATCH 2/4] Revert "extend formation with tolerations taints and affintys" This reverts commit fd2defa6fda37b1863c490ab87006bfae8445c50. --- .../07_taints_and_tolerations.md | 148 ------------------ 1 file changed, 148 deletions(-) delete mode 100644 cursos/kubernetes/02_kubernetes/07_taints_and_tolerations.md diff --git a/cursos/kubernetes/02_kubernetes/07_taints_and_tolerations.md b/cursos/kubernetes/02_kubernetes/07_taints_and_tolerations.md deleted file mode 100644 index cfb1bb98..00000000 --- a/cursos/kubernetes/02_kubernetes/07_taints_and_tolerations.md +++ /dev/null @@ -1,148 +0,0 @@ -# Que son las Taints y las toleratins - -Las [taints y tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) en kubernetes son unas herramientas que te permiten controlar qué pods se pueden desplegar en qué nodos. Las taints son aplicadas a los nodos y las tolerations a los pods. Así, puedes evitar que ciertos pods se ejecuten en nodos que no sean adecuados para ellos, por ejemplo, por cuestiones de rendimiento, seguridad o disponibilidad. - -Ejemplo: - Imagina que tienes una casa con varias habitaciones y quieres que solo tus amigos puedan entrar en tu habitación. Puedes poner un cartel en la puerta que diga “Solo amigos” (eso sería el taint). Entonces, solo las personas que sepan que son tus amigos y que tú les has dado permiso podrán entrar en tu habitación (eso sería la toleration). Las demás personas no podrán entrar porque no tienen la toleration adecuada. - -## Como definir una toleration - -Para definir una tolerancia en un pod, se debe usar el campo tolerations en la especificación del pod. Una tolerancia tiene los siguientes atributos: key, operator, value y effect. La clave y el valor son cadenas arbitrarias que identifican la contaminación(taint). El operador puede ser Equal o Exists. El efecto puede ser NoSchedule, PreferNoSchedule o NoExecute. - -## Como definir una taint - -Para aplicar un taint a un nodo, puedes usar el comando ``` kubectl taint nodes =: ```. Para eliminar un taint de un nodo, puedes usar el mismo comando con un signo menos(-) al final: ```kubectl taint nodes =:-``` - -### Ejemplo toleration: - -``` -apiVersion: v1 -kind: Pod -metadata: - name: dev-pod -spec: - containers: - - name: dev-container - image: nginx - tolerations: - - key: "type" - operator: "Equal" - value: "dev" - effect: "NoSchedule" -``` - - -## Practica de taints: - -Para poder hacer una practica necesitamos un cluster con minimo 3 nodos. -Para esto vamos a utilizar kind. - -``` -kind: Cluster -apiVersion: kind.x-k8s.io/v1alpha4 -#featureGates: -# TaintNodesByCondition: true -nodes: -- role: control-plane - image: kindest/node:v1.26.0 - kubeadmConfigPatches: - - | - kind: InitConfiguration - nodeRegistration: - kubeletExtraArgs: - node-labels: "ingress-ready=true" - node-labels: "master=master" - system-reserved: memory=1000m,cpu="1" - extraPortMappings: - - containerPort: 8080 - hostPort: 8080 - protocol: TCP - - containerPort: 4443 - hostPort: 4443 - protocol: TCP -- role: worker - image: kindest/node:v1.26.0 - kubeadmConfigPatches: - - | - kind: InitConfiguration - nodeRegistration: - kubeletExtraArgs: - node-labels: "ingress-ready=true" - node-labels: "worker=worker" - system-reserved: memory=1000m,cpu="1" -- role: worker - image: kindest/node:v1.26.0 - kubeadmConfigPatches: - - | - kind: InitConfiguration - nodeRegistration: - kubeletExtraArgs: - node-labels: "ingress-ready=true" - node-labels: "worker=worker" - system-reserved: memory=1000m,cpu="1" - -``` - -Ejercicio: - -a) Aplicar taints a un nodo y ver el comportamiento de los pods: - -b) Verificar que la taint se ha aplicado correctamente usando el comando kubectl describe node . - -c) Crear un pod con una toleration que coincida con la taint usando el campo tolerations en el archivo YAML del pod. - -d) Verificar que el pod se ha programado en el nodo con la taint usando el comando kubectl get pods -o wide. - -Repetir los pasos anteriores con diferentes combinaciones de taints y tolerations para ver cómo afectan al comportamiento de los pods y los nodos. - - - -# PodAffinity y NodeAffinity - -Otra forma de controlar en que nodo se van a desplegar los pods es mediante el uso de podAffinity y nodeAffinity. - -[Pod affinity y node affinity](https://kubernetes.io/docs/tasks/configure-pod-container/assign-pods-nodes-using-node-affinity/) son dos conceptos de Kubernetes que permiten asignar pods a nodos según ciertas condiciones. Pod affinity se refiere a la preferencia o requerimiento de que un pod se ejecute en el mismo nodo que otro pod existente. Node affinity se refiere a la preferencia o requerimiento de que un pod se ejecute en un nodo que tenga ciertas etiquetas o atributos. - -Ejemplo de podAffinity: - -``` -affinity: - podAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - - labelSelector: - matchExpressions: - - key: name - operator: In - values: - - web-app - topologyKey: kubernetes.io/hostname - preferredDuringSchedulingIgnoredDuringExecution: - - weight: 100 - podAffinityTerm: - labelSelector: - matchExpressions: - - key: type - operator: In - values: - - primary - topologyKey: kubernetes.io/hostname - - nodeAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - nodeSelectorTerms: - - matchExpressions: - - key: type - operator: NotIn - values: - - primary - containers: - - name: node-affinity - image: nginx - -``` - -Estas 2 practicas para controlar pods se pueden combinar para formar reglas mas precisas que controlen el funcionamiento de los pods en nodos de kubernetes - - - - From 706a771b38c6a4516d5ef335a532d06509ef7a52 Mon Sep 17 00:00:00 2001 From: pablosanchezpaz Date: Wed, 1 Mar 2023 13:11:00 +0000 Subject: [PATCH 3/4] definicion cluster kubernetes --- .../02_kubernetes/01_que_e_kubernetes.md | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/cursos/kubernetes/02_kubernetes/01_que_e_kubernetes.md b/cursos/kubernetes/02_kubernetes/01_que_e_kubernetes.md index 2d438cc6..1fbb85be 100644 --- a/cursos/kubernetes/02_kubernetes/01_que_e_kubernetes.md +++ b/cursos/kubernetes/02_kubernetes/01_que_e_kubernetes.md @@ -2,6 +2,28 @@ Kubernetes é un framework e unha plataforma de orquestración de contedores que ten como función principal a automatización do despregue, escalado e mantemento de aplicacións en producción que corren nun clúster de nodos ou máquinas. +# Qué é un clúster de kubernetes? + +Un clúster de Kubernetes compóñese dos seguintes componentes principais: + +- Nodo de traballo (Worker Node): É unha máquina virtual ou física que executa aplicacións e cargas de traballo. Cada nodo de traballo é xestionado polo mestre de Kubernetes e é responsable de executar os contedores Docker que conteñen as aplicacións e servizos que se executan no clúster. + +- Mestre de Kubernetes (Kubernetes Master): É o cerebro do clúster de Kubernetes. O mestre de Kubernetes é responsable de xestionar e coordinar os nodos de traballo, programar contedores, monitorizar a saúde do clúster e proporcionar unha API para interactuar co clúster. + +- Kubernetes API Server: É o punto de entrada para todas as solicitudes de API de Kubernetes e é responsable de validar e configurar a API do clúster. + +- Etcd: É unha base de datos distribuída e consistente que almacena o estado do clúster de Kubernetes. + +- Controlador de Kubernetes (Kubernetes Controller): É un componente que se executa no mestre de Kubernetes e é responsable de garantir que o clúster estea no estado desexado. Os controladores de Kubernetes inclúen controladores de replicación, controladores de estado, controladores de demonios, entre outros. + +- Planificador (Kubernetes Scheduler): É un componente que se executa no mestre de Kubernetes e é responsable de asignar as cargas de traballo aos nodos de traballo. O planificador ten en conta factores como os recursos dispoñibles, a capacidade dos nodos e as políticas de tolerancia a fallos ao tomar decisións de programación. + +- Proxy de servizo (Kubernetes Service Proxy): É un componente que se executa en cada nodo de traballo e é responsable de enrutar o tráfico de rede cara aos contedores que executan os servizos da aplicación. + +Todos estes componentes traballan xuntos para xestionar e orquestrar os contedores Docker que conteñen as aplicacións e servizos que se executan no clúster de Kubernetes. + + + Ós creadores de Kubernetes non lles doen prendas en confesar o obxectivo último da súa plataforma: > Mediante Kubernetes queremos posibilitar o tratamento do CPD como se de unha soa máquina se tratase... [Joe Beda, Brendan Burns e Craig McLuckie] From 41efd2b4eafc489805dd48d7380ba7836339c67a Mon Sep 17 00:00:00 2001 From: pablosanchezpaz Date: Wed, 1 Mar 2023 13:16:28 +0000 Subject: [PATCH 4/4] definicion cluster kubernetes esp --- .../es/02_kubernetes/01_que_e_kubernetes.md | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/cursos/kubernetes/es/02_kubernetes/01_que_e_kubernetes.md b/cursos/kubernetes/es/02_kubernetes/01_que_e_kubernetes.md index c06ed8df..5a08d53d 100644 --- a/cursos/kubernetes/es/02_kubernetes/01_que_e_kubernetes.md +++ b/cursos/kubernetes/es/02_kubernetes/01_que_e_kubernetes.md @@ -2,6 +2,26 @@ Kubernetes es un framework y una plataforma de orquestación de contenedores cuya función principal es automatizar la implementación, el escalado y el mantenimiento de aplicaciones en producción que se ejecutan en un clúster de nodos o máquinas. +# ¿Qué es un clúster de kubernetes? + +Un clúster de Kubernetes se compone de los siguientes componentes principales: + +- Nodo de trabajo (Worker Node): Es una máquina virtual o física que ejecuta aplicaciones y cargas de trabajo. Cada nodo de trabajo es administrado por el maestro de Kubernetes y es responsable de ejecutar los contenedores Docker que contienen las aplicaciones y los servicios que se ejecutan en el clúster. + +- Maestro de Kubernetes (Kubernetes Master): Es el cerebro del clúster de Kubernetes. El maestro de Kubernetes es responsable de administrar y coordinar los nodos de trabajo, programar contenedores, monitorizar la salud del clúster y proporcionar una API para interactuar con el clúster. + +- Kubernates API Server: Es el punto de entrada para todas las solicitudes de API de Kubernetes y es responsable de validar y configurar la API del clúster. + +- Etcd: Es una base de datos distribuida y consistente que almacena el estado del clúster de Kubernetes. + +- Controlador de Kubernetes (Kubernetes Controller): Es un componente que se ejecuta en el maestro de Kubernetes y es responsable de garantizar que el clúster esté en el estado deseado. Los controladores de Kubernetes incluyen controladores de replicación, controladores de estado, controladores de demonios, entre otros. + +- Planeador (Kubernetes Scheduler): Es un componente que se ejecuta en el maestro de Kubernetes y es responsable de asignar las cargas de trabajo a los nodos de trabajo. El planeador toma en cuenta factores como los recursos disponibles, la capacidad de los nodos y las políticas de tolerancia a fallos al tomar decisiones de programación. + +- Proxy de servicio (Kubernetes Service Proxy): Es un componente que se ejecuta en cada nodo de trabajo y es responsable de enrutar el tráfico de red hacia los contenedores que ejecutan los servicios de la aplicación. + +Todos estos componentes trabajan juntos para administrar y orquestar los contenedores Docker que contienen las aplicaciones y los servicios que se ejecutan en el clúster de Kubernetes. + Los creadores de Kubernetes no dudan en confesar el objetivo final de su plataforma: > A través de Kubernetes queremos hacer posible tratar el CPD como si fuera una sola máquina... [Joe Beda, Brendan Burns y Craig McLuckie]