为不同的环境配置不同的pod配置(Kubernetes+;谷歌云或Minikube)

为不同的环境配置不同的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”按原样部署

我有一个(容器化的)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代理容器移动到它自己的部署中

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。