Основы K8S
Основы k8s
Термины
- Pods - минимальная сущность (юнит) для развертывания в кластере;
- ReplicaSets (ранее Replication Controller) - гарантирует, что в определенный момент времени будет запущено нужно кол-во контейнеров;
- Deployments - обеспечивает декларативные (declarative) обновления для Pods и ReplicaSets;
- StatefulSets - используется для управления приложениями с сохранением состояния;
- DaemonSet - гарантирует, что определенный под будет запущен на всех (или некоторых) нодах;
- Jobs (в том числе CronJob) - создает один (или несколько) подов и гарантирует, что после выполнения команды они будут успешно завершены (terminated);
- Labels and Selectors - пары ключ/значение, которые присваиваются объектам (например, подам). С помощью селекторов пользователь может идентифицировать объект;
- Namespaces - виртуальные кластеры размещенные поверх физического;
- Services - абстракция, которая определяет логический набор подов и политику доступа к ним;
- Annotations - добавление произвольных неидентифицирующих метаданных к объектам;
- ConfigMaps - позволяет переопределить конфигурацию запускаемых подов;
- Secrets - используются для хранения конфиденциальной информации (пароли, токены, ssh-ключи).
Если есть необходимость горизонтального масштабирования, то можно запустить несколько экземпляров Pod'а - в терминологии Kubernetes это называется репликацией. Реплицированные Pod'ы создаются и управляются как единая группа абстракцией, которая называется контроллер (Controller).
Контроллер может управлять несколькими экземплярами Pod'ов - в том числе обеспечивать репликацию и самовосстановление в пределах кластера (при выходе из строя ноды, идентичный экземпляр Pod'а будет запущен на другой ноде). Примером контроллера, который содержит в себе один или несколько экземпляров Pod'а могут быть:
- Deployment
- StatefulSet
- DaemonSet
Пример конфига пода, который могут использовать контроллеры:
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels: app: myapp
spec:
containers:
- name: myapp-container
image: busybox
command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']
Сразу стоит сказать, что деплоймент (Deployment
), который мы рассмотрим в следующей статье, представляет собой абстракцию более высокого уровня, которая управляет ReplicaSets
и предоставляет расширенный функционал управления контейнерами. Разработчики Kubernetes
советуют использовать именно Deployments
, если не нужна специфическая настройка оркестрации (или если вообще не требуется обновление подов). При использовании Deployments
, вам не нужно беспокоиться об управлении создаваемыми ReplicaSets
- деплоймент все сделает за вас.