На прошлом уроке вы создали в веб-интерфейсе Yandex.Cloud кластер Kubernetes® и группу узлов в нём. Теперь с помощью командной строки вы развернёте в кластере приложение: веб-сервер nginx.
- Основное средство взаимодействия с кластером — инструмент kubectl. Установите его по инструкции.
- В веб-консоли Managed Service for Kubernetes войдите в созданный кластер и нажмите кнопку Подключиться. В открывшемся окне скопируйте команду для подключения:
yc managed-kubernetes cluster get-credentials --id cat2oek6hbp7mnhhhr4m --external
Чтобы проверить правильность установки и подключения, посмотрите на конфигурацию:
kubectl config view
Ответ получится примерно таким (IP-адрес сервера и название кластера будут отличаться):
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://178.154.206.242
name: yc-managed-k8s-cat2oek6hbp7mnhhhr4m
contexts:
...
Создание манифеста
Для описания настроек приложения в кластере создадим файл my-nginx.yaml. Такой файл называется манифестом.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx-deployment
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: cr.yandex/crpv7tlcpgb30qpgkiij/ubuntu-nginx:latest
Рассмотрим, из чего он состоит.
- Директива
apiVersion
определяет, для какой версии Kubernetes написан манифест. От версии к версии обозначение может меняться.
apiVersion: apps/v1
- Директива
kind
описывает механизм использования. Она может принимать значения Deployment, Namespace, Service, Pod, LoadBalancer и т. д. Для развёртывания приложения укажите значение Deployment.
kind: Deployment
- Директива
metadata
определяет метаданные приложения: имя, метки (labels), аннотации.
С помощью Меток можно идентифицировать, группировать объекты, выбирать их подмножества. Добавляйте и изменяйте метки при создании объектов или позднее, в любое время.Аннотации используют, чтобы добавить собственные метаданные к объектам.Укажем имя приложения:
metadata:
name: my-nginx-deployment
- В основном блоке
spec
содержится описание объектов Kubernetes.
Директива replicas
определяет масштабирование. Для первого запуска укажите, что приложению нужен один под. Позже вы посмотрите, как приложения масштабируются, и сможете увеличить число подов.Директива selector
определяет, какими подами будет управлять контейнер (подробнее о ней можно прочитать в документации). Поды отбираются с помощью метки (label
).Директива template
определяет шаблон пода. Метка в шаблоне должна совпадать с меткой селектора — nginx
.В шаблоне содержится ещё одна, собственная директива spec
: она задаёт настройки контейнеров, которые будет развёрнуты на поде. Нам нужен один контейнер. Используйте для него образ, созданный ранее с помощью Docker и помещённый в реестр Yandex Container Registry.
spec:
matchLabels:
app: nginx
replicas: 1
selector: ~
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: "cr.yandex/crpv7tlcpgb30qpgkiij/ubuntu-nginx:latest"
Настройки манифеста для развёртывания приложения есть в документации Kubernetes.
Выполнение манифеста
- Для создания или обновления ресурсов в кластере используется команда
apply
. Файл манифеста указывается после флага-f
.
kubectl apply -f my-nginx.yaml
Если результат будет успешным, вы увидите сообщение:
deployment.apps/my-nginx-deployment created
- Чтобы убедиться, что приложение создано, посмотрите список подов:
kubectl get pods
Дождитесь статуса Running:
NAME READY STATUS RESTARTS AGE
my-nginx-deployment-65b9b678b6-zmfww 1/1 Running 0 5m27s
Теперь получите более подробную информацию, выполнив ту же команду с флагом -o wide
:
kubectl get pods -o wide
Вы увидите внутренний IP-адрес, который присвоен поду. Это пригодится, если нужно узнать, где именно развёрнуто приложение.Чтобы получить максимально подробную информацию о запущенном приложении, используйте команду describe
:
kubectl describe deployment/my-nginx-deployment
Масштабирование
- Теперь увеличьте количество подов. Вручную это можно сделать двумя способами:
- изменить файл манифеста, указав в директиве
replicas
нужное число подов, и снова выполнить командуapply
; - если файла манифеста нет под рукой — использовать команду
scale
:
kubectl scale --replicas=3 deployment/my-nginx-deployment
Если всё получится, вы увидите сообщение:
NAME READY STATUS RESTARTS AGE
my-nginx-deployment-65b9b678b6-6whpp 1/1 Running 0 117s
my-nginx-deployment-65b9b678b6-wtph9 1/1 Running 0 117s
my-nginx-deployment-65b9b678b6-zmfww 1/1 Running 0 14m
На следующей практической работе мы посмотрим, как обращаться извне к кластеру Kubernetes и развёрнутому в нём приложению.
Кластер как код
Как видите, управление кластерами Kubernetes отлично вписывается в концепцию Infrastructure as Code: вы можете описать конфигурацию кластера в текстовом файле — манифесте. Вы также можете разворачивать кластеры Kubernetes с помощью Terraform.
Свежие комментарии