Unità 5 / 11

Kubernetes: Manifest, Helm e orchestrazione basata sull'intelligenza artificiale

Guadagni:

  • Capacità di comprendere gli oggetti di base (Pod, Deployment, Service, ConfigMap, Secret, Namespace) e la filosofia dichiarativa di Kubernetes e produrre manifest solidi per l'intelligenza artificiale
  • Capacità di rendere i manifest pronti per la produzione e protetti con limiti di risorse, controlli di integrità (sonde), tag di immagine fissi e RBAC ristretto
  • Capacità di verificare il contesto corretto prima dell'esecuzione e di applicare la disciplina di prova con prova/diff

È facile eseguire un contenitore. Ma stabilire un sistema che distribuisca centinaia di contenitori su dozzine di server, si riavvii automaticamente quando uno di essi si blocca, lo replichi quando il carico aumenta e lo aggiorni senza tempi di inattività? Questa è orchestrazione e lo strumento standard del settore è Kubernetes (K8s in breve), la piattaforma che distribuisce, ridimensiona e gestisce automaticamente i contenitori in un cluster. Kubernetes è potente ma complesso: tutto è definito da file YAML lunghi e sensibili al rientro, chiamati manifest. È qui che l’intelligenza artificiale dà una boccata d’aria fresca; Con il giusto contesto, produce rapidamente questi manifesti e decodifica i loro misteriosi errori.

Ma in Kubernetes, un manifest sbagliato significa non riuscire a sostenere un intero servizio, scalarlo in modo errato o lasciare una vulnerabilità. È tua responsabilità comprendere e verificare ogni manifest prodotto dall'intelligenza artificiale, soprattutto prima che venga applicato kubectl.

Oggetti principali di Kubernetes

Per controllare Kubernetes, dovresti conoscere i concetti principali:

  • Pod: unità operativa più piccola; Contiene uno o più contenitori. Generalmente non viene utilizzato direttamente il Pod, ma vengono utilizzati gli oggetti parent che lo gestiscono.
  • Distribuzione: definisce quante copie di un'applicazione verranno eseguite, quale immagine utilizzerà e come verrà aggiornata. Se un Pod si arresta in modo anomalo, lo ricreerà automaticamente.
  • Servizio: fornisce un indirizzo di rete fisso e bilanciamento del carico ai pod; Anche se i pod vanno e vengono, l'indirizzo di accesso non cambia.
  • ConfigMap e Secret: mantiene i valori di configurazione e le informazioni segrete separate dai pod. ConfigMap è per impostazioni esplicite, Secret è per valori sensibili.
  • Spazio dei nomi: l'area che divide e isola logicamente le risorse (ad esempio dev, prod).
  • Ingress: il set di regole che indirizza il traffico HTTP dal mondo esterno ai servizi nel cluster.

Helm è il "gestore dei pacchetti" di Kubernetes: permette di creare template di manifest (grafici) ricorrenti e installarli con valori diversi in ambienti diversi con un unico comando. L'intelligenza artificiale produce sia il manifest grezzo che il grafico Helm.

Perché ci sono così tanti oggetti? Perché la filosofia principale di Kubernetes è dichiarativa: definisci "come vuoi che appaia il sistema" (ad esempio "avere sempre 3 copie di questa applicazione in esecuzione"), mentre Kubernetes sposta continuamente lo stato corrente più vicino a quello desiderato. Se un Pod muore, ne crea uno nuovo; se un nodo non funziona, sposta il carico di lavoro su un altro nodo. Ecco perché i manifest non sono comandi "fai", ma ricette "lascia che sia così". Cogliere questa distinzione è fondamentale quando si leggono i manifesti prodotti dall’intelligenza artificiale: ogni dominio descrive parte dello stato desiderato del sistema. Un dominio sbagliato significa che Kubernetes sta lavorando per raggiungere un obiettivo sbagliato e tale obiettivo viene applicato in modo silenzioso e persistente.

Suggerimento: in Kubernetes, lo strumento di test sicuro più importante è kubectl apply --dry-run=server -f file.yaml: mostra se il server accetterà e cosa fare senza applicare effettivamente il manifest. Assicurati di eseguire l'esecuzione di prova e kubectl diff prima di applicare un manifest a prod.

