Как читать переменные из configmap в файле yaml kubernetes в Nodejs

avatar
Sahil Paudel
8 августа 2021 в 18:23
361
0
0

Нас попросили переместить переменные из export key=value в configmaps в файле deployment.yml.

deployment.yml

{% if configmap is defined %}
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: "{{ prefix }}-{{ project_name }}"
  namespace: "{{ namespace }}"
data:
{% for key, value in configmap.items() %}
  {{ key }}: "{{ value }}"
{% endfor %}
{% endif %}
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ prefix }}-{{ project_name }}-deployment
  namespace: {{ namespace }}
  labels:
    k8s-app: {{ prefix }}-{{ project_name }}
spec:
  progressDeadlineSeconds: 60
  revisionHistoryLimit: 1
  replicas: 1
  selector:
    matchLabels:
      k8s-app: {{ prefix }}-{{ project_name }}
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 0
      maxSurge: 1
  template:
    metadata:
      labels:
        k8s-app: "{{ prefix }}-{{ project_name }}"
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: k8s-app
                operator: In
                values:
                - {{ prefix }}-{{ project_name }}
            topologyKey: "kubernetes.io/hostname"
      containers:
        - name: {{ project_name }}
          image: "67567464.dkr.tfr.ap-north-1.amazonaws.com/{{ project_name }}:{{ tag }}"
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 4200
          livenessProbe:
            httpGet:
              path: /status
              port: 4200
              scheme: HTTP
            initialDelaySeconds: 30
            timeoutSeconds: 2
            periodSeconds: 8
            successThreshold: 1
            failureThreshold: 5
          readinessProbe:
            httpGet:
              path: /status
              port: 4200
              scheme: HTTP
            initialDelaySeconds: 30
            timeoutSeconds: 2
            periodSeconds: 5
            successThreshold: 1
            failureThreshold: 20
          envFrom:
{% if configmap is defined %}
            - configMapRef:
                name: "{{ prefix }}-{{ project_name }}"
{% endif %}
            - secretRef:
                name: "{{ prefix }}-{{ project_name }}"
          resources:
            limits:
              cpu: '200m'
              memory: 300Mi
            requests:
              cpu: '100m'
              memory: 150Mi
      nodeSelector:
        workloadType: {{ workload_type }}
---
apiVersion: v1
kind: Service
metadata:
  name: {{ prefix }}-{{ project_name }}-service
  namespace: {{ namespace }}
  labels:
    k8s-svc: {{ prefix }}-{{ project_name }}-service
spec:
  ports:
    - port: 4200
      targetPort: 4200
      protocol: TCP
  selector:
    k8s-app: {{ prefix }}-{{ project_name }}
  type: ClusterIP
---
apiVersion: getambassador.io/v2
kind: Mapping
metadata:
  name: {{ prefix }}-{{ project_name }}-service-mapping
  namespace: {{ namespace }}
spec:
  bypass_auth: true
  host: {{ fqdn }}
  prefix: /
  service: {{ prefix }}-{{ project_name }}-service.{{ namespace }}:4200
  timeout_ms: 200000
  
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: {{ prefix }}-{{ project_name }}-hpa
  namespace: {{ namespace }}
spec:
  scaleTargetRef:
    kind: Deployment
    name: {{ prefix }}-{{ project_name }}-deployment
    apiVersion: apps/v1
  minReplicas: {{ min_replicas }}
  maxReplicas: {{ max_replicas }}
  targetCPUUtilizationPercentage: 95

vars.yml - где у нас есть все секреты, как показано ниже

env: staging
project_name: oracle
prefix: staging
namespace: "{{ prefix }}-nexus"
fqdn: "{{ prefix }}-{{ project_name }}.dummy.in"
tag: "{{ prefix }}-{{ build_number }}"
context: development
profile: default
workload_type: general
env_during_build: True
nocache: "no"
min_replicas: 1
max_replicas: 1
configmap:
  BASE_URL: ""
  IDENTITY_ENDPOINT: ""
  NODE_ENV: "production"

Но я не могу получить доступ к этим переменным с помощью кода process.env.IDENTITY_ENDPOINT

Однако, когда я захожу в модули и запускаю env в терминале, значения присутствуют.

Есть ли другой способ или код для чтения переменных env в этом случае.

P.S.: В elixir мне пришлось изменить на System.get_env с Application.get_env(:app_name, :env_vars_name)[:key_name]

Спасибо.

Источник
larsks
8 августа 2021 в 18:40
0

Можете ли вы обновить свой вопрос, чтобы включить воспроизводимый пример? Покажите фактический configMap без шаблонов, соответствующий модуль YAML и код, воспроизводящий проблему.

Sahil Paudel
9 августа 2021 в 10:06
0

@larsks Я добавил полный файл yml, который мы используем.

Ответы (0)