Ja saps què fa Kubernetes, com està construït per dins i què significa cada terme del vocabulari. Tot això ha estat teoria necessària, però Kubernetes no s'aprèn llegint: s'aprèn trencant coses en un clúster propi. Aquesta lliçó té dues parts. Primer, un panorama honest de les opcions reals per aconseguir un clúster —local, autogestionat o gestionat al núvol— amb criteris per triar en un projecte professional. I després, la guia pràctica pas a pas per muntar el clúster de pràctiques que faràs servir durant els dotze mòduls del curs, on desplegarem la plataforma Rutas Norte. En acabar tindràs un entorn funcional, sabràs aturar-lo, reprendre'l i destruir-lo sense por, i coneixeràs les causes de les fallades d'arrencada més habituals.

Contingut

  1. Les tres vies per aconseguir un clúster
  2. El clúster de pràctiques del curs: requisits
  3. Instal·lació de minikube i del driver
  4. Arrencada del clúster amb recursos suficients
  5. Addons necessaris per al curs
  6. Verificació del clúster
  7. Cicle de vida: aturar, reprendre, destruir
  8. Alternativa amb kind i clúster multinode
  9. Resolució de fallades d'arrencada habituals

  1. Les tres vies per aconseguir un clúster

Via Eines Qui opera el pla de control Cost Quan triar-la
Local minikube, kind, k3d, Docker Desktop Tu, però és rebutjable Només la teva màquina Aprendre, desenvolupar, provar manifests i CI
Autogestionada kubeadm, k3s, Rancher, distribucions de proveïdor Tu, de debò: pedaços, certificats, etcd, còpies Servidors + persones Centre de dades propi, requisits legals d'ubicació de la dada, control total
Gestionada al núvol EKS (AWS), AKS (Azure), GKE (Google) El proveïdor Quota de pla de control + nodes La majoria d'empreses en producció

Criteris pràctics per decidir:

  • Estàs aprenent o desenvolupant? Local. Sense discussió: és gratuït, ràpid de recrear i no t'exposa.
  • Tens un equip de plataforma amb guàrdies 24×7? Si la resposta és no, evita autogestionar producció. Mantenir etcd, rotar certificats i actualitzar tres vegades l'any no és una feina petita.
  • Hi ha restriccions de sobirania de la dada o maquinari especial? Autogestionat, amb kubeadm o una distribució comercial.
  • Producció normal d'una empresa normal? Gestionat. Rutas Norte acabarà aquí: el pla de control és un problema del proveïdor i l'equip es concentra en la plataforma.

Cada via té la seva lliçó pròpia més endavant: Minikube i Entorns Locals amb kind, Kubeadm i Kubernetes Gestionat: EKS, AKS i GKE. Aquí només muntem el necessari per tenir entorn de treball.

Per què minikube per a aquest curs

Triem minikube com a opció principal perquè porta de sèrie, mitjançant addons, dues coses que necessitarem molt: un Ingress Controller (mòdul 4) i un aprovisionador d'emmagatzematge dinàmic (mòdul 5). Instal·lar-les a mà en altres eines és feina extra que no aporta aprenentatge en aquest punt. Donem també la recepta equivalent amb kind, que és més lleuger i permet clústers multinode amb facilitat.

  1. El clúster de pràctiques del curs: requisits

Rutas Norte acabarà amb sis components desplegats alhora més els complements d'observabilitat, així que convé no quedar-se curt de recursos.

Recurs Mínim Recomanat per a tot el curs
CPU 2 nuclis 4 nuclis
Memòria RAM 4 GiB lliures 8 GiB lliures (16 GiB a la màquina)
Disc 20 GiB lliures 40 GiB lliures
Sistema operatiu Linux, macOS o Windows 10/11 amb WSL2 Linux o macOS
Virtualització Docker, o hipervisor (KVM, HyperKit, Hyper-V) Docker com a driver
Xarxa Accés a internet per descarregar imatges

També necessites kubectl, la instal·lació i l'ús del qual es cobreixen en detall a la lliçó següent, La CLI de Kubernetes: kubectl. Si encara no el tens, minikube pot executar-lo per tu amb minikube kubectl -- <ordre>, encara que el normal és instal·lar-lo a part.

  1. Instal·lació de minikube i del driver

