Ответ
В Kubernetes нет прямого механизма наследования объектов, но есть несколько практик для повторного использования и композиции конфигураций.
Основные подходы:
-
Использование
kustomize(встроен вkubectl):- Базовая конфигурация (
base/): определяет общие ресурсы. - Оверлеи (
overlays/): наследуют отbaseи добавляют/модифицируют поля.
Структура проекта:
my-app/ ├── base/ │ ├── deployment.yaml │ ├── kustomization.yaml │ └── service.yaml └── overlays/ ├── production/ │ ├── kustomization.yaml # Указывает на base и добавляет patches │ └── replica-patch.yaml └── staging/ └── ...Пример
overlays/production/kustomization.yaml:bases: - ../../base patchesStrategicMerge: - replica-patch.yaml - Базовая конфигурация (
-
Helm Charts и зависимости (
dependencies):- Можно определить общий chart как зависимость и переопределять его
values.yaml.
- Можно определить общий chart как зависимость и переопределять его
-
Янки (YAML Anchors & Aliases) внутри одного файла:
# Определение якоря baseConfig: &base image: myapp:latest ports: - containerPort: 8080 # Использование алиаса и добавление полей apiVersion: apps/v1 kind: Deployment metadata: name: app-production spec: template: spec: containers: - name: app <<: *base # Наследование якоря env: - name: ENV value: "production"
Рекомендация: kustomize является стандартным и наиболее гибким способом для управления наследованием и окружениями в нативных Kubernetes-манифестах.