Добавил:
мой вк: vk.com/truecrimebitch больше работ здесь: https://github.com/alisadex Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Изд. № 29

.pdf
Скачиваний:
0
Добавлен:
11.05.2025
Размер:
1.77 Mб
Скачать

Шаг 5: Развертывание Microservices Sock Shop

Далее начинается развертывание демонстрационного приложения microservices в вашем кластере Kubernetes.

Сначала на уровне управления клонируем git-репозиторий microservices sock shop:

git clone https://github.com/microservices-demo/microservices- demo.git

Необходимо перейти в папку microservices-demo/deploy/kubernetes:

cd microservices-demo/deploy/kubernetes

Затем применим демонстрацию к вашему кластеру Kubernetes:

kubectl apply -f complete-demo.yaml

Появится следующий результат:

deployment "carts-db" created service "carts-db" created deployment "carts" created service "carts" created deployment "catalogue-db" created service "catalogue-db" created deployment "catalogue" created service "catalogue" created deployment "front-end" created service "front-end" created deployment "orders-db" created service "orders-db" created deployment "orders" created service "orders" created deployment "payment" created service "payment" created

deployment "queue-Control Plane" created service "queue-Control Plane" created deployment "rabbitmq" created

service "rabbitmq" created deployment "shipping" created service "shipping" created deployment "user-db" created service "user-db" created deployment "user" created service "user" created

70

Далее важно убедиться в том, что все ваши модули запущены:

watch kubectl get pods --namespace sock-shop

Ctrl-C для выхода.

Когда все модули будут готовы и будут иметь статус “Запущены”, появится следующий результат:

NAMESPACE

NAME

READY

STATUS

RESTARTS

AGE

 

 

 

sock-shop

carts-74f4558cb8-h9924

1/1

Running

0

11m

 

 

 

sock-shop

carts-db-7fcddfbc79-v64fw

1/1

Running

0

11m

 

 

 

sock-shop

catalogue-676d4b9f7c-55n4g

1/1

Running

0

11m

 

 

 

sock-shop

catalogue-db-5c67cdc8cd-hvk96

1/1

Running

0

11m

 

 

 

sock-shop

front-end-977bfd86-hq9x9

1/1

Running

0

11m

 

 

 

sock-shop

orders-787bf5b89f-xfdl6

1/1

Running

0

11m

 

 

 

sock-shop

orders-db-775655b675-gv456

1/1

Running

0

11m

 

 

 

sock-shop

payment-75f75b467f-4zzqs

1/1

Running

0

11m

 

 

 

sock-shop

queue-Control Plane-5c86964795-t8sjg

1/1

Running

0

11m

 

 

sock-shop

rabbitmq-96d887875-lf46w

1/1

Running

0

11m

 

 

 

sock-shop

shipping-5bd69fb4cc-vprmp

1/1

Running

0

11m

 

 

 

sock-shop

user-5bd9b9c468-4rms8

1/1

Running

0

11m

 

 

 

sock-shop

user-db-5f9d89bbbb-r69pd

1/1

Running

0

11m

 

 

 

 

 

 

 

 

Затем войти в приложение SockShop, нажав на вкладку с указанным названием в левом верхнем углу.

Практическая работа успешно завершена [3].

71

Содержание отчета

1.Титульный лист.

2.Цель работы.

4.Задание из практической работы.

5.Скриншоты пройденного тестирования.

6.Скриншоты выполнения практической работы.

7.Краткий ответ на пять контрольных вопросов.

Контрольные вопросы

1.Что такое Kubernetes?

2.На каком этапе разработки ПО применяют Kubernetes?

3.Что такое сluster в Kubernetes?

4.Чем является pod в Kubernetes?

5.Том в Kubernetes - это?

72

5.3.Создание Kubernetes приложения (практическая работа № 2)

Вэтой практической работе вы узнаете о том, как создать приложение

вKubernetes. Вы научитесь разрабатывать, упаковывать и развертывать приложение в кластере Kubernetes, используя контейнеризацию с помощью

Docker.

Цель

Изучение процесса создания приложения в Kubernetes, создания изображения контейнеров, а также последующий запуск приложения на

Kubernetes

Задание

1.Выбрать второй курс (Build a Kubernetes Application | Course 2) и начать выполнение https://kubecampus.io/kubernetes/courses/build-kubernetes- application/lessons/build-a-kubernetes-application/.

