背景前回は、victoriametrics とそのインストール時の注意事項について紹介しました。今日は、k8s にインストールする方法を紹介します。今回はクラウド上のk8sにvictoriametricsのクラスターバージョンをインストールし、クラウド上での負荷分散を使用する必要があります。 注: victoriametrics は今後 vm と呼ばれます。 インストールの準備- k8s クラスター、私の k8s バージョンは v1.20.6 です
- クラスター上にストレージクラスを準備します。ここでは NFS を使用します。
- オペレーター イメージ タグは v0.17.2、vmstorage、vmselect、vminsert イメージ タグは v1.63.0 です。事前にイメージをプルしてローカルイメージウェアハウスに保存することができます
インストールに関する注意事項vm は、バイナリ、Docker イメージ、ソース コードなど、さまざまな方法でインストールできます。シーンに合わせてお選びいただけます。 k8s にインストールする場合は、オペレーターを使用して直接インストールできます。以下では、インストール プロセス中の注意事項について説明します。 最小のクラスターには次のノードが含まれている必要があります。 - 単一のvmstorageノードで、-retentionPeriodおよび-storageDataPathパラメータを指定します。
- 単一のvminsertノードの場合は、-storageNode=を指定します。
- vmselect 単一ノードの場合は、-storageNode= を指定します。注: 高可用性の場合、各サービスに少なくとも2つのノードがあることが推奨されます。
vmselect および vminsert の前には、vmauth や nginx などのロード バランサが必要です。ここではクラウド上の負荷分散を使用します。以下も必須: - /insert で始まるリクエストは、vminsert ノードのポート 8480 にルーティングする必要があります。
- /select で始まるリクエストは、vmselect ノードのポート 8481 にルーティングする必要があります。注: 各サービスのポートは -httpListenAddr を使用して指定できます。
クラスタの監視をインストールすることをお勧めします 単一のホストにテスト クラスターをインストールする場合、vminsert、vmselect、および vmstorage の -httpListenAddr パラメーターは一意である必要があり、vmstorage の -storageDataPath、-vminsertAddr、および -vmselectAddr パラメーターは一意の値を持つ必要があります。 -storageDataPath で指定された vmstorage ディレクトリのサイズが -storage.minFreeDiskSpaceBytes で指定された使用可能なスペースより小さい場合、読み取り専用モードに切り替わります。 vminsert はそのようなノードへのデータ送信を停止し、代わりに他の利用可能な vmstorage ノードにデータを送信します。 インストールプロセスVMをインストールする1. crdを作成する - # インストールファイルをダウンロードする
- VM_VERSION=`basename $(curl -fs -o/dev/ null -w %{redirect_url} https://github.com/VictoriaMetrics/operator/releases/latest)`をエクスポートします。
- https://github.com/VictoriaMetrics/operator/releases/download/$VM_VERSION/bundle_crd.zip を実行します。
- bundle_crd.zip を解凍します。
- kubectl apply -f リリース/crds
-
- # CRD をチェック
- [root@test opt]# kubectl get crd |grep vm
- vmagents.operator.victoriametrics.com 2022-01-05T07:26:01Z
- vmalertmanagerconfigs.operator.victoriametrics.com 2022-01-05T07:26:01Z
- vmalertmanagers.operator.victoriametrics.com 2022-01-05T07:26:01Z
- vmalerts.operator.victoriametrics.com 2022-01-05T07:26:01Z
- vmauths.operator.victoriametrics.com 2022-01-05T07:26:01Z
- vmclusters.operator.victoriametrics.com 2022-01-05T07:26:01Z
- vmnodescrapes.operator.victoriametrics.com 2022-01-05T07:26:01Z
- vmpodscrapes.operator.victoriametrics.com 2022-01-05T07:26:01Z
- vmprobes.operator.victoriametrics.com 2022-01-05T07:26:01Z
- vmrules.operator.victoriametrics.com 2022-01-05T07:26:01Z
- vmservicescrapes.operator.victoriametrics.com 2022-01-05T07:26:01Z
- vmsingles.operator.victoriametrics.com 2022-01-05T07:26:01Z
- vmstaticscrapes.operator.victoriametrics.com 2022-01-05T07:26:01Z
- vmusers.operator.victoriametrics.com 2022-01-05T07:26:01Z
2. オペレータをインストールする - # オペレータをインストールします。事前にオペレータのミラーアドレスを変更することを忘れないでください
- kubectl apply -f リリース/オペレーター/
-
- # インストール後、オペレータが正常かどうかを確認します
- [root@test opt]# kubectl get po -n 監視システム
- vm-operator-76dd8f7b84-gsbfs 1/1 実行中 0 25h
3. vmcluster オペレーターをインストールした後、ニーズに応じて独自の cr を構築する必要があります。ここで vmcluster をインストールします。まずvmclusterインストールファイルを見てみましょう - # vmcluster-install.yaml を cat します
- APIバージョン: operator.victoriametrics.com/v1beta1
- 種類: VMCluster
- メタデータ:
- 名前: vmcluster
- 名前空間: 監視システム
- 仕様:
- レプリケーション係数: 1
- 保持期間: "4"
- vminsert:
- 画像:
- プルポリシー: IfNotPresent
- リポジトリ: images.huazai.com/release/vminsert
- タグ: v1.63.0
- ポッドメタデータ:
- ラベル:
- victoriaMetrics: vminsert
- レプリカ数: 1
- リソース:
- 制限:
- CPU: "1"
- メモリ: 1000Mi
- リクエスト:
- CPU: 500m
- メモリ: 500Mi
- vmselect:
- キャッシュマウントパス:/ -cacheを選択
- 画像:
- プルポリシー: IfNotPresent
- リポジトリ: images.huazai.com/release/vmselect
- タグ: v1.63.0
- ポッドメタデータ:
- ラベル:
- victoriaメトリクス: vmselect
- レプリカ数: 1
- リソース:
- 制限:
- CPU: "1"
- メモリ: 1000Mi
- リクエスト:
- CPU: 500m
- メモリ: 500Mi
- ストレージ:
- ボリュームクレームテンプレート:
- 仕様:
- アクセスモード:
- -一度だけ読み書き可能
- リソース:
- リクエスト:
- ストレージ: 2G
- ストレージクラス名: nfs-csi
- ボリュームモード: ファイルシステム
- 仮想マシンストレージ:
- 画像:
- プルポリシー: IfNotPresent
- リポジトリ: images.huazai.com/release/vmstorage
- タグ: v1.63.0
- ポッドメタデータ:
- ラベル:
- victoriaMetrics: vmstorage
- レプリカ数: 1
- リソース:
- 制限:
- CPU: "1"
- メモリ: 1500Mi
- リクエスト:
- CPU: 500m
- メモリ: 750Mi
- ストレージ:
- ボリュームクレームテンプレート:
- 仕様:
- アクセスモード:
- -一度だけ読み書き可能
- リソース:
- リクエスト:
- ストレージ: 20G
- ストレージクラス名: nfs-csi
- ボリュームモード: ファイルシステム
- ストレージデータパス: /vm-data
-
- # vmcluster をインストールする
- kubectl を適用 -f vmcluster-install.yaml
-
- # vmcluster のインストール結果を確認する
- [root@test opt]# kubectl get po -n 監視システム
- 名前準備完了 ステータス 再起動 年齢
- vm-operator-76dd8f7b84-gsbfs 1/1 実行中 0 26h
- vminsert-vmcluster-main-69766c8f4-r795w 1/1 実行中 0 25h
- vmselect-vmcluster-main-0 1/1 実行中 0 25h
- vmstorage-vmcluster-main-0 1/1 実行中 0 25h
4. vminsert および vmselect サービスを作成する
- # 作成されたSVCを表示する
- [root@test opt]# kubectl get svc -n 監視システム
- 名前タイプ クラスター IP 外部 IP ポート 年齢
- vminsert-vmcluster-main ClusterIP 10.0.182.73 <なし> 8480/TCP 25h
- vmselect-vmcluster-main ClusterIP なし <なし> 8481/TCP 25h
- vmstorage-vmcluster-main ClusterIP なし <なし> 8482/TCP、8400/TCP、8401/TCP 25h
-
- # ここでは、異なる k8s クラスターからのデータをこの VM に保存することができ、後続のデータ クエリに便利です。
- # nodeport タイプの 2 つの svc、つまり vminsert-lbsvc と vmselect-lbsvc を再作成します。同時に、クラウド上の lb がポート 8480 と 8481 をリッスンするように構成し、バックエンド サーバーは、VM が配置されているクラスターのノード IP になります。
- # ポートは、2 つのサービス vminsert-lbsvc と vmsleect-lbsvc によって公開されるノードポートです。
- # ただし、OpenTelemetry など、VM と同じ k8s クラスターにデータを保存する必要がある場合は、以下を使用できます。
- # vminsert-vmcluster-main.kube-system.svc.cluster。市内番号:8480
- # VMとは異なり、opentelemetryなどのk8sクラスターはlb:8480を使用してデータを保存します
-
- # cat vminsert-lb-svc.yaml
- APIバージョン: v1
- 種類: サービス
- メタデータ:
- ラベル:
- app.kubernetes.io/component: モニタリング
- app.kubernetes.io/インスタンス: vmcluster-main
- app.kubernetes.io/名前: vminsert
- 名前: vminsert-vmcluster-main-lbsvc
- 名前空間: 監視システム
- 仕様:
- 外部トラフィックポリシー: クラスター
- ポート:
- -名前: http
- ノードポート: 30135
- ポート: 8480
- プロトコル: TCP
- ターゲットポート: 8480
- セレクタ:
- app.kubernetes.io/component: モニタリング
- app.kubernetes.io/インスタンス: vmcluster-main
- app.kubernetes.io/名前: vminsert
- セッションアフィニティ: なし
- タイプ: NodePort
-
- # cat vmselect-lb-svc.yaml
- APIバージョン: v1
- 種類: サービス
- メタデータ:
- ラベル:
- app.kubernetes.io/component: モニタリング
- app.kubernetes.io/インスタンス: vmcluster-main
- app.kubernetes.io/名前: vmselect
- 名前: vmselect-vmcluster-main-lbsvc
- 名前空間: 監視システム
- 仕様:
- 外部トラフィックポリシー: クラスター
- ポート:
- -名前: http
- ノードポート: 31140
- ポート: 8481
- プロトコル: TCP
- ターゲットポート: 8481
- セレクタ:
- app.kubernetes.io/component: モニタリング
- app.kubernetes.io/インスタンス: vmcluster-main
- app.kubernetes.io/名前: vmselect
- セッションアフィニティ: なし
- タイプ: NodePort
-
- # サービスを作成
- kubectl を適用 -f vmselect-lb-svc.yaml
- kubectl を適用 -f vminsert-lb-svc.yaml
-
- # ! !クラウド上で LB を構成します。
- 自己構成
-
- # 最後に、VM に関連するポッドとサービスをチェックします
-
- [root@test opt]# kubectl get po,svc -n 監視システム
- 名前準備完了 ステータス 再起動 年齢
- pod/vm-operator-76dd8f7b84-gsbfs 1/1 実行中 0 30h
- pod/vminsert-vmcluster-main-69766c8f4-r795w 1/1 実行中 0 29h
- pod/vmselect-vmcluster-main-0 1/1 実行中 0 29h
- pod/vmstorage-vmcluster-main-0 1/1 実行中 0 29h
-
- 名前タイプ クラスター IP 外部 IP ポート 年齢
- service/vminsert-vmcluster-main ClusterIP 10.0.182.73 <なし> 8480/TCP 29h
- service/vminsert-vmcluster-main-lbsvc ノードポート 10.0.255.212 <なし> 8480:30135/TCP 7h54m
- service/vmselect-vmcluster-main ClusterIP なし <なし> 8481/TCP 29h
- service/vmselect-vmcluster-main-lbsvc ノードポート 10.0.45.239 <なし> 8481:31140/TCP 7h54m
- service/vmstorage-vmcluster-main ClusterIP なし <なし> 8482/TCP、8400/TCP、8401/TCP 29h
prometheus-expoterをインストールするここでも、ノード エクスポーターをインストールして k8s ノード データを公開します。このデータは、後続の opentelemetry によって収集され、vminsert を通じて vmstorage に保存されます。データはvmselectを通じて照会される - # kubectl apply -f prometheus-node-exporter-install.yaml
- APIバージョン: アプリ/v1
- 種類: DaemonSet
- メタデータ:
- ラベル:
- アプリ: prometheus-node-exporter
- リリース: prometheus-node-exporter
- 名前: prometheus-node-exporter
- 名前空間: kube-system
- 仕様:
- 改訂履歴制限: 10
- セレクタ:
- 一致ラベル:
- アプリ: prometheus-node-exporter
- リリース: prometheus-node-exporter
- テンプレート:
- メタデータ:
- ラベル:
- アプリ: prometheus-node-exporter
- リリース: prometheus-node-exporter
- 仕様:
- コンテナ:
- -引数:
- -
- -
- -
- -
- 環境:
- -名前:HOST_IP
- 値: 0.0.0.0
- 画像: images.huazai.com/release/node-exporter:v1.1.2
- イメージプルポリシー: IfNotPresent
- ライブネスプローブ:
- 失敗しきい値: 3
- httpGet:
- パス: /
- ポート: 9100
- スキーム: HTTP
- 期間秒数: 10
- 成功しきい値: 1
- タイムアウト秒数: 1
- 名前: ノードエクスポーター
- ポート:
- - コンテナポート: 9100
- ホストポート: 9100
- 名前: メトリック
- プロトコル: TCP
- 準備プローブ:
- 失敗しきい値: 3
- httpGet:
- パス: /
- ポート: 9100
- スキーム: HTTP
- 期間秒数: 10
- 成功しきい値: 1
- タイムアウト秒数: 1
- リソース:
- 制限:
- CPU: 200m
- メモリ: 50Mi
- リクエスト:
- CPU: 100m
- メモリ: 30マイル
- 終了メッセージパス: /dev/termination-log
- 終了メッセージポリシー: ファイル
- ボリュームマウント:
- - マウントパス: /host/proc
- 名前: プロセス
- 読み取り専用: true
- - マウントパス: /host/sys
- 名前: sys
- 読み取り専用: true
- - マウントパス: /host/root
- マウント伝播: ホストからコンテナへ
- 名前: ルート
- 読み取り専用: true
- dnsポリシー: ClusterFirst
- ホストネットワーク: true
- ホストPID: true
- 再起動ポリシー: 常に
- スケジューラ名:デフォルト-scheduler
- セキュリティコンテキスト:
- グループ: 65534
- 実行グループ: 65534
- 非ルートとして実行: true
- 実行ユーザー: 65534
- サービスアカウント: prometheus-node-exporter
- サービスアカウント名: prometheus-node-exporter
- 終了猶予期間秒数: 30
- 許容範囲:
- - 効果: NoSchedule
- 演算子: 存在する
- ボリューム:
- - ホストパス:
- パス: /proc
- タイプ: ""
- 名前: プロセス
- - ホストパス:
- パス: /sys
- タイプ: ""
- 名前: sys
- - ホストパス:
- パス: /
- タイプ: ""
- 名前: ルート
- 更新戦略:
- ローリングアップデート:
- 最大利用不可: 1
- タイプ: ローリングアップデート
-
- # ノードエクスポーターをチェックする
- [root@test ~]# kubectl get po -n kube-system |grep prometheus
- prometheus-node-exporter-89wjk 1/1 実行中 0 31h
- prometheus-node-exporter-hj4gh 1/1 実行中 0 31h
- prometheus-node-exporter-hxm8t 1/1 実行中 0 31h
- prometheus-node-exporter-nhqp6 1/1 実行中 0 31h
opentelemetryをインストールするPrometheus ノードエクスポーターをインストールしたら、opentelemetry をインストールします(後で紹介します) - # opentelemetry 構成ファイル。データの受信、処理、エクスポートを定義する
- # 1. レシーバーはデータの取得元です
- # 2.プロセッサは取得したデータの処理です
- # 3. 輸出業者は処理したデータをどこに輸出しますか?このデータは最終的にvminsertを通じてvmstorageに書き込まれます。
- # kubectl apply -f opentelemetry-install-cm.yaml
- APIバージョン: v1
- データ:
- リレー: |
- 輸出業者:
- プロメテウスリモート書き込み:
- # ここで lb_ip:8480 を設定します。これは vminsert アドレスです
- エンドポイント: http://lb_ip:8480/ /0/prometheusを挿入
- # 異なるクラスターに異なるラベルを追加します (例: cluster: uat/prd)
- 外部ラベル:
- クラスター: uat
- 拡張子:
- ヘルスチェック: {}
- プロセッサ:
- バッチ: {}
- メモリ制限:
- バラストサイズMIB: 819
- チェック間隔: 5秒
- 制限MIB: 1638
- スパイク制限MIB: 512
- 受信者:
- プロメテウス:
- 設定:
- scrape_configs:
- - ジョブ名: opentelemetry-collector
- スクレイプ間隔: 10秒
- 静的設定:
- - ターゲット:
- - ローカルホスト:8888
- ...省略...
- - ジョブ名: kube-state-metrics
- kubernetes_sd_configs:
- - 名前空間:
- 名前:
- - kubeシステム
- 役割: サービス
- メトリック再ラベル設定:
- - 正規表現: レプリカセット;([\w|\-]+)\-[0-9|az]+
- 交換: $$1
- ソースラベル:
- - 作成者
- - 作成者名
- ターゲットラベル: 作成者名
- - 正規表現: レプリカセット
- 代替: 展開
- ソースラベル:
- - 作成者
- ターゲットラベル: created_by_kind
- 再ラベル設定:
- -アクション: 維持
- 正規表現: kube-state-metrics
- ソースラベル:
- - __meta_kubernetes_サービス名
- - ジョブ名: ノードエクスポーター
- kubernetes_sd_configs:
- - 名前空間:
- 名前:
- - kubeシステム
- 役割: エンドポイント
- 再ラベル設定:
- -アクション: 維持
- 正規表現: ノードエクスポーター
- ソースラベル:
- - __meta_kubernetes_サービス名
- - ソースラベル:
- - __meta_kubernetes_pod_node_name
- ターゲットラベル: ノード
- - ソースラベル:
- - __meta_kubernetes_pod_host_ip
- ターゲットラベル: ホストIP
- ...省略...
- サービス:
- # 上記で定義したレシーバー、プロセッサー、エクスポーター、拡張機能はここで設定する必要があります。設定しないと動作しません。
- 拡張子:
- - ヘルスチェック
- パイプライン:
- メトリクス:
- 輸出業者:
- -プロメテウスリモートライト
- プロセッサ:
- -メモリリミッター
- - バッチ
- 受信者:
- - プロメテウス
- 種類: ConfigMap
- メタデータ:
- 注釈:
- meta.helm.sh/リリース名: opentelemetry-collector-hua
- meta.helm.sh/release-namespace: kube-system
- ラベル:
- app.kubernetes.io/インスタンス: opentelemetry-collector-hua
- app.kubernetes.io/名前: opentelemetry-collector-hua
- 名前: opentelemetry-collector-hua
- 名前空間: kube-system
- # opentelemetryをインストールする
- # kubectl apply -f opentelemetry-install.yaml
- APIバージョン: アプリ/v1
- 種類: デプロイメント
- メタデータ:
- ラベル:
- app.kubernetes.io/インスタンス: opentelemetry-collector-hua
- app.kubernetes.io/名前: opentelemetry-collector-hua
- 名前: opentelemetry-collector-hua
- 名前空間: kube-system
- 仕様:
- 進捗期限秒数: 600
- レプリカ: 1
- 改訂履歴制限: 10
- セレクタ:
- 一致ラベル:
- app.kubernetes.io/インスタンス: opentelemetry-collector-hua
- app.kubernetes.io/名前: opentelemetry-collector-hua
- 戦略:
- ローリングアップデート:
- 最大サージ: 25%
- 最大利用不可: 25%
- タイプ: ローリングアップデート
- テンプレート:
- メタデータ:
- ラベル:
- app.kubernetes.io/インスタンス: opentelemetry-collector-hua
- app.kubernetes.io/名前: opentelemetry-collector-hua
- 仕様:
- コンテナ:
- - 指示:
- - /ホテル
- -
- -
- -
- 環境:
- -名前: MY_POD_IP
- 値:
- フィールド参照:
- APIバージョン: v1
- フィールドパス: status.podIP
- 画像: images.huazai.com/release/opentelemetry-collector:0.27.0
- イメージプルポリシー: IfNotPresent
- ライブネスプローブ:
- 失敗しきい値: 3
- httpGet:
- パス: /
- ポート: 13133
- スキーム: HTTP
- 期間秒数: 10
- 成功しきい値: 1
- タイムアウト秒数: 1
- 名前: opentelemetry-collector-hua
- ポート:
- - コンテナポート: 4317
- 名前: otlp
- プロトコル: TCP
- 準備プローブ:
- 失敗しきい値: 3
- httpGet:
- パス: /
- ポート: 13133
- スキーム: HTTP
- 期間秒数: 10
- 成功しきい値: 1
- タイムアウト秒数: 1
- リソース:
- 制限:
- CPU: "1"
- メモリ: 2Gi
- リクエスト:
- CPU: 500m
- メモリ: 1Gi
- ボリュームマウント:
- - マウントパス: /conf
- # 上記でoepntelnemetry用に作成されたconfigmap
- 名前: opentelemetry-collector-configmap-hua
- - マウントパス: /etc/otel-collector/secrets/etcd-cert/
- 名前: etcd-tls
- 読み取り専用: true
- dnsポリシー: ClusterFirst
- 再起動ポリシー: 常に
- スケジューラ名:デフォルト-scheduler
- セキュリティコンテキスト: {}
- # sa ここで自分で作成する
- サービスアカウント: opentelemetry-collector-hua
- サービスアカウント名: opentelemetry-collector-hua
- 終了猶予期間秒数: 30
- ボリューム:
- - 構成マップ:
- デフォルトモード: 420
- アイテム:
- -キー:リレー
- パス: relay.yaml
- # 上記でoepntelnemetry用に作成されたconfigmap
- 名前: opentelemetry-collector-hua
- 名前: opentelemetry-collector-configmap-hua
- -名前: etcd-tls
- 秘密:
- デフォルトモード: 420
- シークレット名: etcd-tls
-
- # opentelemetry の実行ステータスを確認します。 opentelemetryとVMが同じk8sクラスタ内にある場合は、サービスセットを記述し、lbを使用しないでください(クラウドによって制約されます)
- # 4 層リスナーのバックエンド サーバーは現在、クライアントとサーバーの両方をサポートできません)
- [root@kube-control-1 ~]# kubectl get po -n kube-system |grep opentelemetry-collector-hua
- opentelemetry-collector-hua-647c6c64c7-j6p4b 1/1 実行中 0 8h
インストールチェックすべてのコンポーネントがインストールされたら、ブラウザにhttp://lb:8481/select/0/vmuiと入力し、次のように入力します。サーバー URL に http://lb:8481/select/0/prometheus を指定します。最後に、対応するインジケーターを入力してデータを照会し、左上隅で自動更新をオンにすることができます。 要約するインストールプロセス全体は比較的簡単です。インストールが完了すると、複数の k8s クラスターの監視データを保存できるようになります。 vm は PromeQL に基づく MetricsQL をサポートしており、Grafana のデータ ソースとしても使用できます。考えてみてください。以前は、各 k8s クラスターに Prometheus を手動で個別にインストールし、ストレージを構成する必要がありました。データをクエリする必要がある場合は、各クラスターの Prometheus UI を個別に開く必要があります。ちょっと面倒じゃないですか? vm が良いと思ったら、ぜひ試してみてください! 全文参照- https://github.com/VictoriaMetrics/VictoriaMetrics/tree/cluster
- https://docs.victoriametrics.com/
- https://opentelemetry.io/docs/
- https://prometheus.io/docs/prometheus/latest/configuration/configuration/
|