Запуск Bookinfo з Kubernetes
Цей модуль показує вам застосунок, що складається з чотирьох мікросервісів, написаних різними мовами програмування: productpage
, details
, ratings
і reviews
. Ми називаємо складений застосунок Bookinfo
, і ви можете дізнатися більше про нього на сторінці демонстраційного застосунку Bookinfo.
Bookinfo показує остаточний стан застосунку, в якому мікросервіс reviews
має три версії: v1
, v2
, v3
. У цьому модулі застосунок використовує лише версію v1
мікросервісу reviews
. Наступні модулі покращать застосунок, розгорнувши нові версії мікросервісу reviews
.
Розгорніть застосунок і pod для тестування
Встановіть змінну середовища
MYHOST
, щоб зберігати URL застосунку:$ export MYHOST=$(kubectl config view -o jsonpath={.contexts..namespace}).bookinfo.com
Ознайомтесь з
bookinfo.yaml
. Це специфікація розгортання Kubernetes для застосунку. Зверніть увагу на services та deployments.Розгорніть застосунок у вашому кластері Kubernetes:
$ kubectl apply -l version!=v2,version!=v3 -f https://raw.githubusercontent.com/istio/istio/release-1.24/samples/bookinfo/platform/kube/bookinfo.yaml service/details created serviceaccount/bookinfo-details created deployment.apps/details-v1 created service/ratings created serviceaccount/bookinfo-ratings created deployment.apps/ratings-v1 created service/reviews created serviceaccount/bookinfo-reviews created deployment.apps/reviews-v1 created service/productpage created serviceaccount/bookinfo-productpage created deployment.apps/productpage-v1 created
Перевірте статус podʼів:
$ kubectl get pods NAME READY STATUS RESTARTS AGE details-v1-6d86fd9949-q8rrf 1/1 Running 0 10s productpage-v1-c9965499-tjdjx 1/1 Running 0 8s ratings-v1-7bf577cb77-pq9kg 1/1 Running 0 9s reviews-v1-77c65dc5c6-kjvxs 1/1 Running 0 9s
Після того, як чотири podʼа досягнуть статусу
Running
, ви можете масштабувати розгортання. Щоб кожна версія кожного мікросервісу працювала в трьох podʼах, виконайте наступну команду:$ kubectl scale deployments --all --replicas 3 deployment.apps/details-v1 scaled deployment.apps/productpage-v1 scaled deployment.apps/ratings-v1 scaled deployment.apps/reviews-v1 scaled
Перевірте статус podʼів. Зверніть увагу, що у кожного мікросервісу є три podʼа:
$ kubectl get pods NAME READY STATUS RESTARTS AGE details-v1-6d86fd9949-fr59p 1/1 Running 0 50s details-v1-6d86fd9949-mksv7 1/1 Running 0 50s details-v1-6d86fd9949-q8rrf 1/1 Running 0 1m productpage-v1-c9965499-hwhcn 1/1 Running 0 50s productpage-v1-c9965499-nccwq 1/1 Running 0 50s productpage-v1-c9965499-tjdjx 1/1 Running 0 1m ratings-v1-7bf577cb77-cbdsg 1/1 Running 0 50s ratings-v1-7bf577cb77-cz6jm 1/1 Running 0 50s ratings-v1-7bf577cb77-pq9kg 1/1 Running 0 1m reviews-v1-77c65dc5c6-5wt8g 1/1 Running 0 49s reviews-v1-77c65dc5c6-kjvxs 1/1 Running 0 1m reviews-v1-77c65dc5c6-r55tl 1/1 Running 0 49s
Після того, як сервіси досягнуть статусу
Running
, розгорніть тестовий pod, curl, для надсилання запитів до ваших мікросервісів:$ kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.24/samples/curl/curl.yaml
Щоб підтвердити, що застосунок Bookinfo працює, надішліть запит до нього за допомогою команди curl з вашого тестового podʼа:
$ kubectl exec $(kubectl get pod -l app=curl -o jsonpath='{.items[0].metadata.name}') -c curl -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>" <title>Simple Bookstore App</title>
Увімкніть зовнішній доступ до застосунку
Коли ваш застосунок працює, увімкніть доступ клієнтів ззовні кластера. Коли ви успішно налаштуєте наступні кроки, ви зможете отримати доступ до застосунку з оглядача вашого компʼютера.
Налаштуйте ресурс Ingress Kubernetes і отримайте доступ до вебсторінки вашого застосунку
Створіть ресурс Ingress Kubernetes:
$ kubectl apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: bookinfo annotations: kubernetes.io/ingress.class: istio spec: rules: - host: $MYHOST http: paths: - path: /productpage pathType: Prefix backend: service: name: productpage port: number: 9080 - path: /login pathType: Prefix backend: service: name: productpage port: number: 9080 - path: /logout pathType: Prefix backend: service: name: productpage port: number: 9080 - path: /static pathType: Prefix backend: service: name: productpage port: number: 9080 EOF
Оновіть ваш файл конфігурації /etc/hosts
Отримайте IP-адресу для Kubernetes ingress з імʼям
bookinfo
:$ kubectl get ingress bookinfo
У вашому файлі
/etc/hosts
додайте попередню IP-адресу до записів хостів, наданих наступною командою. Ви повинні мати права суперкористувача і, ймовірно, використатиsudo
для редагування/etc/hosts
.$ echo $(kubectl get ingress istio-system -n istio-system -o jsonpath='{..ip} {..host}') $(kubectl get ingress bookinfo -o jsonpath='{..host}')
Отримайте доступ до вашого застосунку
Отримайте доступ до домашньої сторінки застосунку з командного рядка:
$ curl -s $MYHOST/productpage | grep -o "<title>.*</title>" <title>Simple Bookstore App</title>
Вставте результат наступної команди в адресний рядок оглядача:
$ echo http://$MYHOST/productpage
Ви повинні побачити таку вебсторінку:
Вебзастосунок Bookinfo Спостерігайте, як мікросервіси викликають один одного. Наприклад,
reviews
викликає мікросервісratings
, використовуючи URLhttp://ratings:9080/ratings
. Дивіться кодreviews
:private final static String ratings_service = "http://ratings:9080/ratings";
Встановіть нескінченний цикл в окремому вікні термінала, щоб надсилати трафік до вашого застосунку для імітації постійного трафіку від користувачів в реальному світі:
$ while :; do curl -s $MYHOST/productpage | grep -o "<title>.*</title>"; sleep 1; done <title>Simple Bookstore App</title> <title>Simple Bookstore App</title> <title>Simple Bookstore App</title> <title>Simple Bookstore App</title> ...
Ви готові до тестування застосунку.