Продвинутая конфигурация Kubernetes
🔹 Этап 4: Продвинутая конфигурация Kubernetes¶
✅ 4.1 ConfigMap и Secret — конфигурация и чувствительные данные¶
🔸 ConfigMap¶
Используется для хранения конфигурационных данных, которые не являются секретными (например, настройки приложения).
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
ENV: "production"
LOG_LEVEL: "debug"
Монтируется в контейнер как переменные окружения:
🔸 Secret¶
Хранит чувствительные данные: пароли, токены, ключи и т.д. Данные кодируются в base64.
apiVersion: v1
kind: Secret
metadata:
name: app-secret
type: Opaque
data:
PASSWORD: cGFzc3dvcmQ= # "password" в base64
Монтируется как переменные окружения или файлы.
✅ 4.2 Volumes и хранилище¶
🔸 Основные понятия¶
-
Volume — способ подключения диска/папки к Pod'у
-
Persistent Volume (PV) — абстракция реального хранилища
-
Persistent Volume Claim (PVC) — запрос на хранилище от приложения
🔸 Пример PVC:¶
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: app-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
Монтирование в Pod:
volumes:
- name: data-volume
persistentVolumeClaim:
claimName: app-pvc
containers:
- name: app
image: nginx
volumeMounts:
- mountPath: "/data"
name: data-volume
✅ 4.3 Probes (проверки состояния)¶
-
Liveness Probe — проверяет, живо ли приложение. Если нет — перезапускает Pod.
-
Readiness Probe — определяет, готов ли Pod принимать трафик.
-
Startup Probe — полезно для долгих стартов.
🔸 Пример:¶
✅ 4.4 ServiceAccount и RBAC (права доступа)¶
🔸 ServiceAccount¶
Pod может запускаться от имени ServiceAccount, у которого ограничены права.
🔸 Role и RoleBinding (внутри namespace)¶
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"]
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods-binding
subjects:
- kind: ServiceAccount
name: read-only-sa
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
✅ 4.5 Подсказка: структурируй всё в Helm-чарт¶
Все эти элементы (ConfigMap, Secret, PVC, Probes, RBAC) можно сделать переменными Helm-чарта — это сделает деплой удобным и параметризуемым.
Что такое Helm и Helm-чарт?¶
Helm¶
Helm — это пакетный менеджер для Kubernetes. Он позволяет легко упаковывать, настраивать и разворачивать приложения в кластере Kubernetes, похожим образом, как apt или yum делают это для Linux.
Helm облегчает работу с большими и сложными конфигурациями, избавляя тебя от рукописного копирования YAML-манифестов.
Helm-чарт (Helm Chart)¶
Helm-чарт — это структура каталогов и файлов, которая описывает Kubernetes-ресурсы для приложения или сервиса. В нем находятся шаблоны YAML с возможностью параметризации.
Основные компоненты Helm-чарта:¶
| Файл / папка | Назначение |
|---|---|
Chart.yaml |
Метаинформация о чарте: имя, версия, описание |
values.yaml |
Значения по умолчанию для параметров шаблонов |
templates/ |
Папка с шаблонами Kubernetes YAML-файлов |
charts/ |
Подчарты — зависимости вашего чарта |
README.md |
Документация к чарту |
Как работает Helm-чарт¶
-
В шаблонах (
templates/) используются переменные из файлаvalues.yamlи других источников. -
При установке чарта Helm подставляет нужные значения и генерирует полный набор YAML-манифестов.
-
Эти манифесты потом применяются в кластер через Kubernetes API.
Пример простого шаблона из Helm-чарта¶
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-nginx
spec:
replicas: {{ .Values.replicaCount }}
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
ports:
- containerPort: 80
В этом шаблоне:
-
{{ .Release.Name }}— имя релиза, которое ты задаешь при установке чарта -
{{ .Values.replicaCount }}— значение параметра изvalues.yaml -
{{ .Values.image.repository }},{{ .Values.image.tag }}— параметры образа контейнера
Почему Helm полезен?¶
-
Повторяемость — можно разворачивать одинаковую конфигурацию в разных окружениях
-
Параметризация — легко менять параметры, не правя YAML вручную
-
Обновления и откаты — Helm умеет обновлять установленные приложения и откатывать изменения
-
Расширяемость — можно использовать готовые чарты из публичных репозиториев (например,
bitnami)
Основные команды Helm¶
| Команда | Описание |
|---|---|
helm repo add <name> <url> |
Добавить репозиторий чартов |
helm search repo <term> |
Поиск чартов в репозиториях |
helm install <release> <chart> |
Установить чарт в кластер |
helm upgrade <release> <chart> |
Обновить релиз |
helm rollback <release> <revision> |
Откатить релиз к предыдущей версии |
helm uninstall <release> |
Удалить релиз из кластера |
helm template <chart> |
Сгенерировать YAML из чарта без установки |