2.Пройти тестирование.

3.Выполнить практическую работу.

4.Ответить на контрольные вопросы.

Методические указания

Класс хранилища предоставляет администраторам возможность описать "классы" хранилища, которые они предлагают. Различные классы могут соответствовать уровням качества обслуживания или политикам резервного копирования, или произвольным политикам, определенным администраторами кластера. Kubernetes не имеет четкого представления о том, что представляют классы. В других системах хранения эту концепцию иногда называют "профилями" [5].

Шаг 1 - проверить текущие классы хранения, созданные в кластере:

kubectl get storageclasses

Постоянные тома

Постоянный объем может быть смонтирован на хосте любым способом, поддерживаемым поставщиком ресурсов.

У поставщиков имеются разные возможности, и режимы доступа каждого PV настроены на конкретные режимы, поддерживаемые этим конкретным томом.

73

Например, NFS может поддерживать несколько клиентов для чтения/записи, но определенный PV NFS может быть экспортирован на сервер как доступный только для чтения.

Каждый PV получает свой собственный набор режимов доступа, описывающих возможности этого конкретного PV.

Режимами доступа являются:

ReadWriteOnce - том может быть подключен как для чтения, так и для записи одним узлом;

ReadOnlyMany - том может быть подключен только для чтения многими узлами;

ReadWriteMany - том может быть подключен как доступный для чтения и записи многими узлами.

Необходимо создать PersistentVolume размером в 10 Гб, называемый

"myvolume".

Сделать так, чтобы у объема был режим доступа 'ReadWriteOnce' и

'ReadWriteMany', storageClassName 'local-path', установленный на пути к хосту '/etc/foo'.

hostPath PersistentVolume создать каталог на узле для эмуляции подключения к сети хранилища.

Шаг 2 – создать каталог

Для создания каталога необходимо ввести следующий код [5]:

mkdir /etc/foo

Далее создать PV:

cat<<'EOF' > pv.yaml kind: PersistentVolume apiVersion: v1 metadata:

name: myvolume spec:

storageClassName: local-path capacity:

storage: 10Gi accessModes:

-ReadWriteOnce

-ReadWriteMany hostPath:

path: /etc/foo

EOF

74

Для создания ресурсов в Kubernetes из файлов спецификации YAML использовать команду kubectl apply:

kubectl apply -f pv.yaml

Показать постоянные тома, существующие в кластере:

kubectl get pv

Требования к постоянному объему

Модули не могут напрямую обращаться к постоянным томам, для этого нужно запросить емкость хранилища для наших приложений, привязав запрос на емкость к PVs с помощью PersistentVolumeClaims.

Создание PersistentVolumeClaim, называемого "mypvc", с запросом 4G i

и режимом доступа ReadWriteOnce:

cat<<'EOF' > pvc.yaml

kind: PersistentVolumeClaim apiVersion: v1

metadata: name: mypvc

spec:

storageClassName: local-path accessModes:

- ReadWriteOnce resources:

requests: storage: 4Gi

EOF

Создать PVC:

kubectl apply -f pvc.yaml

Показать сохраняющийся объем требований кластера:

kubectl get pvc

Обратите внимание, что заявка будет оставаться в состоянии ожидания до тех пор, пока она не будет использована приложением. Это связано с тем, что режим привязки тома установлен на WaitForFirstConsumer в классе хранилища 'local-path', используемом PVC.

75

Шаг 3 – создать и поработать с узлом

Далее необходимо создать узел:

cat<<'EOF'> busybox-one.yaml apiVersion: v1

kind: Pod metadata: labels:

run: busybox-one name: busybox-one

spec:

volumes:

-name: my-vol # has to match volumeMounts.name persistentVolumeClaim:

claimName: mypvc

containers:

-args:

-/bin/sh

--c

-sleep 3600 image: busybox name: busybox-one

volumeMounts:

-name: my-vol # has to match volumes.name mountPath: /etc/foo

EOF

Создайте узел:

kubectl apply -f busybox-one.yaml

Затем подключитесь к узлу и скопируйте данные команды '/etc/passwd'

в '/etc/foo/passwd':

kubectl exec busybox-one -it -- cp /etc/passwd /etc/foo/passwd

Поскольку '/etc/foo' смонтирован на томе, который создан ранее, его жизненный цикл не зависит от жизненного цикла модуля. Можно присоединить том к другому модулю, и должна быть возможность получить доступ и прочитать файл, который скопирован на предыдущем шаге.