3.1. El driver

minikube crea el clúster dins d'alguna cosa: un contenidor o una màquina virtual. Aquest "alguna cosa" és el driver.

Driver Plataformes Avantatges Inconvenients
docker (recomanat) Linux, macOS, Windows Ràpid, sense hipervisor, arrencada en segons El node és un contenidor: menys aïllat
kvm2 Linux Aïllament real de VM Requereix KVM i permisos
hyperkit / vfkit macOS VM lleugera Menys usat avui
hyperv Windows Pro/Enterprise Integrat al sistema Requereix edició Pro
none Linux Instal·la sobre la mateixa màquina Modifica el teu sistema; només per a servidors dedicats

Farem servir docker. Comprova que el tens i que el teu usuari el pot fer servir sense sudo:

docker version --format '{{.Server.Version}}'
docker run --rm hello-world

Si la segona ordre falla amb permission denied, afegeix el teu usuari al grup docker i torna a iniciar sessió:

sudo usermod -aG docker $USER && newgrp docker

3.2. Instal·lar minikube

Linux (x86_64):

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
rm minikube-linux-amd64

macOS (amb Homebrew):

brew install minikube

Windows (amb winget, a PowerShell):

winget install Kubernetes.minikube

Verifica la instal·lació:

minikube version
minikube version: v1.33.1
commit: 5883c09216182566a63dff4c326a6fc9ed2982ff

  1. Arrencada del clúster amb recursos suficients

Aquesta és l'ordre que defineix el teu entorn de treball per a tot el curs:

minikube start \
  --profile=rutas-norte \
  --driver=docker \
  --kubernetes-version=v1.30.0 \
  --cpus=4 \
  --memory=8192 \
  --disk-size=40g

Què fa cada opció, i per què:

Opció Significat Per què així
--profile=rutas-norte Nom del clúster i del context Permet tenir diversos clústers independents a la mateixa màquina i no xocar amb altres feines
--driver=docker On es crea el node Ràpid i sense hipervisor
--kubernetes-version=v1.30.0 Versió fixada El curs fa servir 1.30+; fixar-la evita que un minikube start futur canviï el comportament
--cpus=4 Nuclis assignats Suficient per als sis components més Prometheus del mòdul 7
--memory=8192 MiB de RAM Per sota de 4096 començaràs a veure pods expulsats
--disk-size=40g Disc del node Les imatges i els volums persistents ocupen

Sortida esperada (abreujada):

😄  [rutas-norte] minikube v1.33.1 on Ubuntu 24.04
✨  Using the docker driver based on user configuration
👍  Starting "rutas-norte" primary control-plane node in "rutas-norte" cluster
🚜  Pulling base image ...
🔥  Creating docker container (CPUs=4, Memory=8192MB) ...
🐳  Preparing Kubernetes v1.30.0 on Docker 26.1.1 ...
🔎  Verifying Kubernetes components...
🌟  Enabled addons: default-storageclass, storage-provisioner
🏄  Done! kubectl is now configured to use "rutas-norte" cluster and "default" namespace by default

Dos detalls importants d'aquesta sortida:

  • L'última línia indica que minikube ha modificat el teu kubeconfig i ha creat i activat un context anomenat rutas-norte. Això és el que fa que kubectl parli amb aquest clúster.
  • Ja s'han habilitat dos addons per defecte: default-storageclass i storage-provisioner. Són els que ens permetran demanar volums persistents al mòdul 5 sense infraestructura real.

Si la teva màquina té menys recursos, arrenca amb --cpus=2 --memory=4096 i tingues-ho present: al mòdul 7 hauràs d'apagar components per fer lloc.

  1. Addons necessaris per al curs

Els addons són components preempaquetats que minikube instal·la al clúster. Habilita aquests tres des d'ara:

