针对不同的环境(Kubernetes + Google Cloud或Minikube)配置不同的Pod配置

时间:2018-09-20 22:08:59

标签: kubernetes google-kubernetes-engine cloud-sql-proxy

我有一个(容器化的)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

1 个答案:

答案 0 :(得分:2)

用原始的Kubernetes意味着什么?不。

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

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

在头盔模板中,您可以通过将值设置为false来完全禁用dev env上的该块。