‫Ci sono due pezzi di metadati in questo
‫YAML che probabilmente hai visto negli esempi
‫e pensato, chiedendoti a cosa servono davvero le etichette e
‫le annotazioni.
‫Probabilmente non ti sei reso conto del loro significato.
‫Sono un componente chiave di Kubernetes e di come le cose
‫si collegano tra loro.
‫Molto più di Swarm.
‫Il primo sono le etichette. Le etichette si trovano sotto
‫la chiave dei metadati nella radice del file, quindi
‫sono facoltative lì. Non devi metterli ma
‫sono un valore chiave, o un elenco di valori chiave, sotto
‫l'intestazione delle etichette.
‫Quelli sono lì per molteplici ragioni.
‫Non sono sempre richiesti, ma potresti averne
‫bisogno per selezionare gli oggetti, raggrupparli e
‫persino filtrarli in seguito.
‫Questo può essere tutto ciò che descrive
‫l'oggetto o la risorsa.
‫Può essere una coppia di valori chiave che il valore è semplicemente
‫vero o falso.
‫Le chiavi possono essere quello che vuoi.
‫Non ci può essere più di una chiave in ogni
‫oggetto, quindi non puoi avere due chiavi di fila nello
‫YAML per lo stesso oggetto che ha il nome
‫della chiave, diciamo app, giusto. Questi sono usati davvero
‫per descrivere l'oggetto. Queste risorse che
‫stiamo creando hanno proprietà diverse.
‫Forse è l'ambiente come prod, dev o test.
‫Forse è la posizione come dmz, o
‫backend o frontend. Forse è il nome dell'app, o
‫forse è il nome del client, se stai ospitando siti client
‫o qualcosa del genere. Potrebbe essere quello che
‫vuoi e non ci sono molti standard.
‫La documentazione di Kubernetes elencata nelle risorse qui ti
‫fornisce alcuni esempi, ma questi sono solo esempi.
‫Non ci sono molti standard nel settore.
‫Dipende davvero dal tuo team e dalla tua
‫azienda come vuoi descrivere questa cosa.
‫Abbiamo anche annotazioni. Sono una specie di yin e yang.
‫Le etichette sono molto semplici.
‫Sono di dimensioni molto limitate e quali
‫personaggi puoi inserire. Sono pensati per descrivere la risorsa.
‫Con le annotazioni, questo è per dati più complessi e
‫dati a più valori, cose del genere.
‫Di solito vedrai le annotazioni utilizzate quando aggiungi
‫elementi personalizzati in Kubernetes che possono comunicare con
‫Kubernetes e ricavarne i dati.
‫Le annotazioni sono lì per forse memorizzare i
‫dati di configurazione, come i proxy e le cose in
‫ingresso possono spesso memorizzare diverse configurazioni, all'interno di diverse annotazioni.
‫Quindi, quelli non sono necessariamente lì
‫per la descrizione ma più per la configurazione.
‫Torniamo alle etichette per un minuto, perché c'è molto di
‫più in questo che è la chiave per capire come funziona tutto
‫questo in Kubernetes.
‫La prima cosa è che possiamo fare semplici filtri limitando
‫le etichette dalla riga di comando.
‫Possiamo ottenere un pod e solo dire, mostrami solo
‫i pod con questa etichetta.
‫Puoi anche usare una virgola lì per aggiungere più etichette.
‫In effetti, c'è un intero livello di sintassi in questa cosa
‫in cui puoi fare diversi tipi di sintassi, diversi o di
‫e di e.
‫Davvero, è una di quelle cose
‫in cui non voglio insegnarti tutto questo perché sarà
‫come imparare Regex. È qualcosa in cui non lo imparerai
‫davvero provandolo una volta sola.
‫È solo quando ne hai bisogno che
‫lo capirai davvero. La documentazione di Kubernetes
‫è davvero eccezionale. Hanno più collegamenti che ho
‫messo nelle risorse che ti guideranno attraverso il percorso di tutti i diversi
‫modi in cui potresti aver bisogno di etichette.
‫Francamente, non hai davvero bisogno di imparare che fino a quando
‫non sai di averne bisogno per risolvere un problema.
‫Puoi persino usarlo per applicare i comandi.
‫Se avevi un sacco di cose in un unico grande
‫file YAML e volevi applicare solo alcune parti di
‫quel file YAML.
‫Non lo faccio molto, ma è lì
‫dove potresti limitarlo per dire, applica solo le modifiche o
‫le informazioni che hai inserito nello YAML per
‫etichette specifiche.
‫Naturalmente, sempre con questo, puoi mettere
‫la stessa sintassi. Puoi avere solo una singola etichetta.
‫Puoi inserire virgole, avere più etichette e
‫valori lì. Tocca a voi.
‫C'è un'altra cosa che le etichette fanno è importante
‫per il funzionamento di Kubernetes.
‫Si tratta di alcune risorse che parlano ad altre
‫risorse, o si collegano ad esse, o
‫sono correlate ad esse.
‫Comunque vuoi dirlo. Il buon esempio
‫è che i servizi devono sapere a quali pod
‫inviare il proprio traffico. Potresti chiederti come lo sa?
‫Voglio dire, quando lo digiti, se esegui un comando del
‫servizio kubectl e lo stai puntando alla
‫distribuzione, che cosa sta usando esattamente per identificarla?
‫Bene, nella CLI, si potrebbe pensare che stia effettivamente
‫puntando all'oggetto di distribuzione.
‫Ma in realtà, il servizio deve parlare con i pod, non
‫con la distribuzione stessa.
‫Sta usando qualcosa chiamato selettori di etichette.
‫Questo è comune con molte delle diverse risorse che sono
‫livelli più alti di astrazione dei baccelli.
‫Per loro di relazionarsi con i pod, o per sapere quali sono i
‫loro pod, usano i selettori di etichette. Lo vedrai nello
‫YAML all'interno del nostro repository che hai
‫utilizzato per le ultime lezioni.
‫Se guardi nell'app. yml, noterai che abbiamo sempre
‫avuto un paio di cose di cui
‫non abbiamo parlato. Il primo è
‫nella parte superiore del servizio, abbiamo sotto le specifiche un selettore.
‫Deve esserci.
‫Gli stiamo dicendo la chiave e il valore di un'etichetta per
‫i pod a cui deve indirizzare il traffico.
‫Questa è solo una partita semplice.
‫Deve trovare dei baccelli con quello.
‫Quindi, nella distribuzione sottostante, vedrai che
‫le nostre specifiche hanno il proprio
‫selettore, matchLabels, app, app-nginx.
‫Quello che sta succedendo è che entrambi quegli oggetti stanno
‫selezionando i pod in base a quella partita.
‫Ciò significa che nel modello sotto le nostre specifiche,
‫in cui stiamo modellando i pod, è necessario che ci
‫sia quell'etichetta in modo che quelle risorse possano trovare i
‫loro pod.
‫La cosa bella è nelle versioni successive di
‫Kubernetes, è che almeno con una sola distribuzione, queste
‫devono essere sincronizzate. In realtà non verrà distribuito
‫se rileva che le etichette di corrispondenza del selettore non corrispondono
‫alle etichette dei metadati del modello perché devono essere in
‫grado di distribuire anche i pod ed essere
‫in grado di controllarli.
‫È lì per impedirti di farlo accidentalmente
‫nel modo sbagliato. Si aspetterà che tu
‫abbia quei pezzi lì dentro. Nelle versioni precedenti, c'era un modo
‫in cui li avrebbe generati automaticamente, per impostazione predefinita, in modo da
‫poter lasciare le cose fuori. Hanno smesso di farlo ora
‫e ti costringono a metterlo lì dentro. Penso che sia
‫una buona cosa, soprattutto quanto siano importanti
‫questi selettori di etichette. Tecnicamente, se torni a
‫Swarm, Swarm fa un po 'di questo out-of-the-box in cui
‫ha etichette che abbinano le cose dagli stack ai servizi,
‫dagli stack ai loro volumi e cose del genere.
‫Non possiamo davvero controllarlo e non lo vediamo
‫molto nell'interfaccia. È fatto in
‫sottofondo per noi in Swarm.
‫Ma è anche molto limitante.
‫Non puoi cambiare le cose al volo.
‫Non puoi necessariamente andare e personalizzare quelli per configurazioni
‫davvero uniche.
‫Qui, potremmo eventualmente parlare di un servizio
‫con più distribuzioni se volessimo
‫cambiare quei selettori.
‫I selettori non riguardano solo il collegamento delle risorse.
‫Si tratta anche di controllare dove vanno.
‫Sui nodi, è possibile utilizzare etichette e selettori per
‫controllare dove vanno.
‫Puoi usare un'ulteriore personalizzazione con cose chiamate taints e tolleranze
‫che sono una specie del contrario di quello
‫in cui stai dicendo ai nodi che non possono fare certe
‫cose in modo che Kubernetes sappia dove controllare
‫sostanzialmente dove vanno i tuoi pod.
‫Queste cose diventano davvero personalizzate e molto
‫avanzate abbastanza rapidamente. Farli tutti insieme può
‫diventare un po 'peloso e pazzo.
‫Consiglio vivamente di prenderlo lentamente con loro.
‫Tieni tutto pronto per l'uso.
‫Evita le tinte e le tolleranze fino a quando non hai
‫davvero bisogno di esaminarle.
‫Tutto ok. Ripuliamo per l'intera sezione.
‫Se hai qualcosa in esecuzione in uno spazio dei nomi predefinito
‫per il tuo cluster, se fai semplicemente un kubectl
‫ottieni tutto e vedi cose là oltre l'API Kubernetes stessa,
‫quindi vai avanti ed elimina tutte quelle risorse perché andremo
‫avanti . Non ne avremo bisogno.