minikube addons enable ingress --profile=rutas-norte
minikube addons enable metrics-server --profile=rutas-norte
minikube addons list --profile=rutas-norte
Addon Què instal·la Per a què el necessitarem
ingress Un Ingress Controller basat en NGINX Publicar www.rutasnorte.example i api.rutasnorte.example (mòdul 4)
metrics-server Recol·lector de mètriques de CPU i memòria kubectl top i l'autoescalat horitzontal (mòduls 7 i 9)
storage-provisioner Aprovisionador dinàmic de volums El disc de postgres-reserves (mòdul 5). Ja actiu per defecte
dashboard (opcional) Interfície web del clúster Còmode per explorar; s'obre amb minikube dashboard

Comprova que el controlador d'Ingress ha arrencat abans de continuar:

kubectl get pods -n ingress-nginx
NAME                                       READY   STATUS      RESTARTS   AGE
ingress-nginx-admission-create-9k2xq       0/1     Completed   0          62s
ingress-nginx-admission-patch-hn4vp        0/1     Completed   0          62s
ingress-nginx-controller-768f948f8f-7lxjp  1/1     Running     0          62s

Els dos pods en Completed no són cap error: són Jobs d'instal·lació que ja han acabat la seva feina (recorda de la lliçó anterior que un Job acaba, no es queda corrent). L'important és el tercer, en Running i 1/1.

  1. Verificació del clúster

Tres comprovacions que convé fer sempre després de crear un clúster.

1. El node està llest:

kubectl get nodes -o wide
NAME          STATUS   ROLES           AGE   VERSION   INTERNAL-IP    OS-IMAGE             CONTAINER-RUNTIME
rutas-norte   Ready    control-plane   3m    v1.30.0   192.168.49.2   Ubuntu 22.04.4 LTS   docker://26.1.1

El rellevant: STATUS: Ready (el kubelet reporta i el plugin de xarxa funciona) i ROLES: control-plane (a minikube el mateix node fa de pla de control i de treballador, cosa que en producció no passaria mai).

2. Els components del sistema estan sans:

kubectl get pods -A
NAMESPACE       NAME                                  READY   STATUS    RESTARTS   AGE
ingress-nginx   ingress-nginx-controller-768f948f8f   1/1     Running   0          2m
kube-system     coredns-7db6d8ff4d-4rzmt              1/1     Running   0          3m
kube-system     etcd-rutas-norte                      1/1     Running   0          3m
kube-system     kube-apiserver-rutas-norte            1/1     Running   0          3m
kube-system     kube-controller-manager-rutas-norte   1/1     Running   0          3m
kube-system     kube-proxy-9wgbn                      1/1     Running   0          3m
kube-system     kube-scheduler-rutas-norte            1/1     Running   0          3m
kube-system     metrics-server-7d9f8c6b5-x2klp        1/1     Running   0          1m
kube-system     storage-provisioner                   1/1     Running   0          3m

Reconeix aquesta llista: són exactament els components de la lliçó Arquitectura de Kubernetes, ara corrent de debò a la teva màquina. Fixa't que a minikube el pla de control s'executa com a pods dins del mateix clúster (static pods gestionats pel kubelet), i que apareix coredns, el servidor DNS intern que estudiarem al mòdul 4.

3. L'API respon i saps a quin clúster parles:

kubectl cluster-info
kubectl config current-context
Kubernetes control plane is running at https://192.168.49.2:8443
CoreDNS is running at https://192.168.49.2:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
rutas-norte

Si les tres comprovacions passen, tens un clúster operatiu.

  1. Cicle de vida: aturar, reprendre, destruir

Un clúster local consumeix recursos encara que no el facis servir. Aquestes són les quatre ordres que necessites:

# Aturar el clúster conservant TOT el seu estat (objectes, imatges, volums)
minikube stop --profile=rutas-norte

# Reprendre'l tal com estava, amb la mateixa configuració
minikube start --profile=rutas-norte

# Veure l'estat actual
minikube status --profile=rutas-norte

# Destruir-lo del tot: es perd tot el que s'ha desplegat
minikube delete --profile=rutas-norte
Ordre Què conserva Quan fer-la servir
stop Tot: objectes, dades de volums, imatges descarregades En acabar la sessió d'estudi
start (sobre un perfil existent) Tot l'anterior En reprendre el curs
delete Res d'aquell perfil Quan el clúster està trencat o en acabar el curs

