我有一个(容器化的)Web服务正在与Google Cloud中的外部CloudSQL服务对话。我使用了sidecar模式,其中Google Cloud SQL代理容器位于Web服务旁边,并且对外部CloudSQL服务进行身份验证和代理。这很好。我们将这种部署称为“ deployment-api”,其中包含容器“ api” +“ pg-proxy”
当我想在本地minikube群集上部署应用程序时出现问题,由于该服务与计算机上的本地postgres服务器通信,因此需要进行不同的配置。如果我按原样部署“ deployment-api”到minikube,它会尝试运行“ 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
答案 0 :(得分:2)
用原始的Kubernetes意味着什么?不。
但是,我强烈建议您使用Helm来部署您的应用程序。使用helm,您可以根据为每个环境提供的变量(或默认值)轻松调整清单。例如,默认情况下使用变量postgresql.proxy.enabled: true
和
{{- if .Values.postgresql.proxy.enabled }}
- name: pg-proxy
...
{{- end }}
在头盔模板中,您可以通过将值设置为false来完全禁用dev env上的该块。