首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在GKE上管理多环境Kubernetes应用程序?

在GKE上管理多环境Kubernetes应用程序?
EN

Stack Overflow用户
提问于 2019-06-11 03:04:38
回答 2查看 215关注 0票数 0

我们正在从头开始一个项目,将在谷歌云服务上管理。我想使用Google Kubernetes引擎。我们的应用程序将有多个环境(开发、试运行、生产)。每个环境都被设置为Google Cloud上的一个新项目。

我不清楚的是如何参数化我们的服务/清单文件。例如我们下面的部署文件,任何我想从每个环境的变量列表中提取的{}中的内容。在之前的一篇文章中,有人提到使用Helm,但我找不到太多支持这种方式使用helm的文档。

代码语言:javascript
复制
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: webapp
spec:
  replicas: 1
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: {max-surge}
      maxUnavailable: 0
  selector:
    matchLabels:
      run: webapp
  template:
    metadata:
      labels:
        run: webapp
    spec:
      containers:
      - name: webapp
        image: {gcr-image-url}
        imagePullPolicy: Always
        ports:
        - containerPort: 3000
        env:
        - name: DATABASE_URL
          valueFrom:
            secretKeyRef:
              name: app-secrets
              key: DATABASE_URL
        - name: SECRET_KEY_BASE
          valueFrom:
            secretKeyRef:
              name: app-secrets
              key: SECRET_KEY_BASE

有哪些工具可用于管理我的GKE环境?我们将使用terraform来管理我们的基础设施,但是有没有更大的包装器可以用来设置每个环境的参数?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-11 03:36:09

Helm可以解决这个问题,kustomize也可以。在helm的情况下,您将有单独的values.yaml文件(例如dev-values.yaml),例如:

代码语言:javascript
复制
max-surge: 2
gcr-image-url: project-23456/test

然后通过以下方式在yaml中引用它们:

代码语言:javascript
复制
{{ .Values.max-surge }}

安装时,您将使用helm upgrade --install my-app . --values=dev-values.yaml

票数 2
EN

Stack Overflow用户

发布于 2019-06-12 01:01:24

https://get-ytt.io可能是一个解决方案。

特别是,如果您查看this github discussion,您会注意到您可以配置环境,然后以标志或环境变量的形式传入值。

在您的示例中,给定以下config.yml

代码语言:javascript
复制
#@ load("@ytt:data", "data")

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: webapp
  annotations:
    environment: #@ data.values.env
spec:
  replicas: 1
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: #@ data.values.max_surge
      maxUnavailable: 0
  selector:
    matchLabels:
      run: webapp
  template:
    metadata:
      labels:
        run: webapp
    spec:
      containers:
      - name: webapp
        image: #@ data.values.gcr_image_url
        imagePullPolicy: Always
        ports:
        - containerPort: 3000
        env:
        - name: DATABASE_URL
          valueFrom:
            secretKeyRef:
              name: app-secrets
              key: DATABASE_URL
        - name: SECRET_KEY_BASE
          valueFrom:
            secretKeyRef:
              name: app-secrets
              key: SECRET_KEY_BASE

values.yml

代码语言:javascript
复制
#@data/values
---
env: staging
max-surge: 1
gcr-image-url: some/other-image:latest

假设所有内容都在同一个目录中,您可以将config.yml作为模板,如下所示:

代码语言:javascript
复制
ytt -f .

或者从env变量和命令行参数中动态定制值:

代码语言:javascript
复制
export CUSTOM_env=production
ytt -f . \
  --data-value max_surge=10 \
  --data-value gcr_image_url=some/image:1.0 \
  --data-values-env CUSTOM
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56532142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档