Consell de mètode: que minikube delete no et faci por és precisament l'objectiu. Si tots els teus manifests estan versionats al directori k8s/ del repositori —com farem des de la lliçó 01-07— recrear el clúster i tornar-los a aplicar t'hauria de costar cinc minuts. Si et fa por esborrar-lo, és senyal que hi ha estat important que no és a Git.

També et resultarà útil:

# Obrir un shell dins del node (per inspeccionar el runtime)
minikube ssh --profile=rutas-norte

# Obtenir la IP del node, que necessitarem per a l'Ingress del mòdul 4
minikube ip --profile=rutas-norte
192.168.49.2

  1. Alternativa amb kind i clúster multinode

kind (Kubernetes IN Docker) crea cada node com un contenidor Docker. És més lleuger que minikube i el seu gran avantatge és la facilitat per muntar un clúster multinode, cosa que t'anirà bé quan estudiem planificació i afinitat (mòdul 6). El seu desavantatge: no porta addons, així que Ingress i emmagatzematge requereixen passos extra.

Instal·lació a Linux:

curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.23.0/kind-linux-amd64
sudo install ./kind /usr/local/bin/kind && rm ./kind
kind version

Fitxer de configuració amb un node de control i dos treballadors, preparat a més per a Ingress:

# k8s/entorn-local/kind-rutas-norte.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: rutas-norte
nodes:
  - role: control-plane
    # Etiqueta que l'Ingress Controller de kind espera trobar
    kubeadmConfigPatches:
      - |
        kind: InitConfiguration
        nodeRegistration:
          kubeletExtraArgs:
            node-labels: "ingress-ready=true"
    # Publiquem el 80 i el 443 del node a la màquina amfitriona
    extraPortMappings:
      - containerPort: 80
        hostPort: 80
        protocol: TCP
      - containerPort: 443
        hostPort: 443
        protocol: TCP
  - role: worker
    labels:
      zona: nord
  - role: worker
    labels:
      zona: sud

Explicació de les parts que importen:

  • nodes: cada entrada és un contenidor Docker que actuarà com a node. Aquí en tindrem tres.
  • extraPortMappings: sense això, el port 80 del clúster no seria accessible des del teu navegador. És l'equivalent al minikube tunnel.
  • labels als workers: etiquetes de node que farem servir per practicar afinitat i antiafinitat al mòdul 6, simulant dues zones de disponibilitat.

Creació i verificació:

kind create cluster --config k8s/entorn-local/kind-rutas-norte.yaml
kubectl get nodes
NAME                        STATUS   ROLES           AGE   VERSION
rutas-norte-control-plane   Ready    control-plane   75s   v1.30.0
rutas-norte-worker          Ready    <none>          52s   v1.30.0
rutas-norte-worker2         Ready    <none>          52s   v1.30.0

Instal·lar l'Ingress Controller (kind no el porta) i esborrar el clúster quan ja no calgui:

kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml
kind delete cluster --name rutas-norte

Què triar: si dubtes, minikube. Fes servir kind quan necessitis diversos nodes o quan muntis Kubernetes dins d'una canalització d'integració contínua, on la seva rapidesa de creació és decisiva.

  1. Resolució de fallades d'arrencada habituals

Símptoma Causa probable Solució
Exiting due to RSRC_INSUFFICIENT_CORES Has demanat més CPU de la disponible Baixa --cpus, o amplia els recursos de Docker Desktop a Ajustos → Resources
docker: permission denied while trying to connect to the Docker daemon socket El teu usuari no és al grup docker sudo usermod -aG docker $USER && newgrp docker
Unable to pick a default driver No hi ha Docker ni hipervisor disponible Instal·la Docker i arrenca el seu servei; després --driver=docker
L'arrencada es queda a Pulling base image Xarxa lenta, proxy corporatiu o límit de descàrregues Configura HTTP_PROXY/HTTPS_PROXY, o reintenta; la imatge base ronda 1 GB
Node en NotReady de manera permanent Plugin de xarxa no llest o manca de memòria kubectl describe node i revisa les condicions; se sol resoldre amb minikube delete i tornar a crear
Pods en ImagePullBackOff Imatge inexistent, etiqueta mal escrita o registre privat sense credencials kubectl describe pod i llegeix els esdeveniments; verifica el nom exacte de la imatge
Pods del sistema en CrashLoopBackOff després de suspendre el portàtil Desfasament de rellotge entre l'amfitrió i el node, que invalida els certificats minikube stop && minikube start sobre el mateix perfil
kubectl respon connection refused El clúster està aturat o el context apunta a un altre lloc minikube status i kubectl config use-context rutas-norte
The connection to the server localhost:8080 was refused No hi ha kubeconfig: kubectl fa servir el valor per defecte Arrenca minikube, o exporta KUBECONFIG al fitxer correcte
S'acaba el disc a mig curs Imatges acumulades minikube ssh -- docker system prune -a, o recrea el clúster amb --disk-size més gran

