Объекты 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 компоненты: мастер компоненты
- Kubernetes компоненты: узловые компоненты (Node Components), Addons (дополнения)
- Kubernetes API
Комментарии
Отправить комментарий