Упражнение. Развертывание контейнера микрослужб в Kubernetes
Kubernetes отвечает за работу контейнеров. Вы описываете, что нужно сделать Kubernetes, с помощью YAML-файла. В этом упражнении описывается создание файла, чтобы можно было развернуть и запустить серверную службу в Kubernetes.
Внимание
Прежде чем продолжить, необходимо убедиться, что у вас установлена реализация Kubernetes. Мы будем использовать реализацию k3d , выполняемую в пространстве кода. Мы начнем лабораторию, установив эту реализацию.
Установка средств и реализации Kubernetes
Необходимо установить как средство kubectl, так и реализацию Kubernetes k3d:
В пространстве кода перейдите на вкладку ТЕРМИНАЛ , а затем выполните следующие команды, чтобы установить необходимые компоненты:
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
Наконец, установите реализацию Kubernetes k3d и создайте кластер:
curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash k3d cluster create devcluster --config k3d.yml
Создание файла развертывания для серверной службы
Развертывание контейнера управления файлами можно создать в Kubernetes с помощью YAML-файла. Давайте создадим файл для развертывания серверной службы.
Создайте файл в папке donet-kubernetes пространства кода с именем 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. Он задает один реплика, где найти образ контейнера, который порты будут открываться в контейнере, и задает некоторые переменные среды. Эта первая часть также определяет метки и имена, которые можно использовать для ссылки на контейнер и спецификацию.
Вторая часть определяет, что контейнер выполняется в качестве службы NodePort Kubernetes. Для этого модуля вам не нужно понимать все особенности NodePorts. Однако следует знать, что этот тип службы предоставляет внешний IP-адрес, чтобы можно было протестировать службу за пределами кластера.
Развертывание и запуск серверной микрослужбы
Затем разверните и запустите микрослужбу.
На вкладке ТЕРМИНАЛА выполните следующую команду:
kubectl apply -f backend-deploy.yml
Эта команда указывает Kubernetes запустить созданный файл. Он скачивает образ из Docker Hub и создает контейнер.
Команда
kubectl apply
быстро возвращается. Но создание контейнера может занять некоторое время. Чтобы просмотреть сведения о ходе выполнения, используйте следующий код.kubectl get pods
В результирующем выходных данных есть строка с серверной частью продуктов, за которой следует строка случайных символов в столбце NAME. Когда все готово, в столбце READY и в столбце STATUS есть значение 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
можно просмотреть сведения о состоянии развертывания. Когда строка для магазина отображается в столбце STATUS , все готово для перехода.Чтобы проверить интерфейсную службу, перейдите на вкладку "ПОРТЫ ", а затем справа от локального адреса порта переднего плана выберите значок глобуса. В браузере отображается домашняя страница.
Выберите Продукты. В каталоге отображаются товары Компании Contoso.
В этом упражнении вы создали файл развертывания, который точно описывает способ выполнения контейнеров в Kubernetes. Затем вы скачали образ Kubernetes из Docker Hub и начали контейнеры.