Skip to content

Commit 6eaacd5

Browse files
Anynouraelga
andauthored
Add content/es/docs/concepts/configuration/configmap.md content/es/docs/reference/glossary/configmap.md (#22576)
* configmap * Apply suggestions from code review Changes accepted Co-authored-by: Rael Garcia <[email protected]> * Apply suggestions from code review error solved Co-authored-by: Rael Garcia <[email protected]> * Fix broken link to glossary Co-authored-by: Rael Garcia <[email protected]>
1 parent e21e35d commit 6eaacd5

File tree

2 files changed

+271
-0
lines changed

2 files changed

+271
-0
lines changed
Lines changed: 253 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,253 @@
1+
---
2+
title: ConfigMaps
3+
content_type: concept
4+
weight: 20
5+
---
6+
7+
<!-- overview -->
8+
9+
{{< glossary_definition term_id="configmap" prepend="Un configmap es " length="all" >}}
10+
11+
{{< caution >}}
12+
ConfigMap no proporciona encriptación.
13+
Si los datos que quieres almacenar son confidenciales, utiliza un
14+
{{< glossary_tooltip text="Secret" term_id="secret" >}} en lugar de un ConfigMap,
15+
o utiliza otras herramientas externas para mantener los datos seguros.
16+
{{< /caution >}}
17+
18+
19+
20+
<!-- body -->
21+
## Motivo
22+
23+
Utiliza un ConfigMap para crear una configuración separada del código de la aplicación.
24+
25+
Por ejemplo, imagina que estás desarrollando una aplicación que puedes correr en
26+
tu propio equipo (para desarrollo) y en el cloud (para mantener tráfico real).
27+
Escribes el código para configurar una variable llamada `DATABASE_HOST`.
28+
En tu equipo configuras la variable con el valor `localhost`.
29+
En el cloud, la configuras con referencia a un kubernetes
30+
{{< glossary_tooltip text="Service" term_id="service" >}} que expone el componente
31+
de la base de datos en tu cluster.
32+
33+
Esto permite tener una imagen corriendo en un cloud y
34+
tener el mismo código localmente para checkearlo si es necesario.
35+
36+
## Objeto ConfigMap
37+
38+
Un ConfigMap es un [objeto](/docs/concepts/overview/working-with-objects/kubernetes-objects/) de la API
39+
que permite almacenar la configuración de otros objetos utilizados. Aunque muchos
40+
objetos de kubernetes que tienen un `spec`, un ConfigMap tiene una sección `data` para
41+
almacenar items, identificados por una clave, y sus valores.
42+
43+
El nombre del ConfigMap debe ser un
44+
[nombre de subdominio DNS](/docs/concepts/overview/working-with-objects/names#dns-subdomain-names) válido.
45+
46+
## ConfigMaps y Pods
47+
48+
Puedes escribir un Pod `spec` y referenciarlo a un ConfigMap y configurar el contenedor(es)
49+
de ese {{< glossary_tooltip text="Pod" term_id="pod" >}} en base a los datos del ConfigMap. El {{< glossary_tooltip text="Pod" term_id="pod" >}} y el ConfigMap deben estar en
50+
el mismo {{< glossary_tooltip text="Namespace" term_id="namespace" >}}.
51+
52+
Este es un ejemplo de ConfigMap que tiene algunas claves con un valor simple,
53+
y otras claves donde el valor tiene un formato de un fragmento de configuración.
54+
55+
```yaml
56+
apiVersion: v1
57+
kind: ConfigMap
58+
metadata:
59+
name: game-demo
60+
data:
61+
# property-like keys; each key maps to a simple value
62+
player_initial_lives: "3"
63+
ui_properties_file_name: "user-interface.properties"
64+
#
65+
# file-like keys
66+
game.properties: |
67+
enemy.types=aliens,monsters
68+
player.maximum-lives=5
69+
user-interface.properties: |
70+
color.good=purple
71+
color.bad=yellow
72+
allow.textmode=true
73+
```
74+
Hay cuatro maneras diferentes de usar un ConfigMap para configurar
75+
un contenedor dentro de un {{< glossary_tooltip text="Pod" term_id="pod" >}}:
76+
77+
1. Argumento en la linea de comandos como entrypoint de un contenedor
78+
1. Variable de enorno de un contenedor
79+
1. Como fichero en un volumen de solo lectura, para que lo lea la aplicación
80+
1. Escribir el código para ejecutar dentro de un {{< glossary_tooltip text="Pod" term_id="pod" >}} que utiliza la API para leer el ConfigMap
81+
82+
Estos diferentes mecanismos permiten utilizar diferentes métodos para modelar
83+
los datos que se van a usar.
84+
Para los primeros tres mecanismos, el
85+
{{< glossary_tooltip text="kubelet" term_id="kubelet" >}} utiliza la información
86+
del ConfigMap cuando lanza un contenedor (o varios) en un {{< glossary_tooltip text="Pod" term_id="pod" >}}.
87+
88+
Para el cuarto método, tienes que escribir el código para leer el ConfigMap y sus datos.
89+
Sin embargo, como estás utilizando la API de kubernetes directamente, la aplicación puede
90+
suscribirse para obtener actualizaciones cuando el ConfigMap cambie, y reaccionar
91+
cuando esto ocurra. Accediendo directamente a la API de kubernetes, esta
92+
técnica también permite acceder al ConfigMap en diferentes namespaces.
93+
94+
En el siguiente ejemplo el Pod utiliza los valores de `game-demo` para configurar el contenedor:
95+
```yaml
96+
apiVersion: v1
97+
kind: Pod
98+
metadata:
99+
name: configmap-demo-pod
100+
spec:
101+
containers:
102+
- name: demo
103+
image: game.example/demo-game
104+
env:
105+
# Define the environment variable
106+
- name: PLAYER_INITIAL_LIVES # Notice that the case is different here
107+
# from the key name in the ConfigMap.
108+
valueFrom:
109+
configMapKeyRef:
110+
name: game-demo # The ConfigMap this value comes from.
111+
key: player_initial_lives # The key to fetch.
112+
- name: UI_PROPERTIES_FILE_NAME
113+
valueFrom:
114+
configMapKeyRef:
115+
name: game-demo
116+
key: ui_properties_file_name
117+
volumeMounts:
118+
- name: config
119+
mountPath: "/config"
120+
readOnly: true
121+
volumes:
122+
# You set volumes at the Pod level, then mount them into containers inside that Pod
123+
- name: config
124+
configMap:
125+
# Provide the name of the ConfigMap you want to mount.
126+
name: game-demo
127+
# An array of keys from the ConfigMap to create as files
128+
items:
129+
- key: "game.properties"
130+
path: "game.properties"
131+
- key: "user-interface.properties"
132+
path: "user-interface.properties"
133+
```
134+
135+
136+
Un ConfigMap no diferencia entre las propiedades de una linea individual y
137+
un fichero con múltiples lineas y valores.
138+
Lo importante es como los {{< glossary_tooltip text="Pods" term_id="pod" >}} y otros objetos consumen estos valores.
139+
140+
Para este ejemplo, definimos un {{< glossary_tooltip text="Volumen" term_id="volume" >}} y lo montamos dentro del contenedor
141+
`demo` como `/config` creando dos ficheros,
142+
`/config/game.properties` y `/config/user-interface.properties`,
143+
aunque haya cuatro claves en el ConfigMap. Esto es debido a que enla definición
144+
del {{< glossary_tooltip text="Pod" term_id="pod" >}} se especifica el array `items` en la sección `volumes`.
145+
Si quieres omitir el array `items` entero, cada clave del ConfigMap se convierte en
146+
un fichero con el mismo nombre que la clave, y tienes 4 ficheros.
147+
148+
## Usando ConfigMaps
149+
150+
Los ConfigMaps pueden montarse como volúmenes. También pueden ser utilizados por otras
151+
partes del sistema, sin ser expuestos directamente al {{< glossary_tooltip text="Pod" term_id="pod" >}}. Por ejemplo,
152+
los ConfigMaps pueden contener información para que otros elementos del sistema utilicen
153+
para su configuración.
154+
155+
{{< note >}}
156+
La manera más común de usar los Configmaps es para configurar
157+
los contenedores que están corriendo en un {{< glossary_tooltip text="Pod" term_id="pod" >}} en el mismo {{< glossary_tooltip text="Namespace" term_id="namespace" >}}.
158+
También se pueden usar por separado.
159+
160+
Por ejemplo,
161+
quizá encuentres {{< glossary_tooltip text="AddOns" term_id="addons" >}}
162+
u {{< glossary_tooltip text="Operadores" term_id="operator-pattern" >}} que
163+
ajustan su comportamiento en base a un ConfigMap.
164+
{{< /note >}}
165+
166+
### Usando ConfigMaps como ficheros en un Pod
167+
168+
Para usar un ConfigMap en un volumen en un {{< glossary_tooltip text="Pod" term_id="pod" >}}:
169+
170+
1. Crear un ConfigMap o usar uno que exista. Múltiples {{< glossary_tooltip text="Pods" term_id="pod" >}} pueden utilizar el mismo ConfigMap.
171+
1. Modifica la configuración del {{< glossary_tooltip text="Pod" term_id="pod" >}} para añadir el volumen en `.spec.volumes[]`. Pon cualquier nombre al {{< glossary_tooltip text="Volumen" term_id="volume" >}}, y tienes un campo `.spec.volumes[].configMap.name` configurado con referencia al objeto ConfigMap.
172+
1. Añade un `.spec.containers[].volumeMounts[]` a cada contenedor que necesite el ConfigMap. Especifica `.spec.containers[].volumeMounts[].readOnly = true` y `.spec.containers[].volumeMounts[].mountPath` en un directorio sin uso donde quieras que aparezca el ConfigMap.
173+
1. Modifica la imagen o el comando utilizado para que el programa busque los ficheros en el directorio. Cada clave del ConfigMap `data` se convierte en un un fichero en el `mountPath`.
174+
175+
En este ejemplo, el {{< glossary_tooltip text="Pod" term_id="pod" >}} monta un ConfigMap como un {{< glossary_tooltip text="volumen" term_id="volume" >}}:
176+
177+
```yaml
178+
apiVersion: v1
179+
kind: Pod
180+
metadata:
181+
name: mypod
182+
spec:
183+
containers:
184+
- name: mypod
185+
image: redis
186+
volumeMounts:
187+
- name: foo
188+
mountPath: "/etc/foo"
189+
readOnly: true
190+
volumes:
191+
- name: foo
192+
configMap:
193+
name: myconfigmap
194+
```
195+
196+
Cada ConfigMap que quieras utilizar debe estar referenciado en `.spec.volumes`.
197+
198+
Si hay múltiples contenedores en el {{< glossary_tooltip text="Pod" term_id="pod" >}}, cada contenedor tiene su propio
199+
bloque `volumeMounts`, pero solo un `.spec.volumes` es necesario por cada ConfigMap.
200+
201+
#### ConfigMaps montados son actualizados automáticamente
202+
203+
Cuando un ConfigMap está siendo utilizado en un {{< glossary_tooltip text="volumen" term_id="volume" >}} y es actualizado, las claves son actualizadas también.
204+
El {{< glossary_tooltip text="kubelet" term_id="kubelet" >}} comprueba si el ConfigMap montado está actualizado cada periodo de sincronización.
205+
Sin embargo, el {{< glossary_tooltip text="kubelet" term_id="kubelet" >}} utiliza su caché local para obtener el valor actual del ConfigMap.
206+
El tipo de caché es configurable usando el campo `ConfigMapAndSecretChangeDetectionStrategy` en el
207+
[KubeletConfiguration struct](https://github.com/kubernetes/kubernetes/blob/{{< param "docsbranch" >}}/staging/src/k8s.io/kubelet/config/v1beta1/types.go).
208+
Un ConfigMap puede ser propagado por vista (default), ttl-based, o simplemente redirigiendo
209+
todas las consultas directamente a la API.
210+
Como resultado, el retraso total desde el momento que el ConfigMap es actualizado hasta el momento
211+
que las nuevas claves son proyectadas en el {{< glossary_tooltip text="Pod" term_id="pod" >}} puede ser tan largo como la sincronización del {{< glossary_tooltip text="Pod" term_id="pod" >}}
212+
+ el retraso de propagación de la caché, donde la propagación de la caché depende del tipo de
213+
caché elegido (es igual al retraso de propagación, ttl de la caché, o cero correspondientemente).
214+
215+
{{< feature-state for_k8s_version="v1.18" state="alpha" >}}
216+
217+
La característica alpha de kubernetes _Immutable Secrets and ConfigMaps_ provee una opción para configurar
218+
{{< glossary_tooltip text="Secrets" term_id="secret" >}} individuales y ConfigMaps como inmutables. Para los {{< glossary_tooltip text="Clústeres" term_id="cluster" >}} que usan ConfigMaps como extensión
219+
(al menos decenas o cientos de un único ConfigMap montado en {{< glossary_tooltip text="Pods" term_id="pod" >}}), previene cambios en sus
220+
datos con las siguientes ventajas:
221+
222+
- protección de actualizaciones accidentales (o no deseadas) que pueden causar caídas de aplicaciones
223+
- mejora el rendimiento del {{< glossary_tooltip text="Clúster" term_id="cluster" >}} significativamente reduciendo la carga del {{< glossary_tooltip text="kube-apiserver" term_id="kube-apiserver" >}},
224+
cerrando las vistas para el ConfigMap marcado como inmutable.
225+
226+
Para usar esta característica, habilita el `ImmutableEmphemeralVolumes`
227+
[feature gate](/docs/reference/command-line-tools-reference/feature-gates/) y configura
228+
el campo del {{< glossary_tooltip text="Secret" term_id="secret" >}} o ConfigMap `immutable` como `true`. Por ejemplo:
229+
```yaml
230+
apiVersion: v1
231+
kind: ConfigMap
232+
metadata:
233+
...
234+
data:
235+
...
236+
immutable: true
237+
```
238+
239+
{{< note >}}
240+
Una vez que un ConfigMap o un {{< glossary_tooltip text="Secret" term_id="secret" >}} es marcado como inmutable, _no_ es posible revertir el cambio
241+
ni cambiar el contenido del campo `data`. Solo se puede eliminar y recrear el ConfigMap.
242+
Los {{< glossary_tooltip text="Pods" term_id="pod" >}} existentes mantiene un punto de montaje del ConfigMap eliminado - es recomendable
243+
recrear los {{< glossary_tooltip text="Pods" term_id="pod" >}}.
244+
{{< /note >}}
245+
246+
247+
## {{% heading "whatsnext" %}}
248+
249+
250+
* Leer sobre [Secrets](/docs/concepts/configuration/secret/).
251+
* Leer [Configure a Pod to Use a ConfigMap](/docs/tasks/configure-pod-container/configure-pod-configmap/).
252+
* Leer [The Twelve-Factor App](https://12factor.net/) para entender el motivo de separar
253+
el código de la configuración.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
title: Configmap
3+
id: configmap
4+
date: 2020-07-11
5+
full_link: /docs/concepts/configuration/configmap/
6+
short_description: >
7+
Almacena información no sensible.
8+
9+
aka:
10+
tags:
11+
- workload
12+
---
13+
Un objeto de la API utilizado para almacenar datos no confidenciales en el formato clave-valor. Los {{< glossary_tooltip text="Pods" term_id="pod" >}} pueden utilizar los ConfigMaps como variables de entorno, argumentos de la linea de comandos o como ficheros de configuración en un {{< glossary_tooltip text="Volumen" term_id="volume" >}}.
14+
15+
Un ConfigMap te permite desacoplar la configuración de un entorno específico de una imagen de contenedor, así las aplicaciones son fácilmente portables.
16+
17+
<!--more-->
18+

0 commit comments

Comments
 (0)