Опростіть свої розгортання в Kubernetes за допомогою kubectl-envsubst

Управління маніфестами Kubernetes часто вимагає динамічної конфігурації, особливо коли ви працюєте з різними середовищами. Ручне редагування цих маніфестів для вставлення специфічних значень середовища може бути схильним до помилок та займати багато часу. Тут на допомогу приходить kubectl-envsubst, потужний плагін, який автоматизує заміну змінних середовища безпосередньо в маніфестах Kubernetes, підвищуючи ефективність і точність у процесах розгортання.

Що таке kubectl-envsubst?

kubectl-envsubst — це плагін для kubectl, який замінює місця-заповнювачі у ваших маніфестах Kubernetes на відповідні значення змінних середовища. Ця автоматизація гарантує, що ваші маніфести будуть правильно налаштовані для різних середовищ без необхідності ручного втручання.

Основні можливості

  • Заміну змінних середовища: Автоматично заміняє місця-заповнювачі у маніфестах на значення відповідних змінних середовища.
  • Фільтрація дозволених змінних: Керуйте, які змінні замінюються, вказуючи дозволені імена змінних або префікси.
  • Режим строгих перевірок: Забезпечує передбачуваність розгортання, не дозволяючи залишати незамінені місця-заповнювачі.
  • Безшовна інтеграція: Сумісний з усіма аргументами kubectl apply, що дозволяє зручно інтегрувати в існуючі робочі процеси.
  • Без зовнішніх залежностей: Не потребує сторонніх інструментів або бібліотек, що спрощує установку та використання.

Установка

Ви можете встановити kubectl-envsubst, використовуючи менеджер плагінів krew або шляхом ручної інсталяції.

Використання krew

  1. Встановіть Krew: Якщо ви ще не встановили krew, скористайтеся посібником з установки.
  2. Встановіть kubectl-envsubst:
kubectl krew install envsubst  
kubectl envsubst --version

Ручна установка

  1. Завантажте бінарник: Отримайте останню версію бінарника для вашої платформи на сторінці Releases.
  2. Помістіть у PATH: Перемістіть бінарник до каталогу, який є у вашому системному PATH (наприклад, /usr/local/bin).
  3. Перевірте установку:
kubectl envsubst --version

Використання

Приклад базової заміни

Припустимо, що у вас є маніфест manifests.yaml з місцями-заповнювачами, такими як ${IMAGE_NAME}, ${IMAGE_TAG}, і відповідні змінні середовища вже задані:

---  
apiVersion: apps/v1  
kind: Deployment  
metadata:  
 name: &app ${PROJECT_NAME}  
spec:  
 replicas: 1  
 selector:  
 matchLabels:  
 app: *app  
 template:  
 metadata:  
 labels:  
 app: *app  
 spec:  
 containers:  
 - name: *app  
 image: $IMAGE_NAME:$IMAGE_TAG  
 ports:  
 - containerPort: 80  
 volumeMounts:  
 - name: nginx-html  
 mountPath: /usr/share/nginx/html/index.html  
 subPath: index.html  
 resources: {}  
 volumes:  
 - name: nginx-html  
 configMap:  
 name: nginx-index  

---  
apiVersion: v1  
kind: Service  
metadata:  
 name: &app ${PROJECT_NAME}  
 labels:  
 app: *app  
spec:  
 type: NodePort  
 ports:  
 - port: 8080  
 targetPort: 80  
 nodePort: 32501  
 name: *app  
 selector:  
 app: *app  

---  
apiVersion: v1  
kind: ConfigMap  
metadata:  
 name: nginx-index  
data:  
 index.html: |  







Welcome to the NGINX Test Page!
Current env: ${PROJECT_ENV}
         ```  Ви можете використовувати кластер Kind для тестування.
Якщо ви ще не встановили, ознайомтесь з [посібником з установки Kind](https://kind.sigs.k8s.io/).

!/bin/bash

set -euo pipefail

підготовка конфігурації для кластеру 'kind'

cat <kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: "kubectl-envsubst"
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 32501
hostPort: 32501
protocol: TCP
EOF

налаштування кластера з kind, щоб безпечно тестувати в пісочниці

kind create cluster --config=kind-config.yaml
kubectl config set-context "kind-kubectl-envsubst"
rm -f kind-config.yaml
```

Далі, визначте змінні середовища для заміни у ваших маніфестах. У цьому прикладі ми розгортаємо в середовищі ‘dev’, але ті самі маніфести можна використовувати для ‘stage’ та ‘prod’, змінюючи лише ці змінні:

# налаштування змінних середовища  
export PROJECT_ROOT_NAMESPACE=kubectl-envubst-examples  
export PROJECT_ENV=dev  
export PROJECT_NAME=nginx-gateway  
export PROJECT_NAMESPACE="${PROJECT_ROOT_NAMESPACE}-${PROJECT_ENV}"  
export IMAGE_NAME=nginx  
export IMAGE_TAG=latest

Створіть простір імен, налаштуйте контекст, замініть і застосуйте маніфести:

# налаштування простору імен і контексту  
kubectl create ns "${PROJECT_NAMESPACE}" --dry-run=client -oyaml | kubectl apply -f -  
kubectl config set-context --current --namespace="${PROJECT_NAMESPACE}"  

# заміна і застосування ресурсів, залежно від середовища (dev, stage, prod)  
export ENVSUBST_ALLOWED_PREFIXES='PROJECT_,IMAGE_'  
kubectl envsubst apply -f "${PROJECT_ENV}"

Ця команда замінює місця-заповнювачі на значення змінних середовища та застосовує маніфест.

Перевірте результат: http://localhost:32501

Якщо ваш кластер Kind працює на віддаленій машині, замініть ‘localhost’ на IP-адресу цієї машини.

Навіщо використовувати kubectl-envsubst?

Впровадження kubectl-envsubst у ваш процес розгортання має кілька переваг:

  • Консистентність: Автоматизує процес заміни, знижуючи ймовірність помилок через ручне редагування.
  • Гнучкість: Легко адаптує маніфести для різних середовищ без необхідності змінювати вихідні файли.
  • Інтеграція: Легко інтегрується в існуючі CI/CD пайплайни, підвищуючи ефективність розгортання.

Висновок

kubectl-envsubst — це цінний інструмент для адміністраторів Kubernetes і розробників, який спрощує керування специфічними для середовища конфігураціями в маніфестах. Автоматизуючи заміну змінних, він підвищує надійність розгортання і спрощує робочі процеси.

Для детальнішої інформації та розширених налаштувань звертайтесь до офіційної документації.

Перекладено з: Streamline Your Kubernetes Deployments with kubectl-envsubst

Leave a Reply

Your email address will not be published. Required fields are marked *