Конфигурирование разных конфигураций модуля для разных сред (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.