ПР. Первое приложение в кластере
Кратко:
- Развертывание приложения - веб-сервера NGINX в кластере Kubernetes с помощью командной строки.
- Основное средство взаимодействия с кластером - инструмент kubectl.
- Создание манифеста для описания настроек приложения в кластере.
- Выполнение манифеста с помощью команды kubectl apply.
- Получение подробной информации о развернутом приложении с помощью команд kubectl get pods и kubectl describe.
- Масштабирование приложения с помощью изменения файла манифеста или команды kubectl scale.
- Управление кластерами Kubernetes в концепции Infrastructure as Code и возможность развертывания с помощью Terraform.
Практическая работа. Первое приложение в кластере
На прошлом уроке вы создали в консоли управления Yandex Cloud кластер Kubernetes и группу узлов в нём. Теперь с помощью командной строки вы развернете в кластере приложение — веб-сервер NGINX.
-
Основное средство взаимодействия с кластером — инструмент kubectl. Установите его по инструкции.
-
В консоли управления войдите в созданный кластер Managed Service for Kubernetes и нажмите кнопку Подключиться. В открывшемся окне скопируйте команду для подключения:
yc managed-kubernetes cluster get-credentials \ --id <идентификатор_кластера> \ --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/<идентификатор_реестра>/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/<идентификатор_реестра>/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
- изменить файл манифеста, указав в директиве
Если всё получится, в выводе команды
kubectl get pods вы увидите сообщение:
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.