2

我有一个(容器化)网络服务与 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
4

1 回答 1

2

在原始 Kubernetes 中意味着什么?不。

但我强烈建议您使用 Helm 来部署您的应用程序。使用 helm,您可以根据为每个环境(或默认值)提供的变量轻松调整清单。例如postgresql.proxy.enabled: true,默认变量和

{{- if .Values.postgresql.proxy.enabled }}
- name: pg-proxy
...
{{- end }}

在 helm 模板中,您可以通过将值设置为 false 在 dev env 上完全禁用此块。

于 2018-09-21T06:01:17.693 回答