Ordres de diagnòstic de propòsit general quan alguna cosa va malament a l'arrencada:

minikube status --profile=rutas-norte
minikube logs --profile=rutas-norte | tail -50
kubectl get events -A --sort-by=.metadata.creationTimestamp | tail -20

La tercera és especialment valuosa i la farem servir molt: els esdeveniments són el diari del clúster i gairebé sempre contenen l'explicació en text pla de per què alguna cosa no ha funcionat.

Errors Comuns i Consells

  • Arrencar amb els valors per defecte (2 CPU, 2 GiB). Funciona per als primers mòduls i es queda curt tan bon punt hi afegeixis observabilitat. És millor dimensionar bé des del principi que recrear el clúster a mig curs.
  • No fer servir --profile. Si treballes amb diversos clústers locals, el perfil per defecte es converteix en una font de confusió: acabes aplicant manifests al clúster equivocat. Anomenar el perfil rutas-norte deixa sempre clar on ets.
  • Canviar la versió de Kubernetes entre sessions. Si un dia arrenques amb 1.30 i un altre sense fixar versió, canvien comportaments i APIs. Fixa la versió a l'ordre i anota-la al repositori.
  • Confondre "el clúster ha arrencat" amb "el clúster està llest". minikube start retorna abans que els addons estiguin operatius. Comprova sempre amb kubectl get pods -A que no hi ha res en Pending o ContainerCreating.
  • Esperar que un Service de tipus LoadBalancer obtingui IP externa. En local no hi ha cloud-controller-manager (ho vam veure a 01-02): es queda en <pending>. Es resol amb minikube tunnel, i ho tractarem al mòdul 4.
  • Deixar el clúster corrent permanentment. Consumeix CPU i bateria. minikube stop en acabar la sessió conserva absolutament tot.
  • Consell: desa la teva ordre de creació de clúster al mateix repositori (per exemple, a k8s/entorn-local/README o un script crear-cluster.sh). Forma part de la documentació del projecte tant com els manifests.

Exercicis

Exercici 1: Crear i verificar el teu clúster

Munta el clúster de pràctiques amb el perfil rutas-norte, 4 CPU, 8 GiB i Kubernetes 1.30, habilita els addons ingress i metrics-server, i respon:

  1. Quants nodes té i quin rol tenen?
  2. Quants pods hi ha al namespace kube-system i quins es corresponen amb components del pla de control que vas estudiar a la lliçó 01-02?
  3. Quina és la IP del node?
  4. Quin context de kubectl està actiu?

Exercici 2: Cicle de vida i persistència de l'estat

Crea el namespace de desenvolupament del projecte, atura el clúster, reprèn-lo i comprova si el namespace continua existint:

kubectl create namespace rutas-norte-dev
minikube stop --profile=rutas-norte
minikube start --profile=rutas-norte
kubectl get namespaces

Explica per què el resultat és el que és, esmentant on es desa aquest objecte. Després, indica quina ordre faria desaparèixer aquest namespace juntament amb tota la resta.

Exercici 3: Clúster multinode amb kind

Crea amb kind un clúster anomenat rutas-norte-multi amb un node de control i dos treballadors etiquetats com a zona: nord i zona: sud. Comprova que els tres nodes estan Ready i mostra únicament els nodes de la zona nord. Explica en dues línies per què aquest clúster et serà útil al mòdul 6 i per què no el fem servir com a entorn principal del curs.

