Ответ
Конфигурация Kubernetes — это декларативное описание желаемого состояния кластера в виде YAML- или JSON-манифестов. Я настраиваю её, следуя принципам GitOps и инфраструктуры как кода (IaC).
Основные инструменты и подходы:
-
Базовые манифесты (
kubectl apply): Для простых сервисов или одноразовых задач.# deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: api-backend namespace: production labels: app: api tier: backend spec: replicas: 3 selector: matchLabels: app: api tier: backend template: metadata: labels: app: api tier: backend spec: containers: - name: api image: registry.example.com/api:v1.2.3 ports: - containerPort: 8080 envFrom: - configMapRef: name: api-config resources: requests: memory: "256Mi" cpu: "250m" limits: memory: "512Mi" cpu: "500m" # Добавляем sidecar для сбора логов - name: log-shipper image: fluentbit:latestПрименение:
kubectl apply -f deployment.yaml -n production -
Kustomize для управления окружениями: Позволяет создавать базовые конфигурации и оверлеи для dev/staging/prod.
base/ ├── deployment.yaml ├── service.yaml └── kustomization.yaml overlays/ ├── staging/ │ ├── replica-patch.yaml # Увеличиваем реплики │ ├── configmap-patch.yaml # Конфиг для staging │ └── kustomization.yaml └── production/ ├── hpa.yaml # Добавляем HorizontalPodAutoscaler ├── ingress.yaml # Публичный ingress └── kustomization.yamlПрименение:
kubectl apply -k overlays/production -
Helm для пакетирования приложений: Использую для сложных приложений с множеством зависимостей (например, Elasticsearch с StatefulSet, Service, ConfigMap).
# Установка чарта из репозитория helm repo add bitnami https://charts.bitnami.com/bitnami helm install my-postgres bitnami/postgresql -f values/prod.yaml # Создание своего чарта helm create my-microservice # Затем редактирую templates/ и values.yaml -
GitOps с ArgoCD: Это основной подход в production. Манифесты хранятся в Git, а ArgoCD автоматически синхронизирует состояние кластера с репозиторием.
# Application manifest для ArgoCD apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: api-backend namespace: argocd spec: project: default source: repoURL: 'git@github.com:my-org/k8s-manifests.git' targetRevision: HEAD path: apps/api/overlays/production destination: server: 'https://kubernetes.default.svc' namespace: production syncPolicy: automated: prune: true selfHeal: trueТакой подход обеспечивает аудируемость, откат изменений через git revert и единый источник истины для всей инфраструктуры.