-
分散トレーシング(OpenTelemetry / AWS X-Ray)
前回はOpenTelemetryとJaegerを使って、エンドツーエンドでトレース情報を収集・可視化をしました。 ここで利用したJaegerは分散トレーシングに特化したOSSプロダクトで高機能ではありますが、実際に運用する場合は、その構成を慎重に検討する必要があります。 例えば、以下の対応が必須で必要となるでしょう...
記事を読む -
分散トレーシング(OpenTelemetry / Jaeger)
今回はアプリケーションのパフォーマンスに焦点を当てます。 アプリケーションのパフォーマンスを分析するにはどうすれば良いでしょうか? 従来は処理時間等の情報をログに残し、これを集計することが多かったと思います。 単一サービスで構成されるシステムではこれで事足りることが多いですが、多数のサービスで構成されるマイクロサービスとなるとそうはいきません...
記事を読む -
ログ収集・分析(Fluent Bit / Amazon CloudWatch)
前回はログの収集にFluent Bit、その分析にAWS OpenSearchを使用しました。 AWS OpenSearchは、非常に高機能な検索とリッチなUIを提供しますが、デメリットもあります。 まず、OpenSearch自体のセットアップ作業が別途必要です。特に、高スループットが予想される商用環境では、マルチノードでクラスターを組む必要がありますし、構成に応じてかなりのコストが発生します...
記事を読む -
ログ収集・分析(Fluent Bit / AWS OpenSearch)
今回はログの収集と分析に焦点を当てます。 いつの時代もアプリケーションが出力するログは、障害解析やアクセス/証跡管理に欠かせません。 マイクロサービスのような分散アーキテクチャを採用した場合、1つのアプリケーションは複数のサービスで構成されることになります...
記事を読む -
メトリクス収集・可視化 - OpenTelemetry / CloudWatch
前回はPrometheusとGrafanaを利用して、Kubernetesおよびアプリケーションに関するメトリクスの収集・可視化を行いました。 今回はOpenTelemetryとCloudWatchを使って同じことをしてみましょう...
記事を読む -
メトリクス収集・可視化 - Prometheus / Grafana
今回のテーマはモニタリングです。 アプリケーションの運用が開始されると、ピーク時間帯や各種イベントに応じてシステム負荷は大きく変動します。 特に、マイクロサービスアーキテクチャでは、臨機応変なスケーラビリティや、無駄なのないリソース効率性とそれに応じたコスト最適化が求められます。 このような状況下では、各サービスレベルできめ細かい情報を収集・可視化することがより重要となります...
記事を読む -
Podスケジューリング - NodeAffinity / TaintToleration
Kubernetesで作成したPodは、Node[1]が割り当てられ、コンテナランタイムを通して実行されます。 Nodeは、多数のVMでクラスタ構成され、データセンター障害に備えて物理的に分散して配置されることが一般的です。 また、コスト最適化やワークロード要件を満たすために、コア数やメモリ容量だけでなく、OS種類やCPU/GPU、SSD/HDD等様々なスペックを持っていることもあるでしょう...
記事を読む -
オートスケーリング - Horizontal Pod Autoscaler(HPA)
商用環境で実際にサービスが運用されると、時間帯やイベント等、様々な要因によってトラフィックが変動し、それに合わせてシステム負荷も増減します。 コンテナ以前の従来のシステムでは、あらかじめ最大のスループットを見積もり、それに合わせてサーバーのサイジングをすることが一般的でした。 ただ、これはほとんどのケースでオーバースペックとなり、費用対効果が良いとは言えない状況でした...
記事を読む -
継続的デリバリ - ArgoCD
前回は、GitOpsの産みの親であるWeaveworks社が開発したFluxを導入して、継続的デリバリを実現しました。 今回はもう1つのGitOpsツールとして人気を集めるArgoCDを導入します。 Flux同様に、ArgoCDもGitOpsを体現したツールですが、最も大きな違いとして、ArgoCDはリッチなWeb UIを組み込みで持っています[1]...
記事を読む -
継続的デリバリ - Flux
アプリケーション開発編では、お手製のアプリをローカル環境やクラウド環境(AWS EKS)にデプロイしてきました。 しかし、ローカル環境はSkaffoldを使って自動化したものの、クラウド環境はkubectl applyを使って手動デプロイしました。 ここでは、GitOps[1]を体現する継続的デリバリツールとして人気のFluxを導入します。 最終的には、以下のような構成となります...
記事を読む