76

Далее создайте второй узел, который подключается к тому же PV:

cat<<'EOF'> busybox-two.yaml apiVersion: v1

kind: Pod metadata: labels:

run: busybox-two name: busybox-two

spec:

volumes:

-name: my-vol persistentVolumeClaim:

claimName: mypvc

containers:

-args:

-/bin/sh

--c

-sleep 3600 image: busybox name: busybox-two

volumeMounts:

-name: my-vol mountPath: /etc/foo

EOF

Создайте узел:

kubectl apply -f busybox-two.yaml

Подключитесь к нему и подтвердите, что '/etc/foo' содержит файл

'passwd':

kubectl exec busybox-two -- ls /etc/foo

Запуск приложения с отслеживанием состояния с помощью MySQL

Spring PetClinic - это пример приложения, предназначенного для демонстрации того, как стек Spring можно использовать для создания простых, но мощных приложений, ориентированных на базы данных.

Официальная версия Pet Clinic демонстрирует использование Spring

Boot с Spring MVC и Spring Data JPA.

77

Необходимо развернуть стек на Kubernetes, который включает в себя следующие сервисы:

сервер обнаружения;

сервер конфигурации;

интерфейс AngularJS (API-шлюз);

клиенты, ветеринары и службы посещений.

Приложение использует MySQL в качестве серверного хранилища данных.

Клонируйте репозиторий, содержащий файлы объектных ресурсов Kubernetes, из которых состоит наше приложение [5]:

git clone https://github.com/ahmedgabers/petclinic-kubernetes cd petclinic-kubernetes

Создайте переменную окружения REPOSITORY_PREFIX, которая имеет имя репозитория, в котором хранятся образы Docker для служб

PetClinic:

export REPOSITORY_PREFIX=ahmedgabercod

Создайте пространство имен spring-petclinic, содержащее все ресурсы, развертываемые для PetClinic:

kubectl apply -f k8s/init-namespace/

Микросервисы PetClinic взаимодействуют друг с другом посредством сети, предоставляемой службами Kubernetes, которые будут использоваться в наших развертываниях. Введите следующую команду, чтобы создать службы в пространстве имен spring-petclinic:

kubectl apply -f k8s/init-services

Прикладным сервисам нужна реляционная база данных для хранения информации о клиентах, ветеринарах и посещениях. Итак, для настройки серверной части MySQL для каждой службы используется Helm:

Добавить репозиторий bitnami и обновить Helm:

helm repo add bitnami https://charts.bitnami.com/bitnami helm repo update

78

Установить экземпляр базы данных для службы ветеринаров:

helm install vets-db-mysql bitnami/mysql --namespace springpetclinic --version 9.1.4 --set auth.database=service_instance_db

Установить экземпляр базы данных для службы посещений:

helm install visits-db-mysql bitnami/mysql --namespace springpetclinic --version 9.1.4 --set auth.database=service_instance_db

Установить экземпляр базы данных для службы поддержки клиентов:

helm install customers-db-mysql bitnami/mysql --namespace springpetclinic --version 9.1.4 --set auth.database=service_instance_db

В Yaml-файле развертывания есть заполнитель под названием REPOSITORY_PREFIX, поэтому можно развернуть изображения из нашего репозитория, запустив сценарий оболочки [5]:

./scripts/deployToKubernetes.sh

Убедиться, что узлы развернуты:

watch kubectl get pods -n spring-petclinic

Как только все модули будут запущены и готовы на 1/1, необходимо зайти в приложение на вкладке в левом верхнем углу и ознакомиться с интерфейсом.

Ввыпадающем списке "Владельцы" выбрать "Зарегистрироваться" и ввести информацию для регистрации нового клиента.

Убедиться, что поле "Телефон" содержит не более 10 числовых значений без знака "+". Например, (7908645213).

Враскрывающемся списке "Владельцы" выбрать "Все", чтобы подтвердить, что клиент был добавлен.

Проверить данные, сохраненные в базе данных MySQL, можно, запустив временный контейнер с изображением mysql:8.0 и запустив двоичный файл mysql для выполнения запроса [5]:

export MYSQL_PASSWORD=$(kubectl get secret customers-db-mysql -n spring-petclinic -o jsonpath='{.data.mysql-root-password}' | base64 - d)

79