istio.io/content/uk/docs/examples/microservices-istio/bookinfo-kubernetes/index.md

10 KiB
Raw Blame History

title overview weight owner test
Запуск Bookinfo з Kubernetes Розгорніть застосунок Bookinfo, який використовує мікросервіс ratings, в Kubernetes. 30 istio/wg-docs-maintainers no

{{< boilerplate work-in-progress >}}

Цей модуль показує вам застосунок, що складається з чотирьох мікросервісів, написаних різними мовами програмування: productpage, details, ratings і reviews. Ми називаємо складений застосунок Bookinfo, і ви можете дізнатися більше про нього на сторінці демонстраційного застосунку Bookinfo.

Bookinfo показує остаточний стан застосунку, в якому мікросервіс reviews має три версії: v1, v2, v3. У цьому модулі застосунок використовує лише версію v1 мікросервісу reviews. Наступні модулі покращать застосунок, розгорнувши нові версії мікросервісу reviews.

Розгорніть застосунок і pod для тестування

  1. Встановіть змінну середовища MYHOST, щоб зберігати URL застосунку:

    {{< text bash >}} export MYHOST=(kubectl config view -o jsonpath={.contexts..namespace}).bookinfo.com {{< /text >}}

  2. Ознайомтесь з [bookinfo.yaml]({{< github_blob >}}/samples/bookinfo/platform/kube/bookinfo.yaml). Це специфікація розгортання Kubernetes для застосунку. Зверніть увагу на services та deployments.

  3. Розгорніть застосунок у вашому кластері Kubernetes:

    {{< text bash >}} $ kubectl apply -l version!=v2,version!=v3 -f {{< github_file >}}/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 {{< /text >}}

  4. Перевірте статус podʼів:

    {{< text bash >}} $ 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 {{< /text >}}

  5. Після того, як чотири podʼа досягнуть статусу Running, ви можете масштабувати розгортання. Щоб кожна версія кожного мікросервісу працювала в трьох podʼах, виконайте наступну команду:

    {{< text bash >}} $ 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 {{< /text >}}

  6. Перевірте статус podʼів. Зверніть увагу, що у кожного мікросервісу є три podʼа:

    {{< text bash >}} $ 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 {{< /text >}}

  7. Після того, як сервіси досягнуть статусу Running, розгорніть тестовий pod, [curl]({{< github_tree >}}/samples/curl), для надсилання запитів до ваших мікросервісів:

    {{< text bash >}} $ kubectl apply -f {{< github_file >}}/samples/curl/curl.yaml {{< /text >}}

  8. Щоб підтвердити, що застосунок Bookinfo працює, надішліть запит до нього за допомогою команди curl з вашого тестового podʼа:

    {{< text bash >}} kubectl exec(kubectl get pod -l app=curl -o jsonpath='{.items[0].metadata.name}') -c curl -- curl -sS productpage:9080/productpage | grep -o ""

    {{< /text >}}

Увімкніть зовнішній доступ до застосунку

Коли ваш застосунок працює, увімкніть доступ клієнтів ззовні кластера. Коли ви успішно налаштуєте наступні кроки, ви зможете отримати доступ до застосунку з оглядача вашого компʼютера.

{{< warning >}}

Якщо ваш кластер працює на GKE, змініть тип сервісу productpage на LoadBalancer:

{{< text bash >}} $ kubectl patch svc productpage -p '{"spec": {"type": "LoadBalancer"}}' service/productpage patched {{< /text >}}

{{< /warning >}}

Налаштуйте ресурс Ingress Kubernetes і отримайте доступ до вебсторінки вашого застосунку

  1. Створіть ресурс Ingress Kubernetes:

    {{< text bash >}} $ 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 {{< /text >}}

Оновіть ваш файл конфігурації /etc/hosts

  1. Отримайте IP-адресу для Kubernetes ingress з імʼям bookinfo:

    {{< text bash >}} $ kubectl get ingress bookinfo {{< /text >}}

  2. У вашому файлі /etc/hosts додайте попередню IP-адресу до записів хостів, наданих наступною командою. Ви повинні мати права суперкористувача і, ймовірно, використати sudo для редагування /etc/hosts.

    {{< text bash >}} echo(kubectl get ingress istio-system -n istio-system -o jsonpath='{..ip} {..host}') $(kubectl get ingress bookinfo -o jsonpath='{..host}') {{< /text >}}

Отримайте доступ до вашого застосунку

  1. Отримайте доступ до домашньої сторінки застосунку з командного рядка:

    {{< text bash >}} $ curl -s $MYHOST/productpage | grep -o ""

    {{< /text >}}
  2. Вставте результат наступної команди в адресний рядок оглядача:

    {{< text bash >}} $ echo http://$MYHOST/productpage {{< /text >}}

    Ви повинні побачити таку вебсторінку:

    {{< image width="80%" link="bookinfo.png" caption="Вебзастосунок Bookinfo" >}}

  3. Спостерігайте, як мікросервіси викликають один одного. Наприклад, reviews викликає мікросервіс ratings, використовуючи URL http://ratings:9080/ratings. Дивіться [код reviews]({{< github_blob >}}/samples/bookinfo/src/reviews/reviews-application/src/main/java/application/rest/LibertyRestEndpoint.java):

    {{< text java >}} private final static String ratings_service = "http://ratings:9080/ratings"; {{< /text >}}

  4. Встановіть нескінченний цикл в окремому вікні термінала, щоб надсилати трафік до вашого застосунку для імітації постійного трафіку від користувачів в реальному світі:

    {{< text bash >}} $ while :; do curl -s $MYHOST/productpage | grep -o ""; sleep 1; done

    ... {{< /text >}}

Ви готові до тестування застосунку.