Passo dopo passo: creazione di manifest con l'intelligenza artificiale

  1. Descrivere l'applicazione e la necessità. Nome immagine, porta, numero di repliche, limiti di risorse (CPU/memoria).
  2. Richiedi distribuzione + servizio. Di solito sono richiesti entrambi insieme.
  3. Configurazione e segreto separati. Impostazioni su ConfigMap, valori sensibili su Secret.
  4. Aggiungi controlli sanitari. livenessProbe (è attivo) e readinessProbe (è pronto per il traffico) sono fondamentali.
  5. Imposta un limite di risorse. Senza richieste/limiti un Pod può consumare l'intero nodo.
  6. Verifica con `--dry-run` e `diff`, quindi applica. Prima nello spazio dei nomi test.

Sicurezza: rischi specifici di Kubernetes

  1. Il segreto non è veramente segreto: è solo base64. L'oggetto segreto Kubernetes base64 codifica i valori; Questa non è crittografia, è facilmente decrittografabile. Per una vera privacy, sono necessari la crittografia etcd e un deposito esterno (Vault, gestore di segreti cloud). Non eseguire mai il commit dei manifest segreti direttamente su Git (ci sono soluzioni per questo come Sealed Secrets/External Secrets).
  2. Imposta un limite di risorse. Un Pod senza limiti può mandare in crash l'intero nodo con una perdita di memoria.
  3. Autorità minima (RBAC). Con il controllo degli accessi basato sui ruoli, ciascun servizio/utente dispone solo delle autorizzazioni di cui ha bisogno. L'intelligenza artificiale a volte fornisce amministratori di cluster di grandi dimensioni; restringere il campo.
  4. Non utilizzare il tag immagine "più recente". Non sai quale versione è in esecuzione e non puoi ripristinarla.
Attenzione: l'eliminazione di kubectl o un'applicazione errata possono distruggere una distribuzione live. Assicurati di verificare in quale spazio dei nomi ti trovi (kubectl config current-context) prima di eseguire i comandi; Il lavoro accidentale è un disastro comune nel contesto produttivo.

Manifesto grezzo e tabella Helm

criterio

Manifesto YAML non elaborato

Grafico del timone

Installazione

kubectl applica -f

installazione del timone

Multimedia (sviluppo/produzione)

Copia e incolla, soggetto a errori

Grafico singolo, valori diversi.yaml

Versione/ripristino

a mano

facile con il rollback del timone

Curva di apprendimento

basso

medio

quando

Ambiente piccolo e unico

Servizio multimediale e ripetitivo

tre mini custodie

Caso 1: il segreto del servizio interrotto. Un pod si riavviava costantemente (CrashLoopBackOff). Il team ha fornito i registri e il manifest all'IA; L'intelligenza artificiale ha mostrato che il Pod non è mai stato considerato "pronto" perché la sonda di disponibilità stava guardando la porta sbagliata. Hanno sistemato il porto, il servizio è diventato stabile in 10 minuti. Stabilire manualmente questa relazione potrebbe richiedere ore.

Caso 2: non porre limiti ha rotto il nodo. Non c'erano limiti in una distribuzione; Una perdita di memoria ha gonfiato il Pod e ha mandato in crash l'intero nodo, bloccando anche i servizi vicini. Dopo l'incidente, hanno fatto dire all'IA "aggiungere richieste e limiti ragionevoli di CPU/memoria a tutte le distribuzioni" e lo hanno reso standard. Una linea mancante costava ore di inattività.

Caso 3: cattura di un grande RBAC. Durante un'indagine, è stato scoperto che un manifest ServiceAccount generato da AI era legato al ruolo di amministratore del cluster, il che significa che il servizio poteva gestire l'intero cluster. Il team ha limitato i permessi alla sola lettura dei pod nel proprio spazio dei nomi. Il principio del privilegio minimo ha risolto una vulnerabilità della sicurezza.

Quattro modelli copiabili

1) Distribuzione + Produzione di servizi:

Scrivi un manifesto di distribuzione e servizio per Kubernetes. Applicazione: [AD], immagine: [immagine: versione fissa], porta: [X], replica: [N]. Regole: - Aggiungi richieste e limiti CPU/memoria. - Definisci livenessProbe e readinessProbe. - Leggi la configurazione da ConfigMap, segreto dall'oggetto segreto; Non incorporare valori nel manifest, utilizzare segnaposto. - NON utilizzare il tag immagine ":latest". Fornisci con la descrizione.

