[51CTO.com クイック翻訳]独自のクラスター レベルのログ記録のために、実稼働 Kubernetes クラスターのスケーラブルなログ記録パターンを理解する必要があります。 従来、モノリシック アーキテクチャでは、ログはベア メタルまたは仮想マシンに直接保存され、サーバー ディスクから外に出ることはなく、運用チームが必要に応じて各ディスクのログをチェックしていました。 これはオンプレミスのサーバーではうまく機能しますが、クラウド内のログは一時的なものです。ますます多くの企業がコンテナ上でサービスを実行し、Kubernetes を使用してデプロイメントを調整するようになると、ログをサーバーに保存する必要がなくなり、ログ管理戦略の実装が重要になります。 ログはアプリケーションをデバッグおよび監視するための効果的な方法であり、ポッドまたはノードに障害が発生したときにクエリおよび分析できるように、別のバックエンドに保存する必要があります。これらの独立したバックエンドには、Elasticsearch、Google Cloud Platform の Stackdriver、AWS の Cloudwatch などのシステムが含まれます。 クラスターのログをストレージ バックエンドに保存することを、クラスター レベルのログ記録と呼びます。この記事では、企業が独自の Kubernetes クラスターにこのアプローチを実装する方法について説明します。 ログアーキテクチャKubernetes クラスターには、アプリケーション コンポーネントとシステム コンポーネントという 2 つの主なログ ソースがあります。 アプリケーションは Kubernetes クラスター内のコンテナとして実行されます。コンテナ ランタイムはアプリケーションのログを取得する役割を担い、Docker はこれらのログを stdout (標準出力ストリーム) と stderr (標準入力ストリーム) にリダイレクトします。 Kubernetes クラスターでは、両方のストリームがクラスター ノード上の JSON ファイルに書き込まれます。 これらのコンテナ ログは、次のコマンドを使用していつでも取得できます。
ログのもう 1 つのソースはシステム コンポーネントです。一部のシステム コンポーネント (kube-scheduler および kube-proxy) はコンテナーとして実行され、アプリケーションと同じログ記録原則に従います。 その他のシステム コンポーネント (kubelet およびコンテナ ランタイム自体) はネイティブ サービスとして実行されます。マシン上で systemd が使用可能な場合、コンポーネントはログを journald に書き込みます。それ以外の場合は、.log ファイルを /var/log ディレクトリに書き込みます。 アプリケーションとクラスターのどのコンポーネントがログを生成し、どこに保存されるかを理解したところで、これらのログをさまざまなストレージ システムにオフロードするための一般的なパターンを見てみましょう。 ログモードログを収集するための最も一般的な 2 つのパターンは、DaemonSet パターンと Sidecar パターンです。 (1)デーモンセットモード DaemonSet モードでは、ログ エージェントは Kubernetes の DaemonSet リソースを通じて Pod としてデプロイされます。 DaemonSet をデプロイすると、クラスター内の各ノードにログ エージェントを実行する Pod が存在するようになります。ログ エージェントは、/var/logs ディレクトリからログを読み取り、ストレージ バックエンドに送信するように構成されています。 (2)サイドカーモード サイドカー パターンでは、同じ Pod 内の各アプリケーション コンテナーで専用のコンテナーが実行されます。サイドカー モードには、ストリーミング サイドカーとログ エージェント サイドカーの 2 種類があります。 ストリーミング サイドカーは、stdout/stderr ストリームではなくファイルにログを書き込むアプリケーション、または非標準形式でログを書き込むアプリケーションを実行する場合に使用されます。この場合、ストリーミング サイドカー コンテナーを使用して、ファイルからのログを独自の stdout/stderr ストリームに公開し、Kubernetes 自体が stdout/stderr ストリームを取得できるようになります。 ストリーミング サイドカーは、ログ メッセージを標準のログ形式に変換することで、ログ構造にパリティをもたらすこともできます。 もう 1 つのアプローチは、ログ プロキシ サイドカーです。これは、ログをストレージ バックエンドに送信します。各ポッドには Fluentd や Filebeat などのログエージェントが含まれており、アプリケーションコンテナからログをキャプチャしてストレージバックエンドに直接送信します。 DaemonSet と Sidecar の利点と欠点DaemonSet と Sidecar のアプローチについて説明したので、それぞれのアプローチの長所と短所を見てみましょう。 (1)デーモンセット(ノードレベル) アドバンテージ:
欠点:
(2)サイドカー アドバンテージ:
欠点:
理論を実践するKubernetes クラスターにログインするための可能なパターンを理解したので、ログを生成する仮想コンテナをデプロイし、Kubernetes リソースを作成して、上で説明したログ記録パターンを実装することで、それを実践できます。 この例では、ログエージェントとして Fluentd を使用し、ログバックエンド用に Elasticsearch をインストールし、視覚化のために Kibana をインストールします。 Elasticsearch と Kibana は、Helm チャートを使用して同じクラスターにインストールされます。ただし、ストレージ バックエンドは同じクラスター上に配置しないでください。これはデモンストレーション目的のみです。 Fluentd はプラグ可能なアーキテクチャを採用しているため、さまざまなシンクをサポートします。このため、Elasticsearch バックエンドは、Stackdriver や Cloudwatch などのクラウドネイティブ ソリューションに置き換えることができます。 (1)ElasticsearchとKibanaをインストールする こちらにある公式 Helm チャート (Elasticsearch、Kibana) を使用して Elasticsearch と Kibana をデプロイします。 Helm 経由でインストールするには、パス上に Helm バイナリが必要ですが、Helm のインストールはこの記事の範囲外です。 まず、Helm リポジトリを追加してみましょう。 プロパティファイル1 つの helm リポジトリに elastic を追加します https://helm.elastic.co 次に、Elasticsearch と Kibana チャートをクラスターにインストールします。 プロパティファイル1 ヘルムインストール elasticsearch elastic/elasticsearch 2 Helm で Kibana Elastic/Kibana をインストールします これにより、最新バージョンの Elasticsearch と Kibana がクラスターにインストールされ、ログのストレージ バックエンドとして使用できるようになります。 チャートではデフォルト値が使用されていますが、本番環境にインストールする際には、必要に応じて任意のパラメータを変更できます。 (2)デーモンセット ここでは、Fluentd は、個別のサービス アカウントと ClusterRole を作成せずに DaemonSet としてデプロイされます。ただし、実稼働環境では、アクセスが制限された別のサービス アカウントを使用して Fluentd ポッドを実行する必要があります。 Fluentd は、次の Kubernetes リソースを使用して DaemonSet としてデプロイできます。 行く
この例では、2 つのボリュームがマウントされています。1 つは /var/log に、もう 1 つは /var/log/docker/containers にマウントされており、それぞれシステム コンポーネントと Docker ランタイムのログが配置されます。 使用されているイメージは、DaemonSets で使用するためのスマートなデフォルトですでに構成されていますが、構成は変更できます。 上記の YAML リソースを fluentd-ds.yaml という名前のファイルに保存し、次のコマンドで適用します。 プロパティファイル
これにより、Kubernetes クラスター内の各ノードで Fluentd ポッドが起動します。 ここでは、ストリーミングおよびログ プロキシ サイドカー パターンを実装する方法を説明します。 (3)サイドカー まず、アプリケーションがストリームではなくファイルにログを書き込む場合のストリーミング サイドカー パターンを見てみましょう。サイドカーを実行してこれらのログを読み取り、stdout/stderr ストリームに書き戻すことができます。 行く
この例では、コンテナの /var/log ディレクトリ内のファイルにログを書き込む仮想コンテナがあります。現在、コンテナ ランタイムはこれらのログを取得できないため、/var/log の場所からログを追跡し、stdout ストリームにリダイレクトするストリーミング サイドカーが実装されています。 このログ ストリームはコンテナ ランタイムによって取得され、ノード上の /var/log ディレクトリに JSON ファイルとして保存され、その後、ノード レベルのログ エージェントによって取得されます。 それでは、ログ エージェント サイドカーを見てみましょう。このモードでは、Fluentd はサイドカーとしてデプロイされ、Elasticsearch ストレージ バックエンドに直接書き込みます。 Elasticsearch プラグインをインストールするビルド済みのイメージは存在せず、カスタム Docker イメージの作成はこの記事の範囲外です。代わりに、DaemonSet の例で使用したのと同じ Fluentd イメージを使用します。 行く
結論はPod と Node の一時的な性質を考慮すると、Kubernetes クラスターからのログを別のストレージ バックエンドに保存することが重要です。この記事で説明したログ記録アーキテクチャを設定するために使用できるパターンはいくつかあります。 実稼働システムでは、サイドカー モードとノード レベル モードを組み合わせて使用することをお勧めします。これには、DaemonSet パターンを使用してクラスター全体のノード レベルのログ記録を設定すること、ストリーム (stdout/stderr) へのログの書き込みをサポートしていないアプリケーションや標準のログ形式で書き込まないアプリケーション用のストリーミング サイドカー コンテナーを実装することが含まれます。ストリーム コンテナーは、取得するノード レベル エージェントのログを自動的に表示します。 ストレージ バックエンドの選択には、Elasticsearch などのセルフホスト型オープン ソース ソリューションを選択することも、Elasticsearch、Stackdriver、Cloudwatch などのクラウド ホスト型オプションを使用したマネージド サービス ルートを選択することもできます。適切なバックエンドの選択は、アーキテクチャに実装するコスト、クエリ、およびログ分析の要件によって異なります。 原題: Kubernetes Logging in Production、著者: 若山健太郎 [51CTOによる翻訳。パートナーサイトに転載する場合は、元の翻訳者と出典を51CTO.comとして明記してください。 |
<<: エッジの台頭 - いつでもどこでも分析とコンピューティング
新しいサイトの場合、結局のところ、立ち上げたばかりで、重みも、包含も、ランキングもありません。非常に...
KTデータセンター傘下のionブランドは、今から今月末まで、ロサンゼルスとサンノゼで低スペックVPS...
11月3日、テンセントデジタルエコシステムカンファレンスで、テンセントのクラウドおよびスマート産業グ...
admin5 が SEO をトップに押し上げた 1 ~ 2 年間を、私は今でもぼんやりと覚えています...
Contabo は本日、東京に新しいデータセンターを開設しました。ウェブマスターはすぐに最低構成の日...
親愛なるみんな、ホスティング業界で一年で最も待ち望まれている日がやってきました。海外のホスティングベ...
contabo のブラックフライデーをご紹介します。VPS、VDS、専用サーバー、ブロックストレージ...
2010 年に設立されたスロバキアの商人である profvds は、HVM 仮想化、1Gbps の帯...
フォーラムの発展は人気にかかっています。人気はフォーラムにとって活力のある水源のようなものだと言えま...
ZENON NSP は 1996 年に設立されたロシアのホスティング会社です。非常に古いブランドです...
北京新聞(記者 林葉) 北京新聞は10月21日と22日、インターネット上に「ホテル予約チェック」のウ...
PTC (NASDAQ: PTC) は、ボストン グローブ紙の第 11 回年次従業員調査で、マサチュ...
ブロックチェーンは近年最も革新的な技術の一つであり、業界の注目も高まっています。 8月24日に開催さ...
[51CTO.com クイック翻訳] Kubernetes は素晴らしい技術であり、私自身も自分の ...
Taobao 検索ランキングの最適化は、Taobao SEO とも呼ばれ、Taobao ストアを開設...