Перевод и адаптация статьи «Kubernetes Best Practices I Wish I Had Known Before» Engin Diri (Pulumi). Авторские права на оригинал принадлежат автору; здесь — пересказ для русскоязычных читателей.

Best practices в Kubernetes — это проверенные на проде паттерны для управления ресурсами, изоляции, RBAC, сети, наблюдаемости и инфраструктуры-как-кода. Успех в Kubernetes — это не «выбрать правильный CNI», а дисциплина в этих паттернах.

TL;DR — 20 практик на 2026

  1. Задавайте requests и limits для каждого контейнера.
  2. Используйте namespace + ResourceQuota + LimitRange для изоляции.
  3. Один контейнер в Pod — пока действительно не нужен sidecar.
  4. Манифесты — через Helm, Kustomize или Pulumi. Никогда — голый copy-paste YAML.
  5. Gateway API для north-south трафика (ingress-nginx уходит на покой).
  6. liveness + readiness + startup пробы для каждого workload’а.
  7. RBAC по принципу least-privilege с первого дня.
  8. Pod Security Admission в режиме restricted по умолчанию.
  9. Сжимайте east-west трафик через NetworkPolicy (default-deny).
  10. Секреты — во внешних менеджерах, а не в plain Kubernetes Secret.
  11. Автоскейлинг: HPA + VPA + Cluster Autoscaler / Karpenter.
  12. Мониторинг: Prometheus, Grafana, OpenTelemetry.
  13. Деплой — через GitOps (Argo CD или Flux). Git — единственный source of truth.
  14. Каждое изменение проходит через policy-as-code.
  15. SBOM на каждый образ; подпись через Sigstore/cosign.
  16. FinOps — управляйте расходами осознанно.
  17. Регулярно обновляйте кластеры и аддоны по документированному графику.
  18. Единые labels и annotations.
  19. Разделяйте dev / staging / prod кластеры (или используйте vCluster).
  20. Кластеры — cattle, а не pets. Пересоздаваемы из кода. Никаких ручных правок «вживую».

Anti-pattern → правильный подход

Типичная ошибкаЧем плохоКак правильно
Нет requests/limitsNoisy-neighbor, evictions, OOMKillrequests для каждого контейнера; VPA
Всё в default namespaceНет изоляции, квот и RBACnamespace на команду/окружение + ResourceQuota + RBAC
cluster-admin для service accountПолный кластер под угрозой при компрометацииPer-namespace Role + RoleBinding
Plain Kubernetes SecretBase64 ≠ шифрование; утечки через etcdExternal Secrets Operator + Vault / Pulumi ESC
Открытый east-westОдин взломанный Pod видит все сервисыDefault-deny NetworkPolicy
kubectl apply с ноутбукаНет истории, ревью, откатаGitOps через Argo CD / Flux
Тег latest, ручная пересборкаНевоспроизводимый деплой, supply-chain riskПиннинг по digest + проверка cosign-подписи

Подробно

1. Resource requests и limits

requests — минимум CPU/RAM, который scheduler гарантирует поду. limits — максимум. На каждом prod-контейнере должны быть:

2. Структура namespaces

Namespace = логическая граница. Маппится на владельца: команда или окружение. К каждому namespace:

3. Дизайн Pod

Один контейнер на Pod — это дефолт. Второй добавляйте, только если действительно нужно общее сетевое пространство или volume (service-mesh sidecar, log shipper, init-контейнер). Multi-container поды связывают lifecycle и масштабирование — это редко удобно.

4. Управление манифестами

Никогда не копипастите YAML вручную. Один из:

5. Ingress и сеть в 2026

Gateway API заменяет legacy Ingress. План действий:

6. Health probes

Три типа проб:

См. также серию по пробам в CloudNativePG: Рецепт 19, Рецепт 20, Рецепт 21.

7. RBAC

RBAC связывает subject (user, group, ServiceAccount) с verb + resource. Правила:

8. Pod Security Admission

Pod Security Admission применяет три уровня Pod Security Standards. Базовый сетап:

9. Network Policies

NetworkPolicy фильтрует ingress/egress на уровне IP/port:

10. Управление секретами

Встроенные Secret в Kubernetes — это base64, а не шифрование.

11. Observability

Дефолтный стек на 2026 — OpenTelemetry-first:

12. GitOps-деплой

Git — единственный source of truth.

13. Апгрейды Kubernetes

Минорный релиз раз в ~4 месяца, поддержка ~14 месяцев.

14. Labels и annotations

Метаданные — основа для Service, NetworkPolicy, мониторинга и cost-инструментов.

15. Разделение окружений

Прод — отдельный кластер.

16. Container images

17. Стратегия логов

18. Autoscaling

Три компонента работают вместе:

Каждый prod workload должен иметь HPA. У кластера — node-level autoscaling с разумным min/max и PodDisruptionBudget.

19. Policy-as-code

Policy-as-code = governance в коде, блокирует non-compliant изменения.

20. Supply chain security

SBOM (Software Bill of Materials) — машинно-читаемая инвентаризация компонентов образа.

21. FinOps в Kubernetes

Управление расходами — это про labeling и right-sizing:

22. Cattle, not pets

Ручные правки на живом кластере либо «съедаются» reconciliation’ом, либо приводят к drift’у.

23. Pulumi для Kubernetes (от автора)

Это секция-реклама от Pulumi из оригинальной статьи — оставлена для полноты.

Native YAML масштабируется до пары сервисов; дальше начинаются boilerplate и копипаст. Pulumi предлагает:

Итог

«Kubernetes вознаграждает дисциплину. 20+ практик выше — это и есть тот набор настроек, который отличает кластеры, поднимающие пейджер каждую неделю, от тех, которые не поднимают.»

Совет автора: возьмите три самых слабых места в вашей среде и закройте их в первую очередь. И помните — фиксы должны идти через код, а не через kubectl.

Авторские права

Автор: Vasiliy Fakunin

Ссылка: https://notes.melancholic.tech/posts/kubernetes-best-practices-%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D0%B5-%D1%8F-%D1%85%D0%BE%D1%82%D0%B5%D0%BB-%D0%B1%D1%8B-%D0%B7%D0%BD%D0%B0%D1%82%D1%8C-%D0%B7%D0%B0%D1%80%D0%B0%D0%BD%D0%B5%D0%B5/

Лицензия: CC BY-NC-SA 4.0

Использование материалов блога разрешается при условии: указания авторства/источника, некоммерческого использования и сохранения лицензии.

Начать поиск

Введите ключевые слова для поиска статей

↑↓
ESC
⌘K Горячая клавиша