Управління маніфестами Kubernetes часто вимагає динамічної конфігурації, особливо коли ви працюєте з різними середовищами. Ручне редагування цих маніфестів для вставлення специфічних значень середовища може бути схильним до помилок та займати багато часу. Тут на допомогу приходить kubectl-envsubst
, потужний плагін, який автоматизує заміну змінних середовища безпосередньо в маніфестах Kubernetes, підвищуючи ефективність і точність у процесах розгортання.
Що таке kubectl-envsubst
?
kubectl-envsubst
— це плагін для kubectl
, який замінює місця-заповнювачі у ваших маніфестах Kubernetes на відповідні значення змінних середовища. Ця автоматизація гарантує, що ваші маніфести будуть правильно налаштовані для різних середовищ без необхідності ручного втручання.
Основні можливості
- Заміну змінних середовища: Автоматично заміняє місця-заповнювачі у маніфестах на значення відповідних змінних середовища.
- Фільтрація дозволених змінних: Керуйте, які змінні замінюються, вказуючи дозволені імена змінних або префікси.
- Режим строгих перевірок: Забезпечує передбачуваність розгортання, не дозволяючи залишати незамінені місця-заповнювачі.
- Безшовна інтеграція: Сумісний з усіма аргументами
kubectl apply
, що дозволяє зручно інтегрувати в існуючі робочі процеси. - Без зовнішніх залежностей: Не потребує сторонніх інструментів або бібліотек, що спрощує установку та використання.
Установка
Ви можете встановити kubectl-envsubst
, використовуючи менеджер плагінів krew
або шляхом ручної інсталяції.
Використання krew
- Встановіть Krew: Якщо ви ще не встановили
krew
, скористайтеся посібником з установки. - Встановіть
kubectl-envsubst
:
kubectl krew install envsubst
kubectl envsubst --version
Ручна установка
- Завантажте бінарник: Отримайте останню версію бінарника для вашої платформи на сторінці Releases.
- Помістіть у PATH: Перемістіть бінарник до каталогу, який є у вашому системному
PATH
(наприклад,/usr/local/bin
). - Перевірте установку:
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