Упражнение. Развертывание контейнера микрослужб в Kubernetes
Kubernetes запускает контейнеры для вас. Вы описываете, что нужно сделать Kubernetes с помощью YAML-файла. В этом упражнении вы создадите файл, чтобы можно было развернуть и запустить бэкенд-сервис в Kubernetes.
Важный
Прежде чем продолжить, необходимо убедиться, что у вас установлена реализация Kubernetes. Мы будем использовать реализацию k3d, выполняемую в пространстве кода. Мы начнем лабораторную работу, установив эту реализацию.
Установка средств и реализации Kubernetes
Необходимо установить как средство kubectl, так и реализацию Kubernetes k3d.
В интерфейсе Codespace, перейдите на вкладку ТЕРМИНАЛ, а затем выполните следующие команды для установки необходимых компонентов:
sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl
Затем, чтобы скачать ключ подписи для репозиториев пакетов Kubernetes, выполните следующие команды:
sudo mkdir /etc/apt/keyrings curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
Если вы получите сообщение об ошибке, что каталог уже существует, выполните команду
curl
отдельно.Добавьте репозиторий Kubernetes в конфигурацию apt:
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
Теперь можно установить средство kubectl:
sudo apt-get update sudo apt-get install -y kubectl
Наконец, установите k3d реализацию Kubernetes и создайте кластер:
curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash k3d cluster create devcluster --config k3d.yml
Создание файла развертывания для серверной службы
Развертывание контейнера управления файлами можно создать в Kubernetes с помощью YAML-файла. Создадим файл для развертывания серверной службы.
Создайте новый файл в папке donet-kubernetes codespace с именем backend-deploy.yml.
Скопируйте следующий текст в файл и сохраните его.
--- apiVersion: apps/v1 kind: Deployment metadata: name: productsbackend spec: replicas: 1 template: metadata: labels: app: productsbackend spec: containers: - name: productsbackend image: [YOUR DOCKER USER NAME]/productservice:latest ports: - containerPort: 80 env: - name: ASPNETCORE_URLS value: http://*:80 selector: matchLabels: app: productsbackend --- apiVersion: v1 kind: Service metadata: name: productsbackend spec: type: NodePort ports: - port: 80 targetPort: 80 nodePort: 32001 selector: app: productsbackend
Замените заполнитель
[YOUR DOCKER USER NAME]
фактическим именем пользователя Docker.
Этот файл выполняет несколько действий.
Первая часть определяет спецификацию развертывания для контейнера, который будет развернут в Kubernetes. Он задает одну реплику, указывает, где найти образ контейнера, какие порты открыть в нем, и устанавливает некоторые переменные среды. Эта первая часть также определяет метки и имена, которые можно использовать для ссылки на контейнер и спецификацию.
Вторая часть затем определяет, что контейнер работает как служба Kubernetes NodePort. Для этого модуля вам не нужно понимать все особенности NodePorts. Однако следует знать, что этот тип службы предоставляет внешний IP-адрес, чтобы можно было протестировать службу за пределами кластера.
Развертывание и запуск серверной микрослужбы
Затем разверните и запустите микрослужбу.
На вкладке терминала выполните следующую команду:
kubectl apply -f backend-deploy.yml
Эта команда сообщает Kubernetes запустить созданный файл. Он скачивает образ из Docker Hub и создает контейнер.
Команда
kubectl apply
возвращается быстро. Но создание контейнера может занять некоторое время. Чтобы просмотреть ход выполнения, используйте следующий код.kubectl get pods
В получившемся выходном результате у вас есть строка с productsbackend, за которой следует строка случайных символов в столбце NAME. Когда все готово, 1/1 в столбце ГОТОВО и Запуск в столбце СТАТУС.
Чтобы протестировать службу, перейдите на вкладку ПОРТЫ рядом с локальным адресом порта серверной части, щелкните значок глобуса. В браузере откроется новая вкладка на этом адресе.
Чтобы запросить некоторые продукты, к адресу добавьте /api/product, а затем нажмите клавишу ВВОД. В формате JSON должны отображаться некоторые сведения о продукте.
[ { "id": 1, "name": "Solar Powered Flashlight", "description": "A fantastic product for outdoor enthusiasts", "price": 19.99, "imageUrl": "product1.png" }, { "id": 2, "name": "Hiking Poles", "description": "Ideal for camping and hiking trips", "price": 24.99, "imageUrl": "product2.png" }, { "id": 3, "name": "Outdoor Rain Jacket", "description": "This product will keep you warm and dry in all weathers", "price": 49.99, "imageUrl": "product3.png" }, ...
Создание файла развертывания и запуск интерфейсной службы
Как и серверная служба, нам нужен файл развертывания для внешнего интерфейса.
Создайте новый файл в папке donet-kubernetes с именем frontend-deploy.yml
Вставьте следующий код в файл:
--- apiVersion: apps/v1 kind: Deployment metadata: name: storefrontend spec: replicas: 1 template: metadata: labels: app: storefrontend spec: containers: - name: storefrontend image: [YOUR DOCKER USER NAME]/storeimage:latest ports: - containerPort: 80 env: - name: ASPNETCORE_URLS value: http://*:80 - name: ProductEndpoint value: http://productsbackend selector: matchLabels: app: storefrontend --- apiVersion: v1 kind: Service metadata: name: storefrontend spec: type: NodePort ports: - port: 80 targetPort: 80 nodePort: 32000 selector: app: storefrontend
Замените заполнитель
[YOUR DOCKER USERNAME]
фактическим именем пользователя Docker.Обратите внимание, что этот файл похож на тот, который мы создали для серверной микрослужбы. Существует два различия:
- Мы указываем другой контейнер для работы под значением развертывания
spec.template.spec.containers.image
. - В разделе
spec.template.spec.containers.env
есть новая переменная среды. Код в приложении storefrontend вызывает серверную часть, но поскольку мы не указали полное доменное имя (FQDN), мы не знаем IP-адрес серверной микрослужбы; поэтому мы используем имя, указанное в узлеmetadata.name
Deployment
. Kubernetes заботится о остальных.
- Мы указываем другой контейнер для работы под значением развертывания
Разверните контейнер в Kubernetes с помощью следующей команды:
kubectl apply -f frontend-deploy.yml
Снова можно использовать
kubectl get pods
для просмотра состояния развертывания. После того как в строке для storefrontend в столбце Статус отображается Выполнение, все готово.Чтобы протестировать службу фронтенда, перейдите на вкладку ПОРТЫ, а затем справа от локального адреса для порта Фронтенд выберите значок глобуса. В браузере отображается домашняя страница.
Выберите продукты. В каталоге отображаются товары Компании Contoso.
В этом упражнении вы создали файл развертывания, описывающий именно то, как контейнеры будут выполняться в Kubernetes. Затем вы заставили Kubernetes скачать образ из Docker Hub и запустить контейнеры.