Skip to content

Commit 112cc1a

Browse files
committed
[it] Translate ConfigMap concept
[it] Translate ConfigMap concept
1 parent 694e4b7 commit 112cc1a

File tree

6 files changed

+328
-0
lines changed

6 files changed

+328
-0
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
title: "Configurazione"
3+
weight: 80
4+
description: >
5+
Risorse che fornisce Kubernetes per configurare i Pods.
6+
---
Lines changed: 250 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,250 @@
1+
---
2+
title: ConfigMaps
3+
content_type: concept
4+
weight: 20
5+
---
6+
7+
<!-- overview -->
8+
9+
{{< glossary_definition term_id="configmap" prepend="La ConfigMap è" length="all" >}}
10+
11+
{{< caution >}}
12+
La ConfigMap non fornisce riservatezza o cifratura dei dati. Se i dati che vuoi salvare sono confidenziali, usa un {{< glossary_tooltip text="Secret" term_id="secret" >}} piuttosto che una ConfigMap, o usa uno strumento di terze parti per tenere privati i tuoi dati.
13+
{{< /caution >}}
14+
15+
<!-- body -->
16+
## Utilizzo
17+
18+
Usa una ConfigMap per tenere separati i dati di configurazione dal codice applicativo.
19+
20+
Per esempio, immagina che stai sviluppando un'applicazione che puoi eseguire sul tuo computer (per lo sviluppo) e sul cloud (per gestire il traffico reale). Puoi scrivere il codice puntando a una variabile d'ambiente chiamata `DATABASE_HOST`. Localmente, puoi settare quella variabile a `localhost`. Nel cloud, la puoi settare referenziando il {{< glossary_tooltip text="Service" term_id="service" >}} di Kubernetes che espone la componente del database sul tuo cluster. Ciò ti permette di andare a recuperare l'immagine del container eseguita nel cloud e fare il debug dello stesso codice localmente se necessario.
21+
22+
La ConfigMap non è pensata per sostenere una gran mole di dati. I dati memorizzati su una ConfigMap non possono superare 1 MiB. Se hai bisogno di memorizzare delle configurazioni che superano questo limite, puoi considerare di montare un volume oppure usare un database o un file service separato.
23+
24+
25+
## Oggetto ConfigMap
26+
27+
La ConfigMap è un [oggetto](/docs/concepts/overview/working-with-objects/kubernetes-objects/) API che ti permette di salvare configurazioni per poi poter essere riutilizzate da altri oggetti. A differenza di molti oggetti di Kubernetes che hanno una `spec`, la ConfigMap ha i campi `data` e `binaryData`. Questi campi accettano le coppie chiave-valore come valori. Entrambi i campi `data` e `binaryData` sono opzionali. Il campo `data` è pensato per contenere le stringhe UTF-8 mentre il campo `binaryData` è pensato per contenere dati binari come le stringhe codificate in base64.
28+
29+
Il nome di una ConfigMap deve essere un nome valido per un sottodominio DNS.
30+
31+
Ogni chiave sotto il campo `data` o `binaryData` deve consistere di caratteri alfanumerici, `-`, `_` o `.`. Le chiavi salvate sotto `data` non devono coincidere con le chiavi nel campo `binaryData`.
32+
33+
Partendo dalla versione 1.19, puoi aggiungere il campo `immutable` alla definizione di ConfigMap per creare una [ConfigMap immutabile](#configmap-immutable).
34+
35+
## ConfigMaps e Pods
36+
37+
Puoi scrivere una `spec` del Pod che si riferisce a una ConfigMap e configurare il o i containers
38+
in quel Pod sulla base dei dati presenti nella ConfigMap. Il Pod e la ConfigMap devono essere nello
39+
stesso Namespace.
40+
41+
{{< note >}}
42+
La `spec` di un {{< glossary_tooltip text="Pod statico" term_id="static-pod" >}} non può riferirsi a una ConfigMap
43+
o ad altri oggetti API.
44+
{{< /note >}}
45+
46+
Questo è un esempio di una ConfigMap che ha alcune chiavi con valori semplici,
47+
e altre chiavi dove il valore ha il formato di un frammento di configurazione.
48+
49+
```yaml
50+
apiVersion: v1
51+
kind: ConfigMap
52+
metadata:
53+
name: game-demo
54+
data:
55+
# chiavi simili a proprietà; ogni chiave mappa un valore semplice
56+
player_initial_lives: "3"
57+
ui_properties_file_name: "user-interface.properties"
58+
59+
# chiavi simili a files
60+
game.properties: |
61+
enemy.types=aliens,monsters
62+
player.maximum-lives=5
63+
user-interface.properties: |
64+
color.good=purple
65+
color.bad=yellow
66+
allow.textmode=true
67+
```
68+
69+
Ci sono quattro modi differenti con cui puoi usare una ConfigMap per configurare
70+
un container all'interno di un Pod:
71+
72+
1. Argomento da riga di comando come entrypoint di un container
73+
1. Variabile d'ambiente di un container
74+
1. Aggiungere un file in un volume di sola lettura, per fare in modo che l'applicazione lo legga
75+
1. Scrivere il codice da eseguire all'interno del Pod che utilizza l'API di Kubernetes per leggere la ConfigMap
76+
77+
Questi metodologie differenti permettono di utilizzare diversi metodi per modellare i dati che saranno consumati.
78+
Per i primi tre metodi, il
79+
{{< glossary_tooltip text="kubelet" term_id="kubelet" >}} utilizza i dati della
80+
ConfigMap quando lancia il container (o più) in un Pod.
81+
82+
Per il quarto metodo dovrai scrivere il codice per leggere la ConfigMap e i suoi dati.
83+
Comunque, poiché stai utilizzando l'API di Kubernetes direttamente, la tua applicazione può
84+
sottoscriversi per ottenere aggiornamenti ogniqualvolta la ConfigMap cambia, e reagire
85+
quando ciò accade. Accedendo direttamente all'API di Kubernetes, questa
86+
tecnica ti permette anche di accedere a una ConfigMap in namespace differenti.
87+
88+
Ecco un esempio di Pod che usa i valori da `game-demo` per configurare il container:
89+
90+
```yaml
91+
apiVersion: v1
92+
kind: Pod
93+
metadata:
94+
name: configmap-demo-pod
95+
spec:
96+
containers:
97+
- name: demo
98+
image: alpine
99+
command: ["sleep", "3600"]
100+
env:
101+
# Definire la variabile d'ambiente
102+
- name: PLAYER_INITIAL_LIVES # Notare che il case qui è differente
103+
# dal nome della key nella ConfigMap.
104+
valueFrom:
105+
configMapKeyRef:
106+
name: game-demo # La ConfigMap da cui proviene il valore.
107+
key: player_initial_lives # La chiave da recuperare.
108+
- name: UI_PROPERTIES_FILE_NAME
109+
valueFrom:
110+
configMapKeyRef:
111+
name: game-demo
112+
key: ui_properties_file_name
113+
volumeMounts:
114+
- name: config
115+
mountPath: "/config"
116+
readOnly: true
117+
volumes:
118+
# Settare i volumi al livello del Pod, in seguito montarli nei containers all'interno del Pod
119+
- name: config
120+
configMap:
121+
# Fornire il nome della ConfigMap che vuoi montare.
122+
name: game-demo
123+
# Una lista di chiavi dalla ConfigMap per essere creata come file
124+
items:
125+
- key: "game.properties"
126+
path: "game.properties"
127+
- key: "user-interface.properties"
128+
path: "user-interface.properties"
129+
```
130+
131+
Una ConfigMap non differenzia tra le proprietà di una singola linea e un file con più linee e valori.
132+
L'importante è il modo in cui i Pods e gli altri oggetti consumano questi valori.
133+
134+
Per questo esempio, definire un volume e montarlo all'interno del container `demo` come `/config` crea
135+
due files,
136+
`/config/game.properties` e `/config/user-interface.properties`,
137+
sebbene ci siano quattro chiavi nella ConfigMap. Ciò avviene perché la definizione del Pod
138+
specifica una lista di `items` nella sezione dei `volumes`.
139+
Se ometti del tutto la lista degli `items`, ogni chiave nella ConfigMap diventerà
140+
un file con lo stesso nome della chiave, e otterrai 4 files.
141+
142+
## Usare le ConfigMaps
143+
144+
Le ConfigMaps possono essere montate come volumi. Le ConfigMaps possono anche essere utilizzate da
145+
altre parti del sistema, senza essere direttamente esposte al Pod. Per esempio, le
146+
ConfigMaps possono contenere l'informazione che altre parti del sistema utilizzeranno per la loro
147+
configurazione.
148+
149+
La maniera più comune per usare le ConfigMaps è di configurare i containers che sono in esecuzione
150+
in un Pod nello stesso namespace. Puoi anche utilizzare una ConfigMap separatamente.
151+
152+
Per esempio, potresti incontrare
153+
{{< glossary_tooltip text="addons" term_id="addons" >}}
154+
o {{< glossary_tooltip text="operators" term_id="operator-pattern" >}} che
155+
adattano il loro comportamento in base a una ConfigMap.
156+
157+
### Usare le ConfigMaps come files in un Pod
158+
159+
Per utilizzare una ConfigMap in un volume all'interno di un Pod:
160+
161+
1. Creare una ConfigMap o usarne una che già esiste. Più Pods possono utilizzare
162+
la stessa ConfigMap.
163+
1. Modificare la definizione del Pod per aggiungere un volume sotto `.spec.volumes[]`. Nominare
164+
il volume in qualsiasi modo, e avere un campo `.spec.volumes[].configMap.name` configurato per
165+
referenziare il tuo oggetto ConfigMap.
166+
1. Aggiungere un `.spec.containers[].volumeMounts[]` a ogni container che necessiti di una
167+
ConfigMap. Nello specifico `.spec.containers[].volumeMounts[].readOnly = true` e
168+
`.spec.containers[].volumeMounts[].mountPath` in una cartella inutilizzata
169+
dove vorresti che apparisse la ConfigMap.
170+
1. Modificare l'immagine o il comando utilizzato così che il programma cerchi i files in
171+
quella cartella. Ogni chiave nella sezione `data` della ConfigMap si converte in un file
172+
sotto `mountPath`.
173+
174+
Questo è un esempio di un Pod che monta una ConfigMap in un volume:
175+
176+
```yaml
177+
apiVersion: v1
178+
kind: Pod
179+
metadata:
180+
name: mypod
181+
spec:
182+
containers:
183+
- name: mypod
184+
image: redis
185+
volumeMounts:
186+
- name: foo
187+
mountPath: "/etc/foo"
188+
readOnly: true
189+
volumes:
190+
- name: foo
191+
configMap:
192+
name: myconfigmap
193+
```
194+
195+
Ogni ConfigMap che desideri utilizzare deve essere referenziata in `.spec.volumes`.
196+
197+
Se c'è più di un container nel Pod, allora ogni container necessita del suo
198+
blocco `volumeMounts`, ma solamente un `.spec.volumes` è necessario ConfigMap.
199+
200+
#### Le ConfigMaps montate sono aggiornate automaticamente
201+
202+
Quando una ConfigMap è utilizzata in un volume ed è aggiornata, anche le chiavi vengono aggiornate.
203+
Il kubelet controlla se la ConfigMap montata è aggiornata ad ogni periodo di sincronizzazione.
204+
Ad ogni modo, il kubelet usa la sua cache locale per ottenere il valore attuale della ConfigMap.
205+
Il tipo di cache è configurabile usando il campo `ConfigMapAndSecretChangeDetectionStrategy` nel [KubeletConfiguration struct](/docs/reference/config-api/kubelet-config.v1beta1/).
206+
Una ConfigMap può essere propagata per vista (default), ttl-based, o redirigendo
207+
tutte le richieste direttamente all'API server.
208+
Come risultato, il ritardo totale dal momento in cui la ConfigMap è aggiornata al momento in cui nuove chiavi sono propagate al Pod può essere tanto lungo quanto il periodo della sincronizzazione del kubelet + il ritardo della propagazione della cache, dove il ritardo della propagazione della cache dipende dal tipo di cache scelta
209+
(è uguale rispettivamente al ritardo della propagazione, ttl della cache, o zero).
210+
211+
Le ConfigMaps consumate come variabili d'ambiente non sono aggiornate automaticamente e necessitano di un riavvio del pod.
212+
213+
{{< note >}}
214+
Un container utilizzando una ConfigMap come un [subPath](/docs/concepts/storage/volumes#using-subpath) volume mount non riceverà gli aggiornamenti della ConfigMap.
215+
{{< /note >}}
216+
217+
## ConfigMaps Immutabili {#configmap-immutable}
218+
219+
{{< feature-state for_k8s_version="v1.21" state="stable" >}}
220+
221+
La funzionalità di Kubernetes _Immutable Secrets and ConfigMaps_ fornisce un'opzione per
222+
configurare Secrets individuali e ConfigMaps come immutabili. Per clusters che usano le ConfigMaps come estensione (almeno decine o centinaia di ConfigMap uniche montate nel Pod), prevenire i cambiamenti nei loro dati ha i seguenti vantaggi:
223+
224+
- protezione da aggiornamenti accidentali (o non voluti) che potrebbero causare l'interruzione di applicazioni
225+
- miglioramento della performance del tuo cluster riducendo significativamente il carico sul kube-apiserver, chiudendo l'ascolto sulle ConfigMaps che sono segnate come immutabili.
226+
227+
Questa funzionalità è controllata dal `ImmutableEphemeralVolumes`
228+
[feature gate](/docs/reference/command-line-tools-reference/feature-gates/).
229+
Puoi creare una ConfigMap immutabile settando il campo `immutable` a `true`.
230+
Per esempio:
231+
232+
```yaml
233+
apiVersion: v1
234+
kind: ConfigMap
235+
metadata:
236+
...
237+
data:
238+
...
239+
immutable: true
240+
```
241+
242+
Una volta che una ConfigMap è segnata come immutabile, _non_ è possibile invertire questo cambiamento né cambiare il contenuto del campo `data` o `binaryData` field. Puoi solamente cancellare e ricreare la ConfigMap. Poiché i Pods hanno un puntamento verso la ConfigMap eliminata, è raccomandato di ricreare quei Pods.
243+
244+
## {{% heading "whatsnext" %}}
245+
246+
* Leggi in merito [Secrets](/docs/concepts/configuration/secret/).
247+
* Leggi [Configura un Pod per utilizzare una ConfigMap](/docs/tasks/configure-pod-container/configure-pod-configmap/).
248+
* Leggi in merito [Modificare una ConfigMap (o qualsiasi altro oggetto di Kubernetes)](/docs/tasks/manage-kubernetes-objects/update-api-object-kubectl-patch/)
249+
* Leggi [The Twelve-Factor App](https://12factor.net/) per comprendere il motivo di separare
250+
il codice dalla configurazione.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---
2+
title: ConfigMap
3+
id: configmap
4+
date: 2022-06-21
5+
full_link: /it/docs/concepts/configuration/configmap/
6+
short_description: >
7+
Un oggetto API usato per memorizzare dati non riservati in coppie chiave-valore. Può essere utilizzato come variabili d'ambiente, argomenti da riga di comanto, o files di configurazione in un volume.
8+
9+
aka:
10+
tags:
11+
- core-object
12+
---
13+
Un oggetto API usato per memorizzare dati non riservati in coppie chiave-valore. I {{< glossary_tooltip text="Pods" term_id="pod" >}} possono utilizzare le ConfigMaps come variabili d'ambiente, argomenti da riga di comando, o come files di configurazione all'interno di un {{< glossary_tooltip text="Volume" term_id="volume" >}}.
14+
15+
<!--more-->
16+
17+
La ConfigMap ti permette di disaccoppiare le configurazioni specifiche per ambiente dalle {{< glossary_tooltip text="immagini del container" term_id="image" >}}, cosicchè le tue applicazioni siano facilmente portabili.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---
2+
title: Image
3+
id: image
4+
date: 2022-07-30
5+
full_link:
6+
short_description: >
7+
Istanza archiviata di un cointainer che contiene un insieme di software e librerie necessarie per eseguire l'applicazione.
8+
9+
aka:
10+
tags:
11+
- fundamental
12+
---
13+
Istanza archiviata di un {{< glossary_tooltip term_id="container" >}} che contiene un insieme di software e librerie necessarie per eseguire l'applicazione.
14+
15+
<!--more-->
16+
17+
Un modo di distribuire software che permette di immagazzinarlo in Image Registry (un registro di container images), scaricarlo in un sistema locale ed eseguirlo come un'applicazione. I metadati sono inclusi nell'immagine e possono contenere informazioni su come avviare l'esecuzione, chi ha prodotto l'immagine, o altro.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
title: Secret
3+
id: secret
4+
date: 2022-07-30
5+
full_link:
6+
short_description: >
7+
Contiene informazioni sensibili, come passwords, token OAuth, e chiavi ssh.
8+
9+
aka:
10+
tags:
11+
- core-object
12+
- security
13+
---
14+
Contiene informazioni sensibili, come passwords, token OAuth, e chiavi ssh.
15+
16+
<!--more-->
17+
18+
Permette un maggiore controllo su come vengono usate le informazioni sensibili e riduce il rischio di un'esposizione accidentale. I valori del Secret sono codificati in base64 e esso viene memorizzato non criptato di default, ma può essere configurato per essere [criptato](/docs/tasks/administer-cluster/encrypt-data/#ensure-all-secrets-are-encrypted). Un {{< glossary_tooltip text="Pod" term_id="pod" >}} fa riferimento al Secret come un file in un volume montato o by the kubelet pulling images for a pod. I Secrets sono ideali per i dati sensibili e le [ConfigMaps](/docs/tasks/configure-pod-container/configure-pod-configmap/) per i dati non sensibili.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
---
2+
title: Volume
3+
id: volume
4+
date: 2022-06-21
5+
full_link: /it/docs/concepts/storage/volumes/
6+
short_description: >
7+
Una cartella contenente dati, accessibile dai containers all'interno del pod.
8+
9+
aka:
10+
tags:
11+
- core-object
12+
- fundamental
13+
---
14+
Una cartella contenente i dati, accessibile dal {{< glossary_tooltip text="containers" term_id="container" >}} in un {{< glossary_tooltip term_id="pod" >}}.
15+
16+
<!--more-->
17+
18+
Un volume di Kubernetes rimane in vita fintanto che lo rimane il Pod che lo racchiude. Di conseguenza, un volume sopravvive ad ogni container all'interno del Pod, e i dati nel volume sono preservati a prescindere dai restart del container.
19+
20+
Vedi [storage](/docs/concepts/storage/) per più informazioni.

0 commit comments

Comments
 (0)