Compartir información con los pods

Para compartir información con los pods tenemos varias formas de hacerlo como: configmaps, volúmenes, secrets o variables

Configmap

Creamos un configmap con el siguiente comando:

kubectl create configmap miconfigmap --from-literal=clave=valor

Ahora se lo pasamos a un pod como una variable. Para ello creamos una fichero llamado pod1.yaml con el siguiente contenido:

apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  containers:
  - name: app-container
    image: busybox:1.28.4
    imagePullPolicy: IfNotPresent
    command: ['sh', '-c', "echo $(MY_VAR) && sleep 3600"]
    env:
    - name: MY_VAR
      valueFrom:
        configMapKeyRef:
          name: miconifmap
          key: clave

Creamos el pod con el siguiente comando:

kubectl apply -f pod1.yaml

Ahora podemos revisar el log del contenedor, para comprobar que se ha ejecutado el comando que le hemos configurado y veremos el valor de la variable:

kubectl log configmap-pod

También podemos compartir el configmap montándolo en un volumen en el pod. Creamos el fichero configmap-volume.yaml con el siguiente contenido:

apiVersion: v1
kind: Pod
metadata:
  name: configmap-volume
spec:
  containers:
  - name: app-container
    image: busybox:1.28.4
    imagePullPolicy: IfNotPresent
    command: ['sh', '-c', "echo $(MY_VAR) && sleep 3600"]
    volumeMounts:
    - name: volumeconfigmap
      mountPath: /etc/config
 volumes:
 - name: volumeconfigmap
   configMap:
     name: miconfigmap

Al crear este pod, tendremos un fichero en /etc/config con el nombre del configmap y el contenido configurado en el configmap.

 

Secret

Para crear el secret vamos a crear un fichero con el siguiente contenido:

apiVersion: v1
kind: Secret
metadata:
  name: appsecret
stringData:
  cert: value
  key: value

Aplicamos la configuración del fichero ejecutando:

kubectl apply -f "nombre del fichero"

Ahora creamos el siguiente fichero, en el que configuramos el secret como una variable:

apiVersion: v1
kind: Pod
metadata:
  name: secret-pod
spec:
  containers:
  - name: app-container
    image: busybox:1.28.4
    imagePullPolicy: IfNotPresent
    command: ['sh', '-c', "echo Hello, kubernetes! && sleep 3600"]
  env:
  - name: MY_CERT
    valueFrom:
      secretKeyRef:
        name: appsecret
        key: cert

Ahora podemos conectar por ssh al pod ejecutando:

kubectl exec -it secret-pod bash

y ver el valor de la variable:

echo $MY_CERT

También se puede pasar el secret  como volumen, creando el siguiente fichero:

apiVersion: v1
kind: Pod
metadata:
  name: secret-volume-pod
spec:
  containers:
  - name: app-container
    image: busybox:1.28.4
    imagePullPolicy: IfNotPresent
    command: ['sh', '-c', "echo $(MY_VAR) && sleep 3600"]
    volumeMounts:
    - name: volumesecret
      mountPath: /etc/config
 volumes:
 - name: volumesecret
   secret:
     secretName: appsecret

Se nos creará un fichero en /etc/config con el valor del secret.

Te recordamos que en Occentus Network somos Kubernetes Certified Service Provider (KCSP) y que gracias a esta certificación ofrecemos servicio de soporte oficial de Kubernetes, así como consultoría y formación a empresas que eligen Kubernetes.

Artículos relacionados