Opcions d'impressió

Mida
Compacta · 9 pt Normal · 10,5 pt Gran · 12,5 pt
Els meus apunts
No imprimir-los Incloure'ls a cada paràgraf

El navegador numera les pàgines des del seu propi quadre d'imprimir: activa-ho allà si les vols.

Els requadres grisos només surten si deixes marcada la casella «Gràfics de fons» del quadre d'imprimir.

opos

DevOps, CI/CD, contenidors i Kubernetes

DevOps, CI/CD, contenidors i Kubernetes

Abast decidit per nosaltres: l'enunciat oficial no acota la matèria

Enunciat oficial. DevOps i integració/desplegament continus (CI/CD). Contenidors Docker i orquestració Kubernetes.


1. DevOps

Definició: DevOps és una filosofia, un conjunt de pràctiques culturals, organitzatives i tècniques que uneixen desenvolupament (Dev) i operacions (Ops). La seva finalitat principal és millorar la col·laboració entre els dos equips; reduir el temps de lliurament, retallar costos i pujar la qualitat en són conseqüències, no l'objectiu en si.

El problema que resol: el «mur de la confusió» entre un equip de desenvolupament incentivat pel canvi i un equip d'operacions incentivat per l'estabilitat.

DevOps no és una eina ni un producte: és una manera de treballar que després es materialitza en un flux automatitzat. Els components que sí que en formen part són el repositori de codi, la integració i les proves automàtiques i el desplegament automatitzat; tot allò que només observa el resultat —un quadre de comandament d'indicadors de producció— és útil, però no és una peça del cicle.

1.1 Els tres camins i CALMS

  1. Flux: optimitzar el flux d'esquerra a dreta, de desenvolupament a producció (lots petits, visualització del treball, eliminació de colls d'ampolla).
  2. Retroalimentació: crear cicles de retroalimentació ràpids de dreta a esquerra (proves automàtiques, monitoratge, alertes). Aquest camí és el que exigeix una plataforma d'observabilitat → tema 23.
  3. Aprenentatge continu i experimentació: cultura d'aprenentatge, post-mortems sense culpables, injecció de fallides.

CALMS (Culture, Automation, Lean, Measurement, Sharing) és la llista de comprovació d'adopció: cultura, automatització, eliminació del malbaratament, mesura i compartició.

1.2 Les mètriques DORA

DORA (DevOps Research and Assessment) és el grup de recerca —avui a Google— que publica cada any l'informe State of DevOps. Les seves quatre mètriques clau:

Mètrica Què mesura Eix
Freqüència de desplegament amb quina freqüència s'allibera a producció velocitat
Temps de lliurament del canvi del commit a producció velocitat
Temps de recuperació (MTTR, Mean Time To Restore) quant es triga a recuperar-se d'un desplegament fallit estabilitat
Taxa de fallides dels canvis percentatge de desplegaments que exigeixen intervenció immediata estabilitat

La troballa central de DORA és que no hi ha compromís entre velocitat i estabilitat: els equips d'alt rendiment són millors en totes quatre.

1.3 DevSecOps, SRE i plataforma


2. Integració contínua

Integració contínua (CI, Continuous Integration): pràctica en què els desenvolupadors integren el seu codi al repositori compartit de manera freqüent —diverses vegades al dia— i cada integració es verifica automàticament amb una compilació i una bateria de proves automatitzades.

Per què és essencial: detecta els errors d'integració i el codi conflictiu en minuts en lloc de setmanes, manté la branca principal sempre desplegable, redueix el cost de la correcció (com més tard es detecta un defecte, més car és), dona retroalimentació ràpida i objectiva, i és la base necessària per a qualsevol grau de lliurament o desplegament continus.

Pràctiques associades: control de versions únic per a tot (codi, configuració, infraestructura), compilacions automatitzades i reproduïbles —mateixa entrada, mateix artefacte—, bateria de proves ràpida, arreglar la compilació trencada com a màxima prioritat i branques de vida curta.


3. Lliurament i desplegament continus

Lliurament continu (Continuous Delivery) Desplegament continu (Continuous Deployment)
Què cada canvi que passa el pipeline queda llest per desplegar-se cada canvi que passa el pipeline es desplega a producció
Pas a producció decisió humana (un botó) automàtic, sense intervenció

Les dues comparteixen la sigla CD, i és la confusió que més es pregunta: el que canvia no és el grau d'automatització de les proves, sinó qui prem el botó final.

3.1 El pipeline

El pipeline és la cadena automatitzada que porta un canvi del repositori a producció. És la tècnica que implementa el lliurament continu: sense ell, «llest per desplegar en qualsevol moment» és una declaració d'intencions.

commit → build → proves unitàries → anàlisi estàtica i de seguretat →
empaquetat (imatge) → desplegament a proves → proves d'integració i
d'extrem a extrem → preproducció → aprovació → producció → verificació

Quines proves corren a quina etapa és matèria del tema de proves de programari (→ tema 49); aquí importa l'ordre: com més barata i ràpida és una prova, més aviat corre.

