Развертывание в Kubernetes
Пререквизиты
Скачайте и установите Docker Desktop, как описано в Get Docker.
Отработайте процесс контейнеризации приложения в Part 2.
Убедитесь, что Kubernetes включен на вашем Docker Desktop:
Mac: Нажмите на значок Docker в строке меню, перейдите к Preferences и убедитесь, что рядом с „Kubernetes“ горит зеленый свет.
Windows: Нажмите на значок Docker в системном трее, перейдите в Настройки и убедитесь, что рядом с «Kubernetes» горит зеленый свет.
Если Kubernetes не запущен, следуйте инструкциям в Orchestration этого руководства, чтобы завершить его настройку.
Введение
Теперь, когда мы продемонстрировали, что отдельные компоненты нашего приложения работают как отдельные контейнеры, пришло время организовать управление ими с помощью оркестратора, например Kubernetes. Kubernetes предоставляет множество инструментов для масштабирования, создания сетей, обеспечения безопасности и обслуживания ваших контейнеризированных приложений, помимо возможностей самих контейнеров.
Чтобы проверить, что наше контейнерное приложение хорошо работает на Kubernetes, мы воспользуемся встроенной средой Kubernetes от Docker Desktop прямо на нашей машине разработки для развертывания нашего приложения, а затем передадим его для запуска на полном кластере Kubernetes в производстве. Среда Kubernetes, созданная Docker Desktop, является полнофункциональной, то есть она обладает всеми возможностями Kubernetes, которыми ваше приложение будет пользоваться на реальном кластере, доступными с удобной машины для разработки.
Описание приложений с помощью Kubernetes YAML
Все контейнеры в Kubernetes планируются как подсы, которые представляют собой группы совместно расположенных контейнеров, разделяющих некоторые ресурсы. Более того, в реалистичном приложении мы почти никогда не создаем отдельные pods; вместо этого большинство наших рабочих нагрузок планируется как deployments, которые представляют собой масштабируемые группы pods, поддерживаемые Kubernetes автоматически. Наконец, все объекты Kubernetes могут и должны быть описаны в манифестах, называемых файлами Kubernetes YAML. Эти файлы YAML описывают все компоненты и конфигурации вашего приложения Kubernetes и могут быть использованы для легкого создания и уничтожения вашего приложения в любой среде Kubernetes.
Вы уже написали очень базовый YAML-файл Kubernetes в части обзора оркестровки этого руководства. Теперь давайте напишем немного более сложный YAML файл для запуска и управления нашим приложением Todo, образ контейнера
getting-started
, созданный в Part 2 из Краткого руководства. Поместите следующее в файл с именемbb.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: bb-demo namespace: default spec: replicas: 1 selector: matchLabels: bb: web template: metadata: labels: bb: web spec: containers: - name: bb-site image: getting-started imagePullPolicy: Never --- apiVersion: v1 kind: Service metadata: name: bb-entrypoint namespace: default spec: type: NodePort selector: bb: web ports: - port: 3000 targetPort: 3000 nodePort: 30001
В этом YAML-файле Kubernetes у нас есть два объекта, разделенные символом
---
:развертывание
, описывающее масштабируемую группу идентичных стручков. В этом случае вы получите только однуреплику
, или копию вашего pod, и в этом pod (который описан под ключомtemplate:
) будет только один контейнер, основанный на вашем образеgetting-started
из предыдущего шага этого руководства.Служба
NodePort
, которая будет направлять трафик с порта 30001 на вашем хосте на порт 3000 внутри подсетей, к которым она направляется, позволяя вам получить доступ к вашему приложению Todo из сети.
Также обратите внимание, что хотя YAML Kubernetes поначалу может показаться длинным и сложным, он почти всегда следует одной и той же схеме:
apiVersion
, которая указывает на API Kubernetes, анализирующий этот объект.род
, указывающий на то, какого рода объектом он являетсяНекоторые
метаданные
, применяющие такие вещи, как имена к вашим объектамСпецификация
spec
, указывающая все параметры и конфигурации вашего объекта.
Разверните и проверьте ваше приложение
В терминале перейдите к месту, где вы создали
bb.yaml
, и разверните ваше приложение в Kubernetes:$ kubectl apply -f bb.yaml
вы должны увидеть результаты, похожие на следующие, указывающие на то, что ваши объекты Kubernetes были созданы успешно:
deployment.apps/bb-demo created service/bb-entrypoint created
Убедитесь, что все работает, составив список развертываний:
$ kubectl get deployments
если все в порядке, ваше развертывание должно быть указано следующим образом:
NAME READY UP-TO-DATE AVAILABLE AGE bb-demo 1/1 1 1 40s
Это указывает на то, что все стручки, которые вы запросили в YAML, работают. Выполните ту же проверку для ваших служб:
$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE bb-entrypoint NodePort 10.106.145.116 <none> 3000:30001/TCP 53s kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 138d
В дополнение к службе по умолчанию
kubernetes
, мы видим нашу службуbb-entrypoint
, принимающую трафик на порт 30001/TCP.Откройте браузер и посетите ваше приложение Todo по адресу
localhost:30001
; вы должны увидеть ваше приложение Todo, такое же, как и когда мы запускали его как отдельный контейнер в Part 2 учебника Quickstart.Как только вы будете удовлетворены, удалите свое заявление:
$ kubectl delete -f bb.yaml
Заключение
На данном этапе мы успешно использовали Docker Desktop для развертывания нашего приложения в полнофункциональной среде Kubernetes на нашей машине разработки. Мы еще мало что сделали с Kubernetes, но теперь дверь открыта; вы можете начать добавлять другие компоненты к своему приложению и использовать все возможности и силу Kubernetes прямо на своей машине.
Помимо развертывания в Kubernetes, мы также описали наше приложение в виде YAML-файла Kubernetes. Этот простой текстовый файл содержит все необходимое для создания нашего приложения в работающем состоянии. Мы можем проверить его в системе контроля версий и поделиться им с коллегами, что позволит нам легко распространять наши приложения на других кластерах (например, на кластерах тестирования и производства, которые, вероятно, появятся после наших сред разработки).
Рекомендации по Kubernetes
Дополнительную документацию по всем новым объектам Kubernetes, использованным в этой статье, можно найти здесь: