Объекты Kubernetes

В этом посте объясняется, как объекты Kubernetes представлены в API Kubernetes, и как их можно выразить в формате .yaml.

Объекты Kubernetes - это постоянные объекты в системе Kubernetes. Kubernetes использует эти объекты для представления состояния вашего кластера. В частности, они могут описать:

  • Какие контейнерные приложения работают (и на каких узлах)
  • Ресурсы, доступные для этих приложений
  • Политики поведения этих приложений, такие как политики перезапуска, обновления и отказоустойчивости.

Объект Kubernetes - это "запись намерений" - как только вы создадите объект, система Kubernetes будет постоянно работать, чтобы гарантировать, что объект существует. Создавая объект, вы фактически сообщаете системе Kubernetes, какой должна быть рабочая нагрузка вашего кластера; это желаемое состояние вашего кластера.

Для работы с объектами Kubernetes - будь то создание, изменение или удаление - вам необходимо использовать API Kubernetes. Например, когда вы используете интерфейс командной строки kubectl, CLI выполняет необходимые вызовы API Kubernetes. Вы также можете использовать API Kubernetes непосредственно в своих собственных программах, используя одну из клиентских библиотек.

Спецификация объекта и статус

Каждый объект Kubernetes включает в себя два вложенных поля объекта, которые управляют конфигурацией объекта: спецификация объекта (object spec) и статус объекта (object status). Спецификация, которую вы должны предоставить, описывает желаемое состояние объекта - характеристики, которые вы хотите, чтобы объект имел. Статус описывает фактическое состояние объекта, предоставляется и обновляется системой Kubernetes. В любой момент времени плоскость управления Kubernetes (Kubernetes Control Plane) активно управляет фактическим состоянием объекта, чтобы соответствовать желаемому состоянию, которое вы указали.

Например, Kubernetes Deployment - это объект, который может представлять приложение, работающее в вашем кластере. При создании развертывания (Deployment) вы можете задать спецификацию развертывания, чтобы указать, что вы хотите, например, чтобы работали три реплики приложения. Система Kubernetes считывает спецификацию развертывания и запускает три экземпляра желаемого приложения, обновляя состояние в соответствии с вашей спецификацией. Если какой-либо из этих экземпляров выйдет из строя (изменение статуса), система Kubernetes реагирует на разницу между спецификацией и статусом, внося исправления - в этом случае запускает экземпляр замены.

Описание объекта Kubernetes

Когда вы создаете объект в Kubernetes, вы должны предоставить спецификацию объекта, которая описывает его желаемое состояние, а также некоторую базовую информацию об объекте (например, имя (name)). Когда вы используете API Kubernetes для создания объекта (напрямую или через kubectl), этот запрос API должен включать эту информацию в виде JSON в теле запроса. Чаще всего вы предоставляете информацию kubectl в файле .yaml. kubectl преобразует информацию в JSON при выполнении запроса API.

Вот пример файла .yaml, в котором показаны обязательные поля и спецификация объекта для развертывания Kubernetes:

application/deployment.yaml

apiVersion: apps/v1 # для версий до 1.9.0 используйте apps/v1beta2
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # сообщает развертыванию запустить 2 pod'а 
              # соотвествующих шаблону (template) 
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

Один из способов создания развертывания с использованием файла .yaml, подобного приведенному выше, заключается в использовании команды kubectl apply в интерфейсе командной строки kubectl, передавая файл .yaml в качестве аргумента. Вот пример:

kubectl apply -f https://k8s.io/examples/application/deployment.yaml --record

Вывод похож на следующий:

deployment.apps/nginx-deployment created

Обязательные поля

В файле .yaml для объекта Kubernetes, который вы хотите создать, вам необходимо установить значения для следующих полей:

  • apiVersion - какую версию API Kubernetes вы используете для создания этого объекта
  • kind - какой объект вы хотите создать
  • metadata - данные, которые помогают однозначно идентифицировать объект, включая строку name (имени), UID и необязательное namespace (пространство имен)

Вам также необходимо указать поле spec объекта. Точный формат спецификации объекта различен для каждого объекта Kubernetes и содержит вложенные поля, специфичные для этого объекта.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Контроллеры в Kubernetes: DaemonSet

Контроллеры в Kubernetes: ReplicaSet

Контроллеры в Kubernetes: StatefulSet