雰囲気エンジニアの備忘録

Atmosphere Engineer's Memorandum

PostsKubernetesにデプロイしたアプリをkialiで監視する

Kubernetesにデプロイしたアプリをkialiで監視する

概要

kubernetesのサービスメッシュのistioと、可視化ツールのkialiを試してみる。

環境

github codespaceを利用。

  • minikube 1.34.0
  • istio 1.24.2

minikubeの起動

minikube start --memory=4096 --cpus=2

istioの導入

istioのインストール&minikubeへのデプロイ。

curl -L https://istio.io/downloadIstio | sh -
cd istio-1.24.2
export PATH=$PWD/bin:$PATH
istioctl install --set profile=demo -y
cd ..

アプリケーションのデプロイ

前回作成した、Streamlit+FlaskのTodoアプリを流用。

アプリをデプロイするための名前空間をtodo-appとして作成する。
作成した名前空間内でistioの追跡が聞くように、istio-injection=enabledのラベルを設定する。

kubectl create namespace todo-app
kubectl label namespace todo-app istio-injection=enabled

テスト用のアプリケーションをデプロイ。

kubectl apply -f k8s/ -n todo-app

以下コマンドで起動したポッドのstatusを確認できる。

kubectl get pod,svc -n todo-app
NAME                           READY   STATUS    RESTARTS        AGE
pod/backend-75db745896-jjlw7   2/2     Running   2 (3m41s ago)   4m
pod/backend-75db745896-p69dw   2/2     Running   1 (3m47s ago)   4m
pod/db-5566db44cc-9r8k9        2/2     Running   0               4m
pod/frontend-6776dd978-2fvw5   2/2     Running   0               4m
pod/frontend-6776dd978-h5kwf   2/2     Running   0               4m

NAME               TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/backend    ClusterIP      10.99.67.199    <none>        5000/TCP         4m
service/db         ClusterIP      10.101.133.18   <none>        5432/TCP         4m
service/frontend   LoadBalancer   10.100.148.37   <pending>     8501:31648/TCP   4m

READYの項目が「2/2」となっている。
これは、デプロイしたコンテナに対するサイドカーコンテナ(Envoyプロキシ)で、以下の追加機能をk8sに付与する。

機能 説明
トラフィック制御 ルーティング、負荷分散、カナリアリリース
セキュリティ mTLS暗号化、認証・認可
可観測性 メトリクス収集、ログ、トレース
耐障害性 フォールトインジェクション、エラー制御
サーキットブレーカー 過負荷時のリクエスト制限

以下コマンドでフロントエンドの実行ポート(8501)をローカルのポート(8080)に転送。
http://localhost:8080でアプリにアクセスできる。

kubectl port-forward svc/frontend 8080:8501 -n todo-app

frontend-app

トラフィックの可視化

istioのアドオン(grafana, jaeger, kiali, loki, prometheus)をデプロイする。
これらは名前空間istio-systemにデプロイされる。

kubectl apply -f istio-1.24.2/samples/addons

kialiダッシュボードを起動。

istioctl dashboard kiali

kiali top

traffic graphタブを表示し、namespace:todo-appにセットする。
すると、todo-app名前空間内に存在するすべてのサービスとアプリケーションが表示される。
△のアイコンがサービスで、□のアイコンがアプリケーション。
立ち上げてすぐの状態だと、サービス間通信がkialiで未取得のため、すべてのサービスとアプリケーションが縦一列に並んでいる。
kiali graph

ブラウザでアプリを適当に操作すると、通信がトラッキングされ、サービス間のエッジが描画される。
このときにレスポンスタイムやステータスなども確認できる。
kiali graph

削除

名前空間ごとアプリケーションを削除する。

kubectl delete namespace sample-app

まとめ

kubernetes上にistioのインストール、簡単なサービスメッシュの可視化を行った。
次回はネットワークの制御を行いたい。