Solucions

Solució 1

minikube start --profile=rutas-norte --driver=docker \
  --kubernetes-version=v1.30.0 --cpus=4 --memory=8192 --disk-size=40g
minikube addons enable ingress --profile=rutas-norte
minikube addons enable metrics-server --profile=rutas-norte
  1. Un sol node, amb rol control-plane. A minikube aquest mateix node executa també les càrregues d'usuari, cosa que en producció no es fa: el pla de control es reserva mitjançant taints.
  2. Al voltant de vuit pods. Es corresponen amb l'arquitectura: etcd, kube-apiserver, kube-scheduler, kube-controller-manager (pla de control), kube-proxy (node), més coredns (DNS intern), storage-provisioner i metrics-server. No apareix cloud-controller-manager perquè no hi ha proveïdor de núvol.
  3. minikube ip --profile=rutas-norte → típicament 192.168.49.2.
  4. kubectl config current-contextrutas-norte.

Solució 2

El namespace continua existint després de stop i start. La raó és que stop no destrueix res: apaga el contenidor o la VM del node conservant-ne el disc, i en aquest disc hi ha etcd, que és on viu l'objecte Namespace. En reprendre, l'apiserver torna a llegir de la mateixa etcd i tot l'estat declarat reapareix.

L'ordre que sí que ho destruiria tot és minikube delete --profile=rutas-norte, que elimina el node i el seu disc, etcd inclosa. Per això els manifests han de viure a Git: recrear el clúster és aleshores un tràmit.

Solució 3

kind create cluster --config k8s/entorn-local/kind-rutas-norte.yaml --name rutas-norte-multi
kubectl get nodes --show-labels
kubectl get nodes -l zona=nord
NAME                              STATUS   ROLES    AGE   VERSION
rutas-norte-multi-worker          Ready    <none>   90s   v1.30.0

Serà útil al mòdul 6 perquè l'afinitat, l'antiafinitat, els taints i la dispersió per topologia només es poden practicar de debò amb diversos nodes: en un clúster d'un sol node el scheduler no té cap decisió a prendre. No el fem servir com a entorn principal perquè kind no inclou addons: caldria instal·lar a mà l'Ingress Controller i un aprovisionador d'emmagatzematge, feina que en aquest punt del curs distreu de l'objectiu.

Conclusió

Ja tens un clúster de Kubernetes funcionant a la teva màquina, amb el perfil rutas-norte, la versió 1.30 fixada, recursos suficients per a tot el curs i els addons d'Ingress, mètriques i emmagatzematge dinàmic habilitats. Has vist també el panorama complet d'opcions —local, autogestionat amb kubeadm, gestionat al núvol— i els criteris per triar-ne una o una altra en un projecte real, a més d'una alternativa multinode amb kind per quan arribem a la planificació. I, sobretot, saps aturar-lo, reprendre'l i destruir-lo sense por, perquè la veritat operativa del curs és que el clúster és reemplaçable i els manifests no.

Tens l'entorn, però tot just has fet servir l'eina amb què hi parlaràs. A la lliçó següent, La CLI de Kubernetes: kubectl, dominarem kubectl a fons: el fitxer kubeconfig i els contextos, els verbs que faràs servir cada dia, els formats de sortida, la selecció per etiquetes i els trucs de productivitat que marquen la diferència entre barallar-se amb el clúster i treballar amb desimboltura.

Curs de Kubernetes

Mòdul 1: Introducció a Kubernetes

Mòdul 2: Components Principals de Kubernetes

Mòdul 3: Gestió de Configuració i Secrets

Mòdul 4: Xarxes a Kubernetes

Mòdul 5: Emmagatzematge a Kubernetes

Mòdul 6: Conceptes Avançats de Kubernetes

Mòdul 7: Monitoratge i Registre

Mòdul 8: Seguretat a Kubernetes

Mòdul 9: Escalat i Rendiment

Mòdul 10: Ecosistema i Eines de Kubernetes

Mòdul 11: Estudis de Cas i Aplicacions del Món Real

Mòdul 12: Preparació per a la Certificació de Kubernetes

© Copyright 2026. Tots els drets reservats