¿Qué vamos a ver?
Basado en la documentación oficial de K8s (licencia CC-BY-4.0).
>_.source <(kubectl completion bash)
Comprueba que funciona escribiendo kubectl y presionando la tecla "TAB" 2 veces.Crea un namespace para aislar los recursos de este ejercicio del resto de recursos en tu clúster:
kubectl create namespace lab-configmaps-secrets
Vamos a crear ConfigMaps de 3 formas diferentes:
kubectl, desde una clave-valor literalkubectl, desde un archivokubectl create configmap demo-cm-literal --from-literal message=hello_world -n lab-configmaps-secrets
kubectl describe configmaps demo-cm-literal -n lab-configmaps-secrets
demo.properties con el siguiente contenido:foo=bar
meaning_of_life=42
song=always_look_on_the_bright_side_of_life
kubectl create configmap demo-cm-file --from-file=demo.properties -n lab-configmaps-secrets
kubectl describe configmaps demo-cm-file -n lab-configmaps-secrets
volumes/demo-cm.yaml con este manifiesto:apiVersion: v1
kind: ConfigMap
metadata:
name: demo-cm-manifest
data:
spam: eggs
knight: black
kubectl apply -f volumes/demo-cm.yaml -n lab-configmaps-secrets
kubectl describe configmaps demo-cm-manifest -n lab-configmaps-secrets
kubectl get configmaps -n lab-configmaps-secrets
Vamos a crear un Despliegue con Pods donde montaremos la información contenida en uno de los ConfigMaps como un Volumen y la de otro ConfigMap como variables de entorno.
deployments/demo-cm.yaml con este manifiesto:apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-configmap
spec:
selector:
matchLabels:
app: demo-configmap
template:
metadata:
labels:
app: demo-configmap
spec:
containers:
- name: hello-world
image: gcr.io/google-samples/node-hello:1.0
volumeMounts:
- name: properties
mountPath: /etc/config
env:
- name: SPAM
valueFrom:
configMapKeyRef:
name: demo-cm-manifest
key: spam
volumes:
- name: properties
configMap:
name: demo-cm-file
kubectl apply -f deployments/demo-cm.yaml -n lab-configmaps-secrets
kubectl get pods -n lab-configmaps-secrets
kubectl describe pod [NOMBRE_POD] -n lab-configmaps-secrets
Fíjate en sus Volúmenes y variables de entorno.kubectl exec -it [NOMBRE_POD] -n lab-configmaps-secrets -- sh
ls /etc/config
Las claves del archivo con el que creamos el ConfigMap aparecerán como archivos separados.cat /etc/config/demo.properties
echo $SPAM
exit
Del mismo modo, vamos a crear Secrets de las mismas 3 formas distintas:
kubectl, desde una clave-valor literalkubectl, desde un archivokubectl create secret generic demo-secret-literal --from-literal secret=secret_message -n lab-configmaps-secrets
kubectl describe secret demo-secret-literal -n lab-configmaps-secrets
secret.txt con el siguiente contenido:secret_key=QWERTYUIOPASDFGHJKLZXCVBNM
kubectl create secret generic demo-secret-file --from-file=secret.txt -n lab-configmaps-secrets
kubectl describe secret demo-secret-file -n lab-configmaps-secrets
volumes/demo-secret.yaml con este manifiesto:apiVersion: v1
kind: Secret
metadata:
name: demo-secret-manifest
type: Opaque
data:
user: YWRtaW4=
password: MWYyZDFlMmU2N2Rm
kubectl apply -f volumes/demo-secret.yaml -n lab-configmaps-secrets
kubectl describe secret demo-secret-manifest -n lab-configmaps-secrets
kubectl get secrets -n lab-configmaps-secrets
Del mismo modo que para los ConfigMaps, vamos a crear un Despliegue con Pods donde montaremos la información contenida en uno de los Secretos como un Volumen y la de otro Secreto como variables de entorno.
deployments/demo-secret.yaml con este manifiesto:apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-secret
spec:
selector:
matchLabels:
app: demo-secret
template:
metadata:
labels:
app: demo-secret
spec:
containers:
- name: hello-world
image: gcr.io/google-samples/node-hello:1.0
volumeMounts:
- name: secrets
mountPath: /etc/secrets
env:
- name: USER
valueFrom:
secretKeyRef:
name: demo-secret-manifest
key: user
- name: PASSWORD
valueFrom:
secretKeyRef:
name: demo-secret-manifest
key: password
volumes:
- name: secrets
secret:
secretName: demo-secret-file
No hay que decir que no debes usar un nombre de usuario y contraseña en un proyecto real de esta manera, ¿verdad?kubectl apply -f deployments/demo-secret.yaml -n lab-configmaps-secrets
kubectl get pods -n lab-configmaps-secrets
kubectl describe pod [NOMBRE_POD] -n lab-configmaps-secrets
Fíjate en sus Volúmenes y variables de entorno.kubectl exec -it [NOMBRE_POD] -n lab-configmaps-secrets -- sh
ls /etc/secrets
Las claves del archivo con el que creamos el ConfigMap aparecerán como archivos separados.cat /etc/secrets/secret.txt
echo $USER
echo $PASSWORD
exit
Elimina el namespace, lo cual eliminará todos los recursos:
kubectl delete namespace lab-configmaps-secrets
En esta práctica hemos visto cómo: