为不同的环境配置不同的pod配置(Kubernetes+;谷歌云或Minikube)
我有一个(容器化的)web服务与Google Cloud中的外部CloudSQL服务进行通信。我使用了sidecar模式,其中一个Google Cloud SQL代理容器位于web服务旁边,并对外部CloudSQL服务的+代理进行身份验证。这个很好用。让我们使用容器“api”+“pg proxy”将此部署称为“部署api” 当我想在本地minikube群集上部署应用程序时,就会出现问题,因为服务与我计算机上的本地postgres服务器通信,因此需要进行不同的配置。如果我将“部署api”按原样部署到minikube,它会尝试运行“pg代理”容器,该容器会发出barfs,整个pod进入崩溃循环。有没有一种方法可以让我在没有Pod的两个定义(例如,使用选择器/标签)的情况下选择性地不部署“pg proxy”容器?我不想将pg代理容器移动到它自己的部署中为不同的环境配置不同的pod配置(Kubernetes+;谷歌云或Minikube),kubernetes,google-kubernetes-engine,cloud-sql-proxy,Kubernetes,Google Kubernetes Engine,Cloud Sql Proxy,我有一个(容器化的)web服务与Google Cloud中的外部CloudSQL服务进行通信。我使用了sidecar模式,其中一个Google Cloud SQL代理容器位于web服务旁边,并对外部CloudSQL服务的+代理进行身份验证。这个很好用。让我们使用容器“api”+“pg proxy”将此部署称为“部署api” 当我想在本地minikube群集上部署应用程序时,就会出现问题,因为服务与我计算机上的本地postgres服务器通信,因此需要进行不同的配置。如果我将“部署api”按原样部署
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
apiVersion:apps/v1
种类:部署
元数据:
名称:部署api
命名空间:${MY_ENV}
标签:
应用程序:api
环境:${MY_env}
规格:
副本:${replications}
选择器:
火柴标签:
应用程序:api
环境:${MY_env}
模板:
元数据:
标签:
应用程序:api
环境:${MY_env}
规格:
容器:
-姓名:pg代理
端口:
-集装箱港口:5432
图片:gcr.io/cloudsqldocker/gce代理:1.11
命令:[“/cloud\u sql\u proxy”,
“-instances=:${MY_ENV}-app=tcp:5432”,
“-credential_file=/secrets/cloudsql/${MY_ENV}-sql credentials.json”]
securityContext:
runAsUser:2#非root用户
allowPrivilegeEscalation:false
体积数量:
-名称:${MY_ENV}-cloudsql实例凭据
mountPath:/secrets/cloudsql
只读:正确
-名称:api
image:${DOCKER\u image\u PREFIX}api:${TAG}
imagePullPolicy:${PULL\u POLICY}
端口:
-集装箱港口:50051
卷数:
-名称:${MY_ENV}-cloudsql实例凭据
秘密:
secretName:${MY_ENV}-cloudsql实例凭据
原始库伯内特斯的意思是什么?没有 但我强烈建议您使用Helm来部署应用程序。使用helm,您可以根据为每个环境(或默认值)提供的变量轻松地调整清单。例如,变量
postgresql.proxy.enabled:true
在默认值和
{{- if .Values.postgresql.proxy.enabled }}
- name: pg-proxy
...
{{- end }}
在helm template中,您可以通过将值设置为false,在dev env上完全禁用此块。它为什么会呕吐?是因为音量太大吗?谢谢!是的,我计划在不久的将来将我的集群部署管理转移到Helm。