Управлять мульти-средой приложения Kubernetes на GKE? - PullRequest
0 голосов
/ 10 июня 2019

Мы начинаем проект с нуля, который будет управляться в облачных сервисах Google.Я хотел бы использовать Google Kubernetes Engine.Наше приложение будет иметь несколько сред (Dev, Staging, Production).Каждая среда настраивается как новый проект в Google Cloud.

Что мне неясно, так это параметризация файлов наших сервисов / манифестов.Например, наш файл развертывания, приведенный ниже, что-нибудь в {}, я бы хотел получить из списка переменных для каждой среды.В предыдущем посте кто-то упоминал об использовании Helm, но я не могу найти много документации, поддерживающей использование helm таким образом.

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 для управления инфраструктурой, но опять же, есть ли более крупная оболочка, которую я могу использовать для установки параметров для среды?

Ответы [ 2 ]

2 голосов
/ 10 июня 2019

Шлем будет работать для этого, как и кастомизировать.В случае helm у вас будут отдельные файлы values.yaml (например, dev-values.yaml), например:

max-surge: 2
gcr-image-url: project-23456/test

, а затем ссылки на них в yaml через:

{{ .Values.max-surge }}

При установке вы бы использовали helm upgrade --install my-app . --values=dev-values.yaml

1 голос
/ 11 июня 2019

https://get -ytt.io может быть решением.

В частности, если вы посмотрите на это обсуждение github , вы заметите, что можете настроить свою среду и затем передать значения в виде флагов или переменных среды.

В случае вашего примера: config.yml:

#@ 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:

#@data/values
---
env: staging
max-surge: 1
gcr-image-url: some/other-image:latest

при условии, что все находится в одном каталоге, вы можете шаблон config.yml, например:

ytt -f .

или настройте значения на лету из env vars и аргументов командной строки:

export CUSTOM_env=production
ytt -f . \
  --data-value max_surge=10 \
  --data-value gcr_image_url=some/image:1.0 \
  --data-values-env CUSTOM
...