Kubernetes上のサービスグリッドIstio-分散追跡編
13294 ワード
要旨:2017年5月、Google、IBM、LyftはオープンソースサービスグリッドフレームワークIstioを発表し、マイクロサービスの接続、管理、監視、安全保護を提供した.Istioはサービス間通信のインフラストラクチャ層を提供し、応用ロジックとサービスアクセスにおけるバージョン管理、セキュリティ保護、フェイルオーバ、遠隔測定の監視などの断面の問題をデカップリングした.
マイクロサービスアーキテクチャは複雑なシステムをいくつかの小さなサービスに分割し、各サービスは独立して開発、導入、伸縮することができる.マイクロサービスアーキテクチャとコンテナ(Docker/Kubernetes)は天作の合であり、マイクロサービスの提供をさらに簡素化し、システム全体の弾力性と丈夫性を強化することができる.しかしながら、大量のマイクロサービスからなる分散アプリケーションアーキテクチャは、メンテナンス、デバッグ、およびセキュリティ管理の複雑さを増大させる.上記の課題を解決するために、Spring CloudやDubbo/EDASなどのマイクロサービスフレームワークは、サービスガバナンス能力をプログラミングフレームワークに内蔵している.
2017年5月、Google、IBM、LyftはオープンソースサービスグリッドフレームワークIstioを発表し、マイクロサービスの接続、管理、監視、セキュリティ保護を提供した.Istioはサービス間通信のインフラストラクチャ層を提供し、応用ロジックとサービスアクセスにおけるバージョン管理、セキュリティ保護、フェイルオーバ、遠隔測定の監視などの断面の問題をデカップリングした.
Istioはギリシャ語で「出航」を意味し、非常に若いプロジェクトであるにもかかわらず大きな注目を集め、その生態発展は非常に急速である.今日はまず、分散型サービス追跡(Distributed Tracing)に関する進展に注目します.
本文はIstio公式文書の内容を参考にした.https://istio.io/docs/tasks/telemetry/distributed-tracing.html
Istioのインストール
Kubernetesクラスタの構成
MinikubeまたはアリクラウドコンテナサービスKubernetesクラスタを使用して検証できます.
Minikubeのインストール方法については、Minikube-Kubernetesローカル実験環境を参照してください.
Initializers方式で導入するため、次のコマンドを実行して、対応するInitializersアクセス制御プラグインを開く必要があります.
アリクラウドコンテナサービスの1.8+バージョン以上のKubernetesクラスタには、Initializersプラグインが内蔵されており、追加の構成作業を必要としません.
注意:Istioを導入すると、各Podにsidecarが注入され、サービス通信を引き継ぐため、独立したテスト環境で検証することをお勧めします.
クラスタ管理ページ情報に基づいて、対応する接続情報を構成する必要があります.
Istioリリースをダウンロード
Istio releasesページで最新のインストールパッケージを取得し、ローカルに解凍するか、次のコマンドを実行します.
次のコマンドを実行します.
配備
デプロイが完了したら、Istioコンポーネントが正常にデプロイされたかどうかを確認するには、次のコマンドを使用します.
すべてのPodが実行状態に入るのを待って、Istioはすでに配備が完了しました.
分散型サービス追跡
導入テストアプリケーションBookInfo
BookInfoガイドを参照して、アプリケーションを展開します.このアプリケーションはいくつかのマイクロサービスから構成され、各マイクロサービスはコンテナ方式で導入される.
次のコマンドを実行します.
MiniKube環境では、次のコマンドを実行して対応するアクセスアドレスを取得します.
アリクラウドKubernetesクラスタはすでに各クラスタにSLBとIngressを構成している.
対応するアドレスは以下の方法で得ることができる.
次のコマンドに従います.
分散型サービス追跡の導入
分散追跡システムは、パフォーマンスの問題を診断し、システムの障害を分析するための利器として、サービス間呼び出しチェーンを観察するのに役立ちます.
Istio生態はZipkinとJaegerを含む異なる分布追跡システムのサポートを実現した.
Istio v0.3 Jaegerに対する良好なサポートを提供し、テスト方法は以下の通りである.
導入が完了すると、ポートマッピングを使用してJaegerコントロールパネルにアクセスできます.
ブラウザで開くhttp://localhost:16686
複数のテストアプリケーションにアクセスすると、サービスの呼び出しチェーンが明確に表示されます.
Istio分散トレース実装
IstioサービスグリッドのコアはEnvoyであり、高性能のオープンソースL 7エージェントと通信バスである.Istioでは、各マイクロサービスがEnvoy Sidecarに注入され、このインスタンスは、すべての送信および送信のネットワークトラフィックの処理を担当する.したがって、各Envoy Sidecarは、すべてのサービス間API呼び出しを監視し、各サービス呼び出しに要する時間と、正常に完了したかどうかを記録することができる.
マイクロサービスが外部呼び出しを開始するたびに、クライアントEnvoyは新しいspanを作成します.1つのspanは、要求者(クライアント)が要求を発行してからサービス側の応答を受信するまで、マイクロサービス間の完全なインタラクションプロセスのセットを表す.
サービスインタラクション中、クライアントは要求の開始時間と応答の受信時間を記録し、サーバ側Envoyは要求の受信時間と応答の戻り時間を記録する.
各Envoyは、独自のspanビュー情報を分散トラッキングシステムにパブリッシュします.1つのマイクロサービスが要求を処理する場合、他のマイクロサービスを呼び出す必要があり、因果関連spanの作成を招き、完全なtraceを形成することができる.これは、要求メッセージから次のヘッダを収集および転送するためにアプリケーションによって必要とされる.
通信リンク内のEnvoyでは、対応するヘッダを切り取り、処理、転送することができる.
まとめ
Istioは良好な拡張メカニズムと強力な生態を借りてService Meshの応用と普及を加速させている.Weave Scope、Istio Dashboard、およびIstio-Analyticsプロジェクトは、上述した以外にも、豊富な呼び出しリンクの可視化および分析能力を提供します.
著者:易立
テキストリンク:http://click.aliyun.com/m/41483/
マイクロサービスアーキテクチャは複雑なシステムをいくつかの小さなサービスに分割し、各サービスは独立して開発、導入、伸縮することができる.マイクロサービスアーキテクチャとコンテナ(Docker/Kubernetes)は天作の合であり、マイクロサービスの提供をさらに簡素化し、システム全体の弾力性と丈夫性を強化することができる.しかしながら、大量のマイクロサービスからなる分散アプリケーションアーキテクチャは、メンテナンス、デバッグ、およびセキュリティ管理の複雑さを増大させる.上記の課題を解決するために、Spring CloudやDubbo/EDASなどのマイクロサービスフレームワークは、サービスガバナンス能力をプログラミングフレームワークに内蔵している.
2017年5月、Google、IBM、LyftはオープンソースサービスグリッドフレームワークIstioを発表し、マイクロサービスの接続、管理、監視、セキュリティ保護を提供した.Istioはサービス間通信のインフラストラクチャ層を提供し、応用ロジックとサービスアクセスにおけるバージョン管理、セキュリティ保護、フェイルオーバ、遠隔測定の監視などの断面の問題をデカップリングした.
Istioはギリシャ語で「出航」を意味し、非常に若いプロジェクトであるにもかかわらず大きな注目を集め、その生態発展は非常に急速である.今日はまず、分散型サービス追跡(Distributed Tracing)に関する進展に注目します.
本文はIstio公式文書の内容を参考にした.https://istio.io/docs/tasks/telemetry/distributed-tracing.html
Istioのインストール
Kubernetesクラスタの構成
MinikubeまたはアリクラウドコンテナサービスKubernetesクラスタを使用して検証できます.
Minikubeのインストール方法については、Minikube-Kubernetesローカル実験環境を参照してください.
Initializers方式で導入するため、次のコマンドを実行して、対応するInitializersアクセス制御プラグインを開く必要があります.
minikube start \
--memory 4096 \
--registry-mirror=https://registry.docker-cn.com \
--extra-config=apiserver.Admission.PluginNames="Initializers,NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota"
アリクラウドコンテナサービスの1.8+バージョン以上のKubernetesクラスタには、Initializersプラグインが内蔵されており、追加の構成作業を必要としません.
注意:Istioを導入すると、各Podにsidecarが注入され、サービス通信を引き継ぐため、独立したテスト環境で検証することをお勧めします.
クラスタ管理ページ情報に基づいて、対応する接続情報を構成する必要があります.
Istioリリースをダウンロード
Istio releasesページで最新のインストールパッケージを取得し、ローカルに解凍するか、次のコマンドを実行します.
curl -L https://git.io/getLatestIstio | sh -
次のコマンドを実行します.
# Istio
cd istio-0.3.0
# istioctl client PATH
export PATH=$PWD/bin:$PATH
配備
# Istio
kubectl apply -f install/kubernetes/istio.yaml
# Istio initializer
kubectl apply -f install/kubernetes/istio-initializer.yaml
デプロイが完了したら、Istioコンポーネントが正常にデプロイされたかどうかを確認するには、次のコマンドを使用します.
$ kubectl get svc,pod -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc/istio-ingress LoadBalancer 10.0.0.241 80:31411/ TCP,443:31972/TCP 22m
svc/istio-mixer ClusterIP 10.0.0.146 9091/ TCP,15004/TCP,9093/TCP,9094/TCP,9102/TCP,9125/UDP,42422/TCP 22m
svc/istio-pilot ClusterIP 10.0.0.253 15003/ TCP,443/TCP 22m
NAME READY STATUS RESTARTS AGE
po/istio-ca-76dddbd695-jzgq4 1/1 Running 0 22m
po/istio-ingress-85fb769c4d-8jr4r 1/1 Running 0 22m
po/istio-initializer-7fcb8b7454-f68h8 1/1 Running 0 10s
po/istio-mixer-587fd4bbdb-wpbfr 3/3 Running 0 22m
po/istio-pilot-7db8db896c-wdmhp 2/2 Running 0 22m
すべてのPodが実行状態に入るのを待って、Istioはすでに配備が完了しました.
分散型サービス追跡
導入テストアプリケーションBookInfo
BookInfoガイドを参照して、アプリケーションを展開します.このアプリケーションはいくつかのマイクロサービスから構成され、各マイクロサービスはコンテナ方式で導入される.
次のコマンドを実行します.
kubectl apply -f samples/bookinfo/kube/bookinfo.yaml
MiniKube環境では、次のコマンドを実行して対応するアクセスアドレスを取得します.
export GATEWAY_URL=$(kubectl get po -l istio=ingress -n istio-system -o 'jsonpath={.items[0].status.hostIP}'):$(kubectl get svc istio-ingress -n istio-system -o 'jsonpath={.spec.ports[0].nodePort}')
アリクラウドKubernetesクラスタはすでに各クラスタにSLBとIngressを構成している.
$ kubectl get ingress -o wide
NAME HOSTS ADDRESS PORTS AGE
gateway * 112.74.xxx.xxx 80 2m
対応するアドレスは以下の方法で得ることができる.
export GATEWAY_URL=$(kubectl get ingress -o wide -o jsonpath={.items[0].status.loadBalancer.ingress[0].ip})
次のコマンドに従います.
curl -o /dev/null -s -w "%{http_code}
" http://${GATEWAY_URL}/productpage
200
に戻ると、アプリケーションが正常に導入されたことを示し、ブラウザでhttp://${GATEWAY_URL}/productpage
を開くことでアプリケーションにアクセスできます.分散型サービス追跡の導入
分散追跡システムは、パフォーマンスの問題を診断し、システムの障害を分析するための利器として、サービス間呼び出しチェーンを観察するのに役立ちます.
Istio生態はZipkinとJaegerを含む異なる分布追跡システムのサポートを実現した.
Istio v0.3 Jaegerに対する良好なサポートを提供し、テスト方法は以下の通りである.
kubectl apply -n istio-system -f https://raw.githubusercontent.com/jaegertracing/jaeger-kubernetes/master/all-in-one/jaeger-all-in-one-template.yml
導入が完了すると、ポートマッピングを使用してJaegerコントロールパネルにアクセスできます.
kubectl port-forward -n istio-system $(kubectl get pod -n istio-system -l app=jaeger -o jsonpath='{.items[0].metadata.name}') 16686:16686 &
ブラウザで開くhttp://localhost:16686
複数のテストアプリケーションにアクセスすると、サービスの呼び出しチェーンが明確に表示されます.
Istio分散トレース実装
IstioサービスグリッドのコアはEnvoyであり、高性能のオープンソースL 7エージェントと通信バスである.Istioでは、各マイクロサービスがEnvoy Sidecarに注入され、このインスタンスは、すべての送信および送信のネットワークトラフィックの処理を担当する.したがって、各Envoy Sidecarは、すべてのサービス間API呼び出しを監視し、各サービス呼び出しに要する時間と、正常に完了したかどうかを記録することができる.
マイクロサービスが外部呼び出しを開始するたびに、クライアントEnvoyは新しいspanを作成します.1つのspanは、要求者(クライアント)が要求を発行してからサービス側の応答を受信するまで、マイクロサービス間の完全なインタラクションプロセスのセットを表す.
サービスインタラクション中、クライアントは要求の開始時間と応答の受信時間を記録し、サーバ側Envoyは要求の受信時間と応答の戻り時間を記録する.
各Envoyは、独自のspanビュー情報を分散トラッキングシステムにパブリッシュします.1つのマイクロサービスが要求を処理する場合、他のマイクロサービスを呼び出す必要があり、因果関連spanの作成を招き、完全なtraceを形成することができる.これは、要求メッセージから次のヘッダを収集および転送するためにアプリケーションによって必要とされる.
x-request-id
x-b3-traceid
x-b3-spanid
x-b3-parentspanid
x-b3-sampled
x-b3-flags
x-ot-span-context
通信リンク内のEnvoyでは、対応するヘッダを切り取り、処理、転送することができる.
Client Tracer Server Tracer
┌──────────────────┐ ┌──────────────────┐
│ │ │ │
│ TraceContext │ Http Request Headers │ TraceContext │
│ ┌──────────────┐ │ ┌───────────────────┐ │ ┌──────────────┐ │
│ │ TraceId │ │ │ X─B3─TraceId │ │ │ TraceId │ │
│ │ │ │ │ │ │ │ │ │
│ │ ParentSpanId │ │ Extract │ X─B3─ParentSpanId │ Inject │ │ ParentSpanId │ │
│ │ ├─┼─────────>│ ├────────┼>│ │ │
│ │ SpanId │ │ │ X─B3─SpanId │ │ │ SpanId │ │
│ │ │ │ │ │ │ │ │ │
│ │ Sampled │ │ │ X─B3─Sampled │ │ │ Sampled │ │
│ └──────────────┘ │ └───────────────────┘ │ └──────────────┘ │
│ │ │ │
└──────────────────┘ └──────────────────┘
まとめ
Istioは良好な拡張メカニズムと強力な生態を借りてService Meshの応用と普及を加速させている.Weave Scope、Istio Dashboard、およびIstio-Analyticsプロジェクトは、上述した以外にも、豊富な呼び出しリンクの可視化および分析能力を提供します.
著者:易立
テキストリンク:http://click.aliyun.com/m/41483/