このトピックでは、Fluent Bit 用 TKG 拡張機能 v1.3.1 をデプロイする方法について説明します。Fluent Bit は高速で軽量なログ プロセッサであり、さまざまなソースからアプリケーション データとログを収集し、それらを統一して複数の宛先に送信できます。Tanzu Kubernetes クラスタ ログを収集して、選択した転送先に転送するには、Fluent Bit の TKG 拡張機能をデプロイします。
拡張機能の前提条件
Fluent Bit 用 TKG 拡張機能 v1.3.1 をデプロイする前に、次の要件を満たす必要があります。
- クラスタをプロビジョニングします。TKGS v1alpha2 API を使用して Tanzu Kubernetes クラスタをプロビジョニングするためのワークフローを参照してください。
- クラスタに接続します。vCenter Single Sign-On ユーザーとして Tanzu Kubernetes クラスタに接続を参照してください。
- kubectl を実行するクライアント ホストへのTKG 拡張機能 v1.3.1 バンドルのダウンロードを実行します。
- ターゲット クラスタへのTKG 拡張機能の前提条件のインストールを実行します。
Fluent Bit 拡張機能のデプロイ
Fluent Bit の TKG 拡張機能は、Fluent Bit コンテナをクラスタにインストールします。このコンテナの詳細については、
https://fluentbit.io/を参照してください。
この拡張機能は、
https://projects.registry.vmware.com/ にある VMware パブリック レジストリからコンテナをプルするように構成されています。プライベート レジストリを使用する場合は、データ値と拡張機能構成ファイルに含まれるエンドポイント URL を、対応するものに変更します。フィールドとオプションの説明については、
Fluent Bit 拡張機能の構成を参照してください。
コンテナ | リソースの種類 | レプリカ | 説明 |
---|---|---|---|
Fluent Bit | DaemonSet | 6 | ログ コレクタ、アグリゲータ、フォワーダ |
- 拡張機能のすべての前提条件を満たしていることを確認します。拡張機能の前提条件を参照してください。
- Fluent Bit 拡張機能のあるディレクトリに移動します。
cd /tkg-extensions-v1.3.1+vmware.1/extensions/logging/fluent-bit
tanzu-system-logging
名前空間と、Fluent Bit サービスのアカウントおよびロール オブジェクトを作成します。kubectl apply -f namespace-role.yaml
- Fluent Bit に使用するログの出力先を決定します。サポートされる出力は、Elasticsearch、HTTP、Kafka、Splunk、Syslog などです。詳細についてはhttps://docs.fluentbit.io/manual/pipeline/outputsを参照してください。
- いずれかの
<LOG_BACKEND>/fluent-bit-data-values.example.yaml
をコピーして、選択したログ出力先に Fluent Bit データ値ファイルを作成します。サポートされているログ出力先ごとに、サンプル データ値ファイルがあります。このサンプルでは、該当するログ出力先の最小構成を示します。cp elasticsearch/fluent-bit-data-values.yaml.example elasticsearch/fluent-bit-data-values.yaml
cp http/fluent-bit-data-values.yaml.example http/fluent-bit-data-values.yaml
cp kafka/fluent-bit-data-values.yaml.example kafka/fluent-bit-data-values.yaml
cp splunk/fluent-bit-data-values.yaml.example splunk/fluent-bit-data-values.yaml
cp syslog/fluent-bit-data-values.yaml.example syslog/fluent-bit-data-values.yaml
<LOG_BACKEND>/fluent-bit-data-values.yaml
にデータを入力して、Fluent Bit 拡張機能を構成します。フィールドとオプションの説明については、Fluent Bit 拡張機能の構成を参照してください。たとえば、Fluent Bit Syslog 構成には次の値が必要です。logging: image: repository: projects.registry.vmware.com/tkg # Public registry tkg: instance_name: "<TKG_INSTANCE_NAME>" #mandatory but arbitrary; appears in logs cluster_name: "<CLUSTER_NAME>" #name of the target tkgs cluster fluent_bit: output_plugin: "syslog" syslog: host: "<SYSLOG_HOST>" port: "<SYSLOG_PORT>" mode: "<SYSLOG_MODE>" format: "<SYSLOG_FORMAT>"
Fluent Bit Syslog でポピュレートされるデータ値ファイルの構成は、次のようになります。logging: image: repository: projects.registry.vmware.com/tkg tkg: instance_name: "tkgs-cluster-1" cluster_name: "tkgs-cluster-1" fluent_bit: output_plugin: "syslog" syslog: host: "10.192.175.59" port: "514" mode: "tcp" format: "rfc5424"
- ログ出力先のデータ値を含む Fluent Bit シークレットを作成します。
kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=elasticsearch/fluent-bit-data-values.yaml -n tanzu-system-logging
kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=kafka/fluent-bit-data-values.yaml -n tanzu-system-logging
kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=splunk/fluent-bit-data-values.yaml -n tanzu-system-logging
kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=http/fluent-bit-data-values.yaml -n tanzu-system-logging
kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=syslog/fluent-bit-data-values.yaml -n tanzu-system-logging
secret/fluent-bit-data-values
がtanzu-system-logging
名前空間に作成されます。次のコマンドを使用して確認します。kubectl get secrets -n tanzu-system-logging
- Fluent Bit アプリケーションをデプロイします。
kubectl apply -f fluent-bit-extension.yaml
成功すると、
app.kappctrl.k14s.io/fluent-bit created
が表示されます。 - Fluent Bit アプリケーションのステータスを確認します。
kubectl get app fluent-bit -n tanzu-system-logging
成功すると、ステータスがReconciling
からReconcile succeeded
に変更されます。ステータスがReconcile failed
の場合は、Fluent Bit のデプロイのトラブルシューティングを参照してください。 - アプリケーションの詳細なステータスを確認します。
kubectl get app fluent-bit -n tanzu-system-logging -o yaml
- Fluent Bit デーモンセットを確認します。
kubectl get daemonsets -n tanzu-system-logging
成功すると、次の情報が表示されます。NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE fluent-bit 6 6 6 6 6 <none> 105s
Fluent Bit のデプロイのトラブルシューティング
デプロイまたは調整が失敗した場合は、kubectl get pods -A
を実行してポッドのステータスを確認します。fluent-bit
ポッドは、Running
である必要があります。ポッドのステータスが ImagePullBackOff
または ImageCrashLoopBackOff
の場合は、コンテナ イメージをプルできていません。データ値と拡張機能 YAML ファイルに記述されているリポジトリ URL を確認し、これらが正確であることを確認します。
コンテナ ログを確認します。
name-XXXX
は、
kubectl get pods -A
を実行すると表示される一意のポッド名です。
kubectl logs pod/fluent-bit-XXXXX -c fluent-bit -n tanzu-system-logging
Fluent Bit 拡張機能の更新
Tanzu Kubernetes クラスタにデプロイされている Fluent Bit 拡張機能を更新します。
- シークレットから Fluent Bit データ値を取得します。
kubectl get secret fluent-bit-data-values -n tanzu-system-logging -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > fluent-bit-data-values.yaml
fluent-bit-data-values.yaml
内の Fluent Bit データ値を更新します。Fluent Bit 拡張機能の構成を参照してください。- Fluent Bit データ値のシークレットを更新します。
kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=fluent-bit-data-values.yaml -n tanzu-system-logging -o yaml --dry-run | kubectl replace -f-
Fluent Bit 拡張機能が上記のデータ値で再調整されます。注: デフォルトでは、kapp-controller によってアプリケーションが 5 分ごとに同期されます。更新は 5 分以内に有効になります。更新をすぐに有効にするには、fluent-bit-extension.yaml
内のsyncPeriod
の値を小さくし、kubectl apply -f fluent-bit-extension.yaml
を使用して Fluent Bit 拡張機能を適用します。 - 拡張機能のステータスを確認します。
kubectl get app fluent-bit -n tanzu-system-logging
- 詳細なステータスを確認して、トラブルシューティングを行います。
kubectl get app fluent-bit -n tanzu-system-logging -o yaml
- 必要に応じてトラブルシューティングを実行します。Fluent Bit のデプロイのトラブルシューティングを参照してください。
Fluent Bit 拡張機能の削除
Tanzu Kubernetes クラスタから Fluent Bit 拡張機能を削除します。
注: 手順を順番に実行します。Fluent Bit アプリケーションが完全に削除される前に、名前空間、サービス アカウント、ロール オブジェクトを削除しないでください。これを行うと、システム エラーが発生する可能性があります。
- Fluent Bit 拡張機能のあるディレクトリに移動します。
cd extensions/logging/fluent-bit/
- Fluent Bit アプリケーションを削除します。
kubectl delete app fluent-bit -n tanzu-system-logging
予期される結果:
app.kappctrl.k14s.io "fluent-bit" deleted
。 - Fluent Bit アプリケーションが削除されていることを確認します。
kubectl get app fluent-bit -n tanzu-system-logging
予期される結果:
apps.kappctrl.k14s.io "fluent-bit" not found
。 tanzu-system-logging
名前空間、Fluent Bit 拡張機能サービス アカウント、およびロール オブジェクトを削除します。kubectl delete -f namespace-role.yaml
Fluent Bit 拡張機能のアップグレード
既存の Fluent Bit 拡張機能がデプロイされている場合は、最新バージョンにアップグレードできます。
- Fluent Bit の構成マップをエクスポートします。
kubectl get configmap fluent-bit -n tanzu-system-logging -o 'go-template={{ index .data "fluent-bit.yaml" }}' > fluent-bit-configmap.yaml
- 既存の Fluent Bit 環境を削除します。Fluent Bit 拡張機能の削除を参照してください。
- 最新の Fluent Bit 拡張機能をデプロイします。Fluent Bit 拡張機能のデプロイを参照してください。
Fluent Bit 拡張機能の構成
構成値は
extensions/logging/fluent-bit/<LOG_BACKEND>/fluent-bit-data-values.yaml
で設定されています。
パラメータ | 説明 | タイプ | デフォルト |
---|---|---|---|
logging.namespace | Fluent Bit がデプロイされる名前空間 | 文字列 | tanzu-system-logging |
logging.service_account_name | Fluent Bit サービス アカウントの名前 | 文字列 | fluent-bit |
logging.cluster_role_name | fluent bit に get、watch、および list の権限を付与するクラスタ ロールの名前 | 文字列 | fluent-bit-read |
logging.image.name | Fluent Bit イメージの名前 | 文字列 | fluent-bit |
logging.image.tag | Fluent Bit イメージ タグ。バージョンをアップグレードしている場合は、この値の更新が必要になることがあります。 | 文字列 | v1.6.9_vmware.1 |
logging.image.repository | Fluent Bit イメージを含むリポジトリの場所。デフォルトは、パブリック VMware レジストリです。プライベート リポジトリを使用している場合は(エアギャップ環境など)、この値を変更します。 | 文字列 | projects.registry.vmware.com/tkg |
logging.image.pullPolicy | Fluent bit イメージ プル ポリシー | 文字列 | IfNotPresent |
logging.update_strategy | DaemonSet の更新時に使用される更新方法 | 文字列 | RollingUpdate |
tkg.cluster_name | Tanzu Kubernetes クラスタの名前 | 文字列 | Null(必須パラメータ) |
tkg.instance_name | スーパーバイザー クラスタ、および 1 つのデプロイ内のすべての Tanzu Kubernetes クラスタで共有される TKG インスタンスのユーザー定義による名前。インストールに関連する任意の名前を使用できます。 | 文字列 | Null(必須パラメータ)
注: このフィールドは必須ですが、任意に指定できます。ログに表示される名前です。
|
fluent_bit.log_level | Fluent Bit に使用するログ レベル | 文字列 | info |
fluent_bit.output_plugin | Fluent-Bit が収集する情報をフラッシュするバックエンドを設定します | 文字列 | Null(必須パラメータ) |
fluent_bit.elasticsearch.host | ターゲット Elasticsearch インスタンスの IP アドレスまたはホスト名 | 文字列 | Null(output_plugin が弾性検索の場合の必須パラメータ) |
fluent_bit.elasticsearch.port | ターゲット Elasticsearch インスタンスの TCP ポート | 整数型 | Null(output_plugin が弾性検索の場合の必須パラメータ) |
fluent_bit.elasticsearch.buffer_size | Elasticsearch サービスからの応答の読み取りに使用するバッファ サイズを指定します。False の場合は無制限に設定されます | 文字列 | False |
fluent_bit.elasticsearch.tls | Elasticsearch の TLS のデフォルト設定を指定します | 文字列 | オフ |
fluent_bit.kafka.broker_service_name | Kafka Broker の単一または複数リスト(例:192.168.1.3:9092) | 文字列 | Null(output_plugin が kafka の場合の必須パラメータ) |
fluent_bit.kafka.topic_name | Fluent Bit が Kafka へのメッセージ送信に使用する単一のエントリまたはトピックのカンマ区切りリスト | 文字列 | Null(output_plugin が kafka の場合の必須パラメータ) |
fluent_bit.splunk.host | ターゲット Splunk サーバの IP アドレスまたはホスト名 | 文字列 | Null(output_plugin が splunk の場合の必須パラメータ) |
fluent_bit.splunk.port | ターゲット Splunk サーバの TCP ポート | 整数型 | Null(output_plugin が splunk の場合の必須パラメータ) |
fluent_bit.splunk.token | HTTP イベント コレクタ インターフェイスの認証トークンを指定します | 文字列 | Null(output_plugin が splunk の場合の必須パラメータ) |
fluent_bit.http.host | ターゲット HTTP サーバの IP アドレスまたはホスト名 | 文字列 | Null(output_plugin が http の場合の必須パラメータ) |
fluent_bit.http.port | ターゲット HTTP サーバの TCP ポート | 整数型 | Null(output_plugin が http の場合の必須パラメータ) |
fluent_bit.http.mode | ターゲット Web サーバの HTTP URI を指定します | 文字列 | Null(output_plugin が http の場合の必須パラメータ) |
fluent_bit.http.header_key_value | HTTP ヘッダー キー/値ペア。複数のヘッダーを設定できます | 文字列 | Null(output_plugin が http の場合の必須パラメータ) |
fluent_bit.http.format | HTTP 要求本文で使用されるデータ形式を指定します | 文字列 | Null(output_plugin が http の場合の必須パラメータ) |
fluent_bit.syslog.host | リモート Syslog サーバのドメインまたは IP アドレス | 文字列 | Null(output_plugin が syslog の場合の必須パラメータ) |
fluent_bit.syslog.port | リモート Syslog サーバの TCP または UDP ポート | 整数型 | Null(output_plugin が syslog の場合の必須パラメータ) |
fluent_bit.syslog.mode | TCP、UDP、TLS からの転送タイプを指定します | 文字列 | Null(output_plugin が syslog の場合の必須パラメータ) |
fluent_bit.syslog.format | HTTP 要求本文で使用されるデータ形式を指定します | 文字列 | Null(output_plugin が syslog の場合の必須パラメータ) |
host_path.volume_1 | ホスト ノードのファイル システムからポッドへのディレクトリ パス(ボリューム 1 の場合) | 文字列 | /var/log |
host_path.volume_2 | ホスト ノードのファイル システムからポッドへのディレクトリ パス(ボリューム 2 の場合) | 文字列 | /var/lib/docker/containers |
host_path.volume_3 | ホスト ノードのファイル システムからポッドへのディレクトリ パス(ボリューム 3 の場合) | 文字列 | /run/log |
systemd.path | Systemd ジャーナル ディレクトリへのパス | 文字列 | /var/log/journal |