Qualitat i seguretat al pipeline: SAST (Static Application Security Testing, anàlisi estàtica del codi), SCA (Software Composition Analysis, dependències de tercers), DAST (Dynamic Application Security Testing, sobre l'aplicació en execució), escaneig de les imatges de contenidor, detecció de secrets i signatura d'artefactes → tema 46.

Artefactes i registre: el pipeline construeix una sola vegada l'artefacte —un fitxer empaquetat o una imatge de contenidor—, el desa en un repositori d'artefactes o registre d'imatges versionat i és aquest mateix artefacte el que puja per tots els entorns. Recompilar per a cada entorn trenca la garantia de que allò provat és allò desplegat.

Eines: Jenkins, GitLab CI/CD, GitHub Actions, Azure DevOps, Tekton, Argo CD i Flux.

3.2 Estratègies de desplegament


4. Infraestructura com a codi i GitOps

Infraestructura com a codi (IaC, Infrastructure as Code): gestionar servidors, xarxes i serveis mitjançant fitxers versionats en lloc de configuració manual. La forma correcta de gestionar la infraestructura en un projecte àgil és exactament aquesta: automatitzar-la amb una eina, no configurar-la a mà.

Dues famílies que no s'han de confondre:

Distincions que es pregunten:

Infraestructura immutable: els components no es modifiquen un cop desplegats; quan cal un canvi es construeix una instància nova a partir de la imatge actualitzada i se substitueix la vella. Elimina la deriva de configuració (configuration drift), fa els desplegaments reproduïbles i simplifica el retorn. S'oposa a la infraestructura mutable, on s'apedacen els servidors existents.

GitOps: portar el model anterior fins al final. L'estat desitjat viu a Git, que és l'única font de veritat, i un agent reconciliador dins del clúster compara contínuament l'estat real amb el declarat i el corregeix (Argo CD, Flux). Desplegar és fusionar un canvi; retornar és revertir-lo.


5. Contenidors i Docker

Contenidor: unitat d'empaquetat que conté l'aplicació i totes les seves dependències —biblioteques, configuració i entorn d'execució— i que s'executa aïllada compartint el nucli del sistema operatiu amfitrió.

Avantatges, per ordre del que es pregunta:

5.1 Contenidor, màquina virtual i chroot

Màquina virtual Contenidor
Què virtualitza el maquinari el sistema operatiu
Nucli el seu propi, dins d'un sistema operatiu convidat complet el de l'amfitrió, compartit
Sistemes operatius conviu Linux, Windows i macOS alhora sobre el mateix maquinari només càrregues del mateix nucli que l'amfitrió
Mida i arrencada gigabytes, minuts megabytes, segons
Aïllament de seguretat més fort més feble: comparteixen nucli

La conseqüència pràctica: si cal executar sistemes operatius diferents i complets sobre un mateix maquinari —programari que només funciona sobre Windows al costat d'aplicacions Linux—, la resposta és la màquina virtual, no el contenidor. Les dues tecnologies conviuen: el patró habitual és un clúster de contenidors sobre màquines virtuals.

L'antecessor és chroot, que només canvia el directori arrel que veu un procés: no aïlla processos, ni xarxa, ni usuaris, ni limita recursos, i no és una plataforma de desplegament.

Tecnologia de base a Linux: namespaces —aïllament de processos, xarxa, muntatges, usuaris, comunicació entre processos i nom d'amfitrió— i cgroups —límits de CPU (Central Processing Unit), memòria i entrada/sortida—, més capabilities, seccomp i SELinux/AppArmor.

5.2 La imatge en capes i el contenidor efímer

D'aquí surt la regla que més cau: tot el que s'escriu dins d'un contenidor viu en aquesta capa i desapareix quan el contenidor s'elimina. Modificar a mà un fitxer de configuració dins d'un contenidor no toca la imatge: en tornar a instanciar-la reapareix la configuració original i el problema torna. Per això:

5.3 Docker, OCI i els altres motors

5.4 Seguretat dels contenidors

La guia de referència és la NIST SP (Special Publication) 800-190, que ordena els riscos pels components: imatge, registre, orquestrador, contenidor i sistema operatiu amfitrió. Contramesures mínimes:


6. Kubernetes

Definició: plataforma de codi obert per a l'orquestració de contenidors. Automatitza el desplegament, l'escalat, la recuperació i la gestió d'aplicacions contenidoritzades sobre un clúster de màquines. Un contenidor sol no dona alta disponibilitat; l'orquestrador sí: manté el nombre de rèpliques declarat, reprograma els contenidors d'un node caigut i retira del balanceig els que no superen les proves de vida.

6.1 Arquitectura

Els components d'un clúster de KubernetesEl pla de control i dos nodes de treball, amb els components que viuen a cadascun. Tota comunicació passa pel servidor d'API.Pla de controlNode 1Node 2kube-apiservercloud-controller-managerkube-controller-manageretcdkubeletkubeletpodspodskube-proxykube-proxytemps d'execució (containerd)temps d'execució (containerd)kube-scheduler

Pla Component Funció
Control kube-apiserver exposa l'API (Application Programming Interface) del clúster; tota la comunicació hi passa
etcd magatzem clau-valor consistent amb l'estat del clúster
kube-scheduler assigna a cada pod encara sense node el node adequat
kube-controller-manager executa els bucles de control que reconcilien estat real i desitjat
cloud-controller-manager integració opcional amb el proveïdor de núvol
Node kubelet agent que garanteix que els pods del node s'executen
kube-proxy manté les regles de xarxa que implementen els serveis
temps d'execució executa els contenidors, per l'interfície CRI (Container Runtime Interface)

Model declaratiu i reconciliació: es declara l'estat desitjat i els controladors treballen contínuament perquè l'estat real hi coincideixi. És el fonament de GitOps i el que dona l'autoreparació.

6.2 Objectes de càrrega de treball

6.3 Xarxa, configuració i emmagatzematge

6.4 Recursos, escalat, seguretat i ecosistema


7. Al sector públic


Claus d'examen


Per recordar

Fonts d'aquest tema