2) Risoluzione degli errori manifesti:

Il pod corrente è nello stato [CrashLoopBackOff/In attesa/ImagePullBackOff]. In base al seguente manifest e all'output di "kubectl description", elenca le possibili cause principali in ordine di probabilità ed emetti il ​​comando di verifica per ciascuna. Manifesto: [YAML] Descrivi: [OUTPUT]

3) Controllo di sicurezza/integrità:

Controlla questo manifest di Kubernetes: manca il limite delle risorse, probabilmente manca, c'è un tag :latest, c'è un RBAC/permesso eccessivamente ampio, il segreto è incorporato nel manifest? Scrivi i risultati in ordine di importanza e con la correzione. Manifesto: [YAML]

4) Conversione al grafico Helm:

Converti i seguenti manifest non elaborati in un grafico Helm riutilizzabile: quali valori dovrebbero essere inviati avalues.yaml (immagine, replica, origine, ambiente)? Mostra la struttura del grafico e i valori di esempio.yaml.Manifest: [YAML]

Prompt debole / Prompt forte

Debole: "Scrivi Kubernetes YAML per la mia applicazione."

Risultato: un Deployment senza sondaggi e senza limiti con il tag :latest, che incorpora il piano segreto; Insicuro e fragile nel prod.

Forte: "Scrivi Kubernetes Deployment + Service. Immagine myapp:1.4.2, 3 repliche, 8080 porte. CPU 100m-500m, memoria 128Mi-512Mi aggiungi richieste/limiti. Inserisci sonda di attività per /healthz, sonda di disponibilità per /ready. Leggi il segreto dall'oggetto Secret, non incorporarlo nel manifest. Fornisci con la descrizione. "

Differenza: la seconda versione del prompt fornisce scala, limiti di risorse, controlli di integrità e regole segrete; L'output è vicino alla produzione e sicuro.

Errori comuni

  • Non fissare limiti alle risorse. Un singolo Pod può consumare l'intero nodo.
  • Non aggiungere un controllo di integrità (sonda). Kubernetes non è in grado di rilevare un pod bloccato/non pronto.
  • tag ":più recente". Non è chiaro quale versione sia in esecuzione e non è possibile ripristinarla.
  • Inviare il segreto direttamente a Git. Base64 non è crittografia; tutti lo risolvono.
  • Esecuzione di comandi in contesto/spazio dei nomi errato. Il modo più comune di bloccarsi in prod.
  • saltando `--dry-run`/`diff`. Non vedere cosa accadrà prima dell'implementazione.

In sintesi

Kubernetes è un orchestratore potente ma complesso che distribuisce, scala e ottimizza automaticamente i contenitori in un cluster; Tutto è definito da YAML manifest, che Helm modellizza. L'intelligenza artificiale produce rapidamente manifest di distribuzione/servizio e grafici Helm, risolve bug misteriosi, ma devi chiedere esplicitamente limite di risorse, controllo dello stato, tag immagine immutabile, RBAC ristretto e regole di sicurezza segrete. --dry-run, diff e controllo corretto del contesto sono abitudini che prevengono i crash del prodotto.

Compito dell'applicazione

Chiedi all'AI di generare un manifest per un'applicazione di esempio con il modello "Deployment + Service generation". Quindi: (1) Controlla il limite delle risorse, il sondaggio, :latest e il segreto con il modello "Controllo di sicurezza/integrità"; (2) esegui kubectl apply --dry-run=server su un cluster/minikube di test, se possibile, e leggi l'output; (3) prendi nota dei due elementi più critici di sicurezza/robustezza che ritieni mancanti.

lista di controllo

  • [ ] Ho aggiunto alla mia richiesta la versione dell'immagine, il numero di repliche, le porte e i limiti delle risorse.
  • [ ] Ho aggiunto la sonda di vivacità e prontezza al manifest.
  • [ ] Tag immagine corretto; Non ho usato :latest.
  • [] Il segreto non è incorporato nel manifest; Ho usato Oggetto segreto/caveau esterno.
  • [ ] Ho ristretto il campo RBAC/autorizzazioni alle autorizzazioni minime.
  • [ ] Prima di fare domanda, ho verificato di trovarmi nel contesto corretto e che --dry-run/diff restituisca.