Замена переменных в новой поддержке kubernetes kustomize (начиная с 1.14.0): kubectl apply -k ./

#kubernetes #customization #kubectl #declarative #kustomize

#kubernetes #настройка #kubectl #декларативный

Вопрос:

Таким образом, мы используем kustomize для наших развертываний kubernetes:

 apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:${IMAGE_VERSION}
        ports:
        - containerPort: 80
  

и разверните этот yaml, заменив переменную IMAGE_VERSION на 1.7.9

 kustomize build ./nginx/overlays/dev/ | sed -e 's|${IMAGE_VERSION}'"|1.7.9|g" | kubectl apply -f -
  

Поскольку kubectl 1.14 поддерживает kustomize.

теперь мы можем сделать что-то очень приятное вроде этого

 kubectl apply -k ./
  

но как заменить переменную IMAGE_VERSION этой новой командой?

Ответ №1:

Вам необходимо создать kustomization.yaml файл, содержащий настройки.

т.е.:

 # kustomization.yaml
bases:
- ../base
images:
  - name: nginx-pod
    newTag: 1.15
    newName: nginx-pod-2
  

А для шаблонов вы создаете базовую папку, содержащую настройку.yaml со ссылкой на развертывание и зависимости, т.е.:

 # ../base/kustomization.yaml
resources:
- deployment.yaml
  

и

 # ../base/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx-pod
  

Запустите команду:

kubectl apply -k

Приведенная выше команда скомпилирует настройку и сгенерирует следующий yaml, который будет применен к кластеру:

 # Modified Base Resource
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      # The image image tag has been changed for the container
      - name: nginx
        image: nginx-pod-2:1.15
  

Комментарии:

1. спасибо за быстрый ответ. в наших вариантах использования нам нужны эти переменные в разных местах: например, в кластере-автоскалере spec:template:spec:containers:command:- --node-group-auto-discovery=asg:tag=k8s.io/cluster-autoscaler/enabled,k8s.io/cluster-autoscaler/${CLUSTER_NAME} . Другая проблема заключается в том, что эта версия меняется очень часто каждый день. Изменять настройку не так удобно. yaml как передать его во время развертывания

2. Извините, я не понял, в чем проблема с автоматическим масштабированием и переменными