KubernetesでのBookinfoの実行
このモジュールでは、異なるプログラミング言語で記述された4つのマイクロサービス(productpage
、details
、ratings
、reviews
)で構成されるアプリケーションを紹介します。この複合アプリケーションをBookinfo
と呼び、Bookinfoの例ページで詳細を確認できます。
Bookinfoの例では、reviews
マイクロサービスにv1
、v2
、v3
の3つのバージョンがあるアプリケーションの最終状態を示しています。このモジュールでは、アプリケーションはreviews
マイクロサービスのv1
バージョンのみを使用します。次のモジュールでは、reviews
マイクロサービスの新しいバージョンのデプロイによってアプリケーションを拡張します。
アプリケーションとテストポッドのデプロイ
アプリケーションのURLを保持する
MYHOST
環境変数を設定します。$ export MYHOST=$(kubectl config view -o jsonpath={.contexts..namespace}).bookinfo.com
bookinfo.yaml
をざっと見てください。これはアプリのKubernetesデプロイメント仕様です。サービスとデプロイメントに注目してください。アプリケーションを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
ポッドの状態を確認します。
$ 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
4つのポッドが
Running
状態になったら、デプロイメントをスケールできます。各マイクロサービスの各バージョンを3つのポッドで実行するには、次のコマンドを実行します。$ 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
ポッドの状態を確認します。各マイクロサービスに3つのポッドがあることに注意してください。
$ 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
状態になったら、マイクロサービスへのリクエスト送信に使用するテストポッドであるcurlをデプロイします。$ kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.24/samples/curl/curl.yaml
Bookinfoアプリケーションが実行されていることを確認するには、テストポッドからcurlコマンドを使ってリクエストを送信してください。
$ 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>
アプリケーションへの外部アクセスの有効化
アプリケーションの実行後、クラスタ外部からのクライアントによるアクセスを有効にします。以下の手順を正しく設定すると、ラップトップのブラウザからアプリケーションにアクセスできます。
Kubernetes Ingressリソースの設定とアプリケーションのWebページへのアクセス
Kubernetes Ingressリソースを作成します。
$ 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
設定ファイルの更新
bookinfo
という名前のKubernetes IngressのIPアドレスを取得します。$ kubectl get ingress bookinfo
/etc/hosts
ファイルに、次のコマンドで提供されるホストエントリに上記のIPアドレスを追加します。スーパーユーザー権限が必要であり、/etc/hosts
の編集にはおそらくsudo
を使用する必要があります。スーパーユーザー権限が必要です。$ 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 Webアプリケーション マイクロサービスが互いにどのように呼び出し合うかを観察します。例えば、
reviews
はhttp://ratings:9080/ratings
URLを使用して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> ...
アプリケーションのテストの準備ができました。