bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


introduccio_kubernetes_kind_podman

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

introduccio_kubernetes_kind_podman [2026/06/07 12:21] (actual)
david_garcia creat
Línia 1: Línia 1:
 +====== Introducció al desplegament i escalat de serveis multi-node amb Kind i Podman ======
  
 +En aquesta activitat crearem un centre de dades de [[https://kubernetes.io/|Kubernetes]] simulat amb tres nodes de [[https://podman.io/|Podman]], dins d'un contenidor [[https://canonical.com/lxd|LXD]]. Hi desplegarem un servei web, i l'escalarem dinàmicament per a que sigui capaç de suportar una càrrega de tràfic web simulada.
 +
 +{{tag> #FpInfor #Asix #AsixMp08 #Ciber #Ceti #CiberMp03 #CetiMp03 }}
 +
 +====== Requisits previs ======
 +
 +Per a dur a terme l'activitat necessitarem:
 +
 +  * Tenir una instal·lació de l'eina [[https://canonical.com/lxd|LXD]] a la nostra màquina.
 +  * Un compte a [[https://www.docker.com/|Docker]].
 +
 +====== Creació i configuració del contenidor LXD ======
 +
 +  - Crearem i executarem el contenidor. Farem servir una imatge Ubuntu 24.04.<code>
 +lxc launch ubuntu:24.04 asix-k8s-lab -c security.nesting=true -c security.privileged=true
 +</code> Els //flags// **security-nesting** i **security-privileged** permeten al contenidor LXD crear contenidors en niu.
 +  - Configurem l'usuari per defecte **ubuntu**, afegint-li una contrasenya. A continuació, iniciem sessió amb aquest usuari.<code>
 +lxc shell asix-k8s-lab
 +passwd ubuntu
 +exit
 +lxc exec asix-k8s-lab login
 +</code>
 +  - Per a treballar amb Kubernetes farem servir [[https://kind.sigs.k8s.io/|Kind]]. Actualitzem el sistema i hi instal·lem **podman**, **kubectl** i **kind**.<code>
 +sudo apt update && sudo apt upgrade -y
 +sudo apt install podman -y
 +sudo curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
 +sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
 +sudo curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.32.0/kind-linux-amd64
 +sudo chmod +x ./kind
 +sudo mv ./kind /usr/local/bin/kind
 +</code>.
 +  - Iniciem sessió a **docker.io** a **podman**.<code>
 +exit
 +lxc config set asix-k8s-lab raw.lxc "lxc.apparmor.profile = unconfined"
 +lxc restart asix-k8s-lab
 +lxc exec asix-k8s-lab login
 +
 +sudo nano /etc/containers/registries.conf
 +</code><file bash /etc/containers/registries.conf>
 +# Registres que Podman farà servir quan s'aportin noms curts com "nginx"
 +unqualified-search-registries = ["docker.io"]
 +
 +# Comportament amb noms amb ambigüitat.
 +short-name-mode = "permissive"
 +</file><code>
 +podman login docker.io
 +</code>
 +  - Creem el //cluster// multi-node amb **kind**. <code>
 +mkdir cluster
 +cd cluster
 +
 +cat <<EOF > kind-config.yaml
 +kind: Cluster
 +apiVersion: kind.x-k8s.io/v1alpha4
 +nodes:
 +- role: control-plane
 +- role: worker
 +- role: worker
 +EOF
 +
 +sudo mkdir -p /dev/mapper
 +
 +export KIND_EXPERIMENTAL_PROVIDER=podman
 +kind create cluster --config kind-config.yaml --name asix-cluster
 +</code>
 +  - Verifiquem que el cluster ha estat creat correctament i el visualitzem a podman. <code>
 +podman ps
 +</code> Podem veure com **kind** ha creat un controlador i dos treballadors. Visualitzem-ho també des de **kubernetes**: <code>
 +kubectl get nodes
 +</code>
 +
 +====== Desplegament d'un servei web al nostre cluster ======
 +
 +Ara utilitzarem comandes de **kubernetes** per a desplegar un manifest d'infraestructura.
 +
 +<code>
 +# Escrivim un manifest de desplegament configurant una rèplica de Nginx
 +cat <<EOF > nginx-deployment.yaml
 +apiVersion: apps/v1
 +kind: Deployment
 +metadata:
 +  name: asix-web-server
 +spec:
 +  replicas: 1
 +  selector:
 +    matchLabels:
 +      app: web
 +  template:
 +    metadata:
 +      labels:
 +        app: web
 +    spec:
 +      containers:
 +      - name: nginx
 +        image: docker.io/library/nginx:latest
 +        ports:
 +        - containerPort: 80
 +EOF
 +
 +# Li diem al cluster que implementi el fitxer d'arquitectura
 +kubectl apply -f nginx-deployment.yaml
 +</code>
 +
 +Fixeu-vos en que hem utilitzat una imatge de **docker.io** de Nginx per a fer el nostre desplegament. Aquesta és la gran avantatge d'utilitzar contenidors. Comprovem que la comanda ha funcionat:
 +<code>
 +kubectl get pods -o wide
 +</code>
 +
 +====== Escalem el nostre servei web ======
 +
 +Imaginem, per exemple, que el servidor web experimenta una quantitat de tràfic enorme perquè s'hi ha publicat una pàgina nova extremadament popular. Un sol //pod// no dona a l'abast. Enlloc d'haver d'iniciar una màquina virtual sencera o una màquina física, i desplegar còpies del web per a alleugerir el tràfic, podem escalar la infraestructura de contenidors instantàniament. Executem:
 +<code>
 +kubectl scale deployment asix-web-server --replicas=5
 +
 +kubectl get pods -o wide
 +</code>
 +
 +Com podeu veure, hem escalat el sistema a un total de cinc instàncies del servei web de forma **instantània**, aconseguint d'aquesta manera alleugerir la càrrega entre els cinc serveis. Fixeu-vos en la columna NODE: **kubernetes** automàticament equilibra la càrrega dels cinc //pods// entre els treballadors per a optimitzar el rendiment del sistema i assegurar alta disponibilitat. Si un node s'apaga o perd la connexió, el cluster transferirà la càrrega als treballadors que segueixin en línia.
 +
 +====== Eliminació dels nodes ======
 +
 +Per acabar, eliminarem els nodes que hem creat a aquesta activitat:
 +<code>
 +kind delete cluster --name asix-cluster
 +</code>
introduccio_kubernetes_kind_podman.txt · Darrera modificació: 2026/06/07 12:21 per david_garcia