Estoy implementando dos pods statefulset de la misma imagen que se ejecutan como un servicio sin cabeza. Deseo pasar variables env separadas a contenedores que ejecutan las mismas imágenes dentro de pods statefulset. ¿Puede alguien decirme cómo lograr esto?
No es posible exponer diferentes valores de la misma variable de entorno a diferentes contenedores de Statefulsets , ya que los pods en Statefulsets son réplicas idénticas de la misma aplicación.
De los documentos :
Al igual que una implementación, un StatefulSet administra pods que se basan en una especificación de contenedor idéntica. A diferencia de una implementación, un StatefulSet mantiene una identidad fija para cada uno de sus pods. Estos pods se crean a partir de la misma especificación, pero no son intercambiables: cada uno tiene un identificador persistente que mantiene durante cualquier reprogramación.
Sin embargo, como se indica en el documento anterior, como cada pod de un Statefulset tiene una identidad fija mediante la cual puede pasar el mismo conjunto de variables de entorno a los pods y tomar las medidas apropiadas usando las diferentes variables de entorno en función de la identidad de los pods.
Puede exponer el nombre del pod a los contenedores a través de variables de entorno a través de Downward API y usarlo dentro de los scripts para tomar la acción adecuada:
env: - name: MY_POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: env0 value: value0 - name: env1 value: value1 Entonces, si tiene dos réplicas de Statefulset con el nombre myapp , los pods tendrán los nombres myapp-0 y myapp-1 y luego puede usar la variable de entorno según el nombre del pod ( env0 si el nombre del pod es myapp-0 y env1 si el nombre del pod es myapp-1 ).
Nota: aunque la solución aún funciona, no debería preferirse y, en su lugar, deberíamos tener objetos statefulsets separados para exponer diferentes variables de entorno según el caso de uso.