Запуск Bookinfo з Kubernetes

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

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

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

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

    $ export MYHOST=$(kubectl config view -o jsonpath={.contexts..namespace}).bookinfo.com
  2. Ознайомтесь з bookinfo.yaml. Це специфікація розгортання Kubernetes для застосунку. Зверніть увагу на services та deployments.

  3. Розгорніть застосунок у вашому кластері 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
  4. Перевірте статус 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
  5. Після того, як чотири 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
  6. Перевірте статус 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
  7. Після того, як сервіси досягнуть статусу Running, розгорніть тестовий pod, curl, для надсилання запитів до ваших мікросервісів:

    $ kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.24/samples/curl/curl.yaml
  8. Щоб підтвердити, що застосунок 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 і отримайте доступ до вебсторінки вашого застосунку

  1. Створіть ресурс 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

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

    $ kubectl get ingress bookinfo
  2. У вашому файлі /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}')

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

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

    $ curl -s $MYHOST/productpage | grep -o "<title>.*</title>"
    <title>Simple Bookstore App</title>
  2. Вставте результат наступної команди в адресний рядок оглядача:

    $ echo http://$MYHOST/productpage

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

    Вебзастосунок Bookinfo
    Вебзастосунок Bookinfo
  3. Спостерігайте, як мікросервіси викликають один одного. Наприклад, reviews викликає мікросервіс ratings, використовуючи URL http://ratings:9080/ratings. Дивіться код reviews:

    private final static String ratings_service = "http://ratings:9080/ratings";
  4. Встановіть нескінченний цикл в окремому вікні термінала, щоб надсилати трафік до вашого застосунку для імітації постійного трафіку від користувачів в реальному світі:

    $ 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>
    ...

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

Чи була ця інформація корисною?
Чи є у вас пропозиції щодо покращення?

Дякуємо за ваш відгук!