我有一个(容器化)网络服务与 Google Cloud 中的外部 CloudSQL 服务通信。我使用了 Sidecar 模式,其中 Google Cloud SQL 代理容器位于 Web 服务旁边,并对外部 CloudSQL 服务进行身份验证+代理。这工作正常。让我们用容器“api”+“pg-proxy”将此部署称为“deployment-api”
当我想在我的本地 minikube 集群上部署应用程序时会出现问题,由于服务与我计算机上的本地 postgres 服务器通信,该集群需要具有不同的配置。如果我将“deployment-api”按原样部署到 minikube,它会尝试运行 barfs 和整个 pod 进入崩溃循环的“pg-proxy”容器。有没有办法让我在没有 Pod 的两个定义的情况下选择性地不部署“pg-proxy”容器,例如,使用选择器/标签?我不想将 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