Конфигурирование разных конфигураций модуля для разных сред (Kubernetes + Google Cloud или Minikube)

У меня есть (контейнерная) веб-служба, которая общается с внешней службой CloudSQL в Google Cloud. Я использовал шаблон коляски, в котором контейнер Google Cloud SQL Proxy находится рядом с веб-службой и аутентифицирует + прокси-серверы для внешней службы CloudSQL. Это отлично работает. Давайте назовем это Deployment "deploy-api" с контейнерами "api" + "pg-proxy"

Проблема возникает, когда я хочу развернуть приложение в моем локальном кластере мини-кубов, который должен иметь другую конфигурацию из-за того, что служба общается с локальным сервером postgres на моем компьютере. Если я развертываю "deploy-api" как есть в minikube, он пытается запустить контейнер "pg-proxy", который запирает и весь модуль входит в цикл сбоя. Есть ли способ для меня выборочно НЕ развертывать контейнер "pg-proxy" без двух определений для Pod, например, используя селекторы / метки? Я не хочу перемещать контейнер pg-proxy в собственное развертывание.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-api
  namespace: ${MY_ENV}
  labels:
    app: api
    env: ${MY_ENV}
spec:
  replicas: ${REPLICAS}
  selector:
    matchLabels:
      app: api
      env: ${MY_ENV}
  template:
    metadata:
      labels:
        app: api
        env: ${MY_ENV}
    spec:
      containers:
      - name: pg-proxy
        ports:
        - containerPort: 5432
        image: gcr.io/cloudsql-docker/gce-proxy:1.11
        command: ["/cloud_sql_proxy",
          "-instances=<redacted>:${MY_ENV}-app=tcp:5432",
          "-credential_file=/secrets/cloudsql/${MY_ENV}-sql-credentials.json"]
        securityContext:
          runAsUser: 2  # non-root user
          allowPrivilegeEscalation: false
        volumeMounts:
          - name: ${MY_ENV}-cloudsql-instance-credentials
            mountPath: /secrets/cloudsql
            readOnly: true
      - name: api
        image: ${DOCKER_IMAGE_PREFIX}api:${TAG}
        imagePullPolicy: ${PULL_POLICY}
        ports:
        - containerPort: 50051
      volumes:
        - name: ${MY_ENV}-cloudsql-instance-credentials
          secret:
            secretName: ${MY_ENV}-cloudsql-instance-credentials

1 ответ

В сырых кубернетах значит? Нет.

Но я настоятельно рекомендую вам использовать Helm для развертывания ваших приложений. С помощью helm вы можете легко адаптировать манифест на основе переменных, предоставленных для каждой среды (или значений по умолчанию). Например с переменной postgresql.proxy.enabled: true по умолчанию и

{{- if .Values.postgresql.proxy.enabled }}
- name: pg-proxy
...
{{- end }}

в шаблоне helm вы можете полностью отключить этот блок в dev env, установив значение false.

Другие вопросы по тегам