Основы 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 - деплоймент все сделает за вас.