Быстрый старт
Быстрый старт поможет вам начать работу с сервисом и познакомиться с его возможностями.
Пройдя все шаги быстрого старта, вы:
- Создадите небольшой кластер Kubernetes.
- Научитесь подключаться к нему.
- Познакомитесь с Kubernetes и аддонами для него:
- Подключите инструменты для управления и мониторинга.
- Загрузите Docker-образы в реестр Docker.
- Развернете простые приложения на основе загруженных образов, с возможностью использовать хранилище VK Cloud.
- Предоставите доступ к развернутым приложениям с помощью Ingress-контроллера.
- Убедитесь, что эти приложения действительно работают.
Работающий кластер Kubernetes потребляет вычислительные ресурсы.
После прохождения быстрого старта остановите или удалите кластер, если он вам больше не нужен.
1.1. Создайте кластер
-
Перейдите в личный кабинет VK Cloud.
-
Выберите проект, где будет размещен кластер.
-
Выберите регион
Москва
. -
Перейдите в раздел Контейнеры → Кластеры Kubernetes.
-
Если в выбранном регионе пока нет ни одного кластера, нажмите кнопку Создать кластер.
Иначе нажмите кнопку Добавить.
-
На шаге «Конфигурация»:
-
Выберите конфигурацию кластера Dev-среда с самой новой версией Kubernetes.
Обратите внимание на выбранную версию Kubernetes. Это важно при дальнейшей установке
kubectl
. -
Нажмите кнопку Следующий шаг.
-
-
На шаге «Создание кластера» задайте:
-
Имя кластера: например,
vk-cloud-k8s-quickstart
. -
Тип виртуальной машины Master:
Standard-2-8
. -
Зона доступности:
Москва (MS1)
.Конфигурационные файлы для создания и настройки ресурсов в кластере рассчитаны на использование именно этой зоны.
При выборе другой зоны скорректируйте конфигурационные файлы.
-
Сеть:
Создать новую сеть
. -
Назначить внешний IP: убедитесь, что эта опция выбрана.
-
Другие настройки оставьте без изменений.
-
Нажмите кнопку Следующий шаг.
-
-
На шаге «Группы узлов» задайте:
-
Тип Node-узлов:
Standard-4-4
. -
Зона доступности:
Москва (MS1)
.Конфигурационные файлы для создания и настройки ресурсов в кластере рассчитаны на использование именно этой зоны.
При выборе другой зоны скорректируйте конфигурационные файлы.
-
Другие настройки оставьте без изменений.
-
Нажмите кнопку Создать кластер.
-
Дождитесь завершения создания кластера, этот процесс может занять длительное время.
1.2. Установите аддоны в кластер
При установке аддонов Docker Registry и Ingress NGINX для них будут созданы стандартные балансировщики нагрузки.
Использование балансировщиков тарифицируется.
-
Установите аддон
docker-registry
.Запишите данные для доступа к реестру Docker.
-
Установите аддон
kube-prometheus-stack
.Запишите пароль для доступа к веб-интерфейсу Grafana.
-
Установите аддон
ingress-nginx
с параметрами по умолчанию.Запишите плавающий IP-адрес для балансировщика нагрузки.
Далее в командах и конфигурационных файлах для примера будут использоваться следующие значения. Замените их на актуальные для вас.
Параметр | Значение |
---|---|
IP-адрес балансировщика нагрузки для Ingress-контроллера | 192.0.2.2 |
URL эндпоинта реестра Docker | 192.0.2.22:5000 |
Логин пользователя реестра Docker | registry |
Пароль пользователя реестра Docker | registry-password-123456 |
Пароль пользователя admin для Grafana | grafana-password-123456 |
1.3. Настройте окружение для работы с кластером
Настройте хост, с которого вы будете работать с кластером. Это может быть как реальный компьютер, так и виртуальная машина.
Установите на хост следующие инструменты:
-
Браузер.
-
Утилиту kubectl.
Загрузите версию
kubectl
, совпадающую с версией кластера, либо отличающуюся на одну минорную версию в любую сторону.Например, для кластера версии 1.23.6 подходит
kubectl
версий 1.22, 1.23 и 1.24.Подробнее в разделе Подключение к кластеру с помощью kubectl.
-
Утилиту kauthproxy. Подробнее в разделе Подключение к кластеру с помощью Kubernetes Dashboard.
-
Утилиту
client-keystone-auth
. Подробнее в разделе Подключение к кластеру с помощью kubectl. -
Утилиту curl.
-
- Для Windows и macOS: Docker Desktop.
- Для Linux также рекомендуется Docker Desktop, однако вы можете установить и использовать Docker из командной строки.
1.4. Подключитесь к кластеру
-
Добавьте в личном кабинете роль Администратор Kubernetes для пользователя, от имени которого будет выполняться подключение к кластеру:
- Перейдите в личный кабинет VK Cloud.
- Выберите проект и регион, где находится созданный ранее кластер.
- Перейдите в раздел Управление доступами.
- Раскройте меню нужного пользователя и выберите пункт Редактировать.
- Выберите роль Администратор Kubernetes из выпадающего списка.
- Сохраните изменения.
-
Активируйте доступ по API для этого пользователя.
-
Получите kubeconfig для кластера в личном кабинете VK Cloud:
- Перейдите в раздел Контейнеры → Кластеры Kubernetes.
- Найдите в списке нужный кластер, затем в его меню выберите пункт Получить Kubeconfig для доступа к кластеру.
-
Переместите kubeconfig в директорию
~/.kube
, чтобы при использованииkubectl
не указывать дополнительные аргументы.В приведенных ниже командах предполагается, что kubeconfig был загружен в директорию
~/Downloads
под именемmycluster_kubeconfig.yaml
.- Linux/macOS
- Windows
1mkdir ~/.kube && \ 2mv ~/Downloads/mycluster_kubeconfig.yaml ~/.kube/config
-
Проверьте, что
kubectl
может подключиться к кластеру:-
Выполните команду:
kubectl cluster-info
-
Введите пароль пользователя от личного кабинета VK Cloud.
Если кластер работает нормально и
kubectl
настроен на работу с ним, будет выведена похожая информация:1Kubernetes control plane is running at... 2CoreDNS is running at... 3 4To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
-
В кластере был установлен аддон со средствами мониторинга на базе Prometheus и Grafana. Также для всех кластеров Kubernetes VK Cloud доступен Kubernetes Dashboard, который позволяет не только управлять кластером, но и осуществлять его мониторинг.
- Prometheus + Grafana
- Kubernetes Dashboard
-
В отдельной сессии терминала выполните команду:
kubectl -n prometheus-monitoring port-forward service/kube-prometheus-stack-grafana 8001:80
- Не закрывайте эту сессию, иначе доступ к веб-интерфейсу Grafana пропадет.
- Если порт
8001
уже используется другим приложением, скорректируйте команду, указав свободный порт.
-
Откройте веб-интерфейс Grafana:
- В браузере перейдите по URL
http://127.0.0.1:8001/
. - Авторизуйтесь с помощью пары логин/пароль
admin
/grafana-password-123456
. - Если будет запрошена смена пароля, смените его.
- В браузере перейдите по URL
-
Выберите в боковом меню Dashboards → Browse любой преднастроенный дашборд для получения информации о ресурсах кластера.
В кластере был установлен аддон реестра Docker, в котором будут храниться Docker-образы.
Чтобы наиболее полно продемонстрировать возможности кластера, далее будет собран особый Docker-образ с веб-сервером NGINX. Образ основан на plaintext-версии демо-образа от NGINX.
Чтобы поместить собственные образы в реестр Docker кластера:
-
Добавьте реестр Docker в список доверенных реестров:
-
Добавьте в конфигурационный файл Docker
daemon.json
следующий параметр c URL эндпоинта реестра Docker:1{ 2 ... 3 4 "insecure-registries": [ 5 "192.0.2.22:5000" 6 ], 7 8 ... 9}
Расположение этого файла для разных инсталляций Docker Engine приведено в официальной документации Docker.
-
Перезапустите Docker Engine.
- Linux
- Windows
- macOS
Выполните одно из следующих действий:
-
Используйте одну из команд для перезапуска:
sudo systemd restart docker
sudo service docker restart
-
Перезапустите Docker Engine из графического интерфейса Docker Desktop (если он установлен).
-
-
Соберите Docker-образ:
-
Создайте директорию для файлов и перейдите в нее:
- Linux/macOS
- Windows
mkdir ~/image-build && cd ~/image-build
-
Поместите в эту директорию следующие файлы:
Dockerfile
1FROM nginx:mainline-alpine 2 3RUN chmod -R a+w /var/cache/nginx/ \ 4 && touch /var/run/nginx.pid \ 5 && chmod a+w /var/run/nginx.pid \ 6 && rm /etc/nginx/conf.d/* 7 8COPY nginx-config.conf /etc/nginx/conf.d/ 9USER nginx
nginx-config.conf
1server { 2 listen 8080; 3 4 location / { 5 6 set $k8s_pv "not present"; 7 8 if (-d /etc/nginx/k8s_demo_pv/) { 9 set $k8s_pv "present"; 10 } 11 12 default_type text/plain; 13 expires -1; 14 return 200 'Server address: $server_addr:$server_port\nServer name: $hostname\nDate: $time_local\nURI: $request_uri\nRequest ID: $request_id\nRemote address (NGINX Ingress Controller): $remote_addr\nX-Forwarded-For (Request source): $http_x_forwarded_for\n\nK8S Persistent Volume status: $k8s_pv\n'; 15 } 16}
-
Запустите сборку образа:
docker build . -t 192.0.2.22:5000/nginx-k8s-demo:latest
Дождитесь завершения сборки образа.
-
-
Разместите собранный образ в реестре Docker:
-
Выполните вход в реестр:
docker login 192.0.2.22:5000 --username registry --password registry-password-123456
-
Запушьте образ в реестр:
docker push 192.0.2.22:5000/nginx-k8s-demo:latest
-
Проверьте, что образ находится в реестре:
curl -k -X GET -u registry:registry-password-123456 https://192.0.2.22:5000/v2/_catalog
Должна быть выведена похожая информация:
{"repositories":["nginx-k8s-demo"]}
-
Создайте секрет Kubernetes, чтобы можно было получить доступ к загруженному образу из Kubernetes:
kubectl create secret docker-registry k8s-registry-creds --docker-server=192.0.2.22:5000 --docker-username=registry --docker-password=registry-password-123456
-
На основе загруженного в реестр Docker образа nginx-k8s-demo
будет развернуто два приложения: tea
и coffee
.
Для каждого из приложений будут созданы:
- Persistent Volume Claim, чтобы внутрь приложения можно было монтировать тома с данными.
- Deployment, в котором будут заданы:
- Количество реплик.
- Том для монтирования в под.
- Service для обеспечения доступа к приложению. В дальнейшем Ingress-контроллер будет пересылать входящие запросы к этому Service.
Чтобы развернуть приложения:
-
Создайте директорию для файлов и перейдите в нее:
- Linux/macOS
- Windows
mkdir ~/k8s-deployments && cd ~/k8s-deployments
-
Поместите в эту директорию следующие файлы:
deploy-coffee.yaml
1kind: PersistentVolumeClaim 2apiVersion: v1 3metadata: 4 name: k8s-demo-pvc-coffee 5spec: 6 storageClassName: "csi-ceph-hdd-ms1" 7 accessModes: 8 - ReadWriteOnce 9 resources: 10 requests: 11 storage: 1Gi 12 13--- 14apiVersion: apps/v1 15kind: Deployment 16metadata: 17 name: coffee 18spec: 19 replicas: 3 20 selector: 21 matchLabels: 22 app: coffee 23 template: 24 metadata: 25 labels: 26 app: coffee 27 spec: 28 volumes: 29 - name: k8s-pv-coffee 30 persistentVolumeClaim: 31 claimName: k8s-demo-pvc-coffee 32 imagePullSecrets: 33 - name: k8s-registry-creds 34 containers: 35 - name: coffee 36 image: 192.0.2.22:5000/nginx-k8s-demo:latest 37 imagePullPolicy: Always 38 ports: 39 - containerPort: 8080 40 volumeMounts: 41 - name: k8s-pv-coffee 42 mountPath: /etc/nginx/k8s_demo_pv 43 44--- 45apiVersion: v1 46kind: Service 47metadata: 48 name: coffee-svc 49spec: 50 ports: 51 - port: 80 52 targetPort: 8080 53 protocol: TCP 54 name: http 55 selector: 56 app: coffee
deploy-tea.yaml
1kind: PersistentVolumeClaim 2apiVersion: v1 3metadata: 4 name: k8s-demo-pvc-tea 5spec: 6 storageClassName: "csi-ceph-hdd-ms1" 7 accessModes: 8 - ReadWriteOnce 9 resources: 10 requests: 11 storage: 1Gi 12 13--- 14apiVersion: apps/v1 15kind: Deployment 16metadata: 17 name: tea 18spec: 19 replicas: 2 20 selector: 21 matchLabels: 22 app: tea 23 template: 24 metadata: 25 labels: 26 app: tea 27 spec: 28 volumes: 29 - name: k8s-pv-tea 30 persistentVolumeClaim: 31 claimName: k8s-demo-pvc-tea 32 imagePullSecrets: 33 - name: k8s-registry-creds 34 containers: 35 - name: tea 36 image: 192.0.2.22:5000/nginx-k8s-demo:latest 37 imagePullPolicy: Always 38 ports: 39 - containerPort: 8080 40 volumeMounts: 41 - name: k8s-pv-tea 42 mountPath: /etc/nginx/k8s_demo_pv 43 44--- 45apiVersion: v1 46kind: Service 47metadata: 48 name: tea-svc 49spec: 50 ports: 51 - port: 80 52 targetPort: 8080 53 protocol: TCP 54 name: http 55 selector: 56 app: tea
Обратите внимание, что в конфигурационных файлах
deploy-coffee.yaml
иdeploy-tea.yaml
для Persistent Volume Claim указывается класс хранения, соответствующий зоне доступности узла (MS1), на котором планируется развернуть приложения.Попытка разместить на узле в одной зоне доступности приложение, к которому примонтирован том из другой зоны доступности, завершится неудачей.
-
Разверните приложения:
kubectl apply -f deploy-coffee.yaml -f deploy-tea.yaml
-
Проверьте корректность развертывания:
- Постоянных томов
- Рабочей нагрузки
- Сервисов
Воспользуйтесь одним из способов:
-
kubectl
: выполните команду.kubectl get pv
-
Grafana: откройте дашборд Kubernetes → Compute Resources → Persistent Volumes.
-
Kubernetes Dashboard: откройте дашборд Cluster → Persistent Volumes.
Будет видна информация о том, что присутствуют постоянные тома объемом 1 ГБ, созданные при помощи Persistent Volume Claim для deployments
tea
иcoffee
.
В кластере был установлен аддон Ingress-контроллера NGINX, позволяющий маршрутизировать входящие запросы пользователей к развернутым в кластере приложениям.
Чтобы Ingress-контроллер маршрутизировал запросы к соответствующим ресурсам Service, через которые опубликованы демо-приложения tea
и coffee
:
-
Поместите в директорию
~/k8s-deployments
следующий файл:deploy-ingress.yaml
1apiVersion: networking.k8s.io/v1 2kind: Ingress 3metadata: 4 name: cafe-ingress 5spec: 6 ingressClassName: nginx 7 rules: 8 - host: cafe.example.com 9 http: 10 paths: 11 - path: /tea 12 pathType: Prefix 13 backend: 14 service: 15 name: tea-svc 16 port: 17 number: 80 18 - path: /coffee 19 pathType: Prefix 20 backend: 21 service: 22 name: coffee-svc 23 port: 24 number: 80
-
Разверните ресурс Ingress:
kubectl apply -f deploy-ingress.yaml
-
Проверьте корректность развертывания с помощью
kubectl
, выполнив команду:kubectl get ingress
Будет видна информация о том, что есть работающий ресурс Ingress.
Чтобы проверить работоспособность примера, выполните с помощью curl
запросы к IP-адресу 192.0.2.2
балансировщика нагрузки. Связанный с балансировщиком Ingress-контроллер затем доставит эти запросы нужным приложениям.
Запросы:
- Для приложения tea
- Для приложения coffee
curl --resolve cafe.example.com:80:192.0.2.2 http://cafe.example.com/tea
Должна быть выведена похожая информация:
1Server address: 10.100.109.3:8080 2Server name: tea-8697dc7b86-s5vgn 3Date: 24/Aug/2022:09:27:34 +0000 4URI: /tea 5Request ID: ed83bd555afd25c103bfa05ee12cbfff 6Remote address (NGINX Ingress Controller): <IP-адрес Ingress-контроллера> 7X-Forwarded-For (Request source): <IP-адрес хоста, с которого выполнялся запрос> 8 9K8S Persistent Volume status: present
Такой результат демонстрирует, что:
- Можно запускать приложения, использующие Docker-образы из кластерного реестра Docker.
- Можно монтировать хранилище VK Cloud к подам с помощью Persistent Volume Claim.
- Предоставляемый с кластером Ingress-контроллер настроен корректно, т. к. показывает реальный IP-адрес источника запроса.
Работающий кластер потребляет вычислительные ресурсы. Если он вам больше не нужен:
- остановите его, чтобы воспользоваться им позже;
- удалите его навсегда.
- Познакомьтесь со сценариями использования кластера.
- Познакомьтесь с концепциями сервиса контейнеров.
- Познакомьтесь с подробными инструкциями по подключению к кластеру.