Operator は Kubernetes のキラー機能であり、アプリケーションのインストール、構成、管理を大幅に簡素化できることは周知の事実です。同様に、VictoriaMetrics は管理用の対応する Operator、vm-operator も開発しました。その設計と実装は、アプリケーション監視構成を管理するための優れたツールである prometheus-operator にヒントを得ています。 vm-operator は次の CRD を定義します。 - VMCluster: VM クラスターを定義します。
- VMAgent: vmagent インスタンスを定義します。
- VMServiceScrape:サービスによってサポートされるポッドからメトリックをスクレイピングするための構成を定義します。
- VMPodScrape: Pod からメトリックをスクレイピングするための構成を定義します。
- VMRule:アラームと録画のルールを定義します。
- VMProbe:ブラックボックス エクスポーターを使用して、ターゲットのプローブ構成を定義します。
さらに、Operator はデフォルトで prometheus-operator 内の ServiceMonitor、PodMonitor、PrometheusRule、および Probe オブジェクトを認識し、CRD オブジェクトを使用して Kubernetes クラスター内の VM アプリケーションを管理できるようになります。 インストールvm-operator は Helm Charts パッケージを提供しているので、Helm を使用してワンクリックでインストールできます。 ☸ ➜ helm リポジトリにVM を追加しますhttps://victoriametrics.github.io/helm-charts/ ☸ ➜ helm リポジトリの更新 ニーズに応じて値をカスタマイズします。デフォルトの values.yaml は次のコマンドで取得できます。 ☸ ➜ helm show values vm / victoria - metrics - operator > values .yaml 変更したのは以下の内容のみです。 # 値.yaml rbac :いいえ 作成: true pspEnabled : false # pspを作成しない 演算子: # プロメテウスコンバータを無効にする: false # psp_auto_creation_enabled : 無効 # enable_converter_ownership : false # # vmagent とvmauth の設定同期時間を短縮し、予測可能にする必要があります。 useCustomConfigReloader : true # # 入場Webフック: # # # 有効: false # # # ポリシー:失敗 # # # # # # # caバンドル: "" # 証明書マネージャ: # # # 有効: false # # # 発行者: { } 次に、次のコマンドを使用して、ワンクリックで vm-operator をインストールします。 ☸ ➜ helm アップグレード 名前:ビクトリア-メトリック-オペレーター 最終配備: 2022年5月17日火曜日15:51:40 名前空間: vm -演算子 ステータス:展開済み 改訂: 1 テストスイート:なし 注記: victoria - metrics -オペレーターがインストールされました。次のコマンドを実行してステータスを確認します: kubectl
詳細については、 https://github.com/VictoriaMetrics/helm-charts/tree/master/charts/victoria-metrics-operator をご覧ください。 https://docs.victoriametrics.com/guides/getting-started-with-vm-operator.html の「 VM Operator のスタートガイド」 を参照してください。 インストールが完了したら、vm-operator のステータスをチェックして、インストールが成功したかどうかを確認できます。 ☸ ➜ helm ls - n vm -オペレーター 名前 名前空間 リビジョン 更新 ステータス チャート アプリ バージョン victoria - metrics - operator vm - operator 1 2022 - 05 - 17 15 : 53 : 14.60667 + 0800 CST デプロイ済み victoria - metrics - operator - 0.9 .0 0.24 .0 ☸ ➜ kubectl 名前 準備完了 ステータス 再起動 年齢 ビクトリア-メトリック-オペレーター- d467cf69c - glh6v 1 / 1実行中0 2分58秒 VMクラスタを展開するOperator がインストールされると、以下に示すようにいくつかの CRD が含まれます。 ☸ ➜ kubectl で crd を取得します| grep victoriametrics vmagents .operator .victoriametrics .com 2022-05-17 T07 : 51 : 42Z vmalertmanagerconfigs.operator.victoriametrics.com 2022-05-17 T07 : 51 : 42Z vmalertmanagers.operator.victoriametrics.com 2022-05-17 T07 : 51 : 42Z vmalerts.operator.victoriametrics.com 2022-05-17 T07 : 51 : 42Z vmauths.operator.victoriametrics.com 2022-05-17 T07 : 51 : 42Z vmclusters .operator .victoriametrics .com 2022-05-17 T07 : 51 : 42Z vmnodescrapes .operator .victoriametrics .com 2022-05-17 T07 : 51 : 42Z vmpodscrapes .operator .victoriametrics .com 2022-05-17 T07 : 51 : 42Z vmprobes.operator.victoriametrics.com 2022-05-17 T07 : 51 : 42Z vmrules.operator.victoriametrics.com 2022-05-17 T07 : 51 : 42Z vmservicescrapes.operator.victoriametrics.com 2022-05-17 T07 : 51 : 42Z vmsingles .operator .victoriametrics .com 2022-05-17 T07 : 51 : 42Z vmstaticscrapes .operator .victoriametrics .com 2022-05-17 T07 : 51 : 42Z vmusers.operator.victoriametrics.com 2022-05-17 T07 : 51 : 42Z たとえば、今すぐ VM をデプロイしたい場合、単一ノード モードだけが必要な場合は、VMSingle オブジェクトを直接使用できます。 VM のクラスターを展開する場合は、VMCluster を直接使用してオブジェクトを定義できます。各コンポーネントを手動で作成する必要はありません。 Operator は、定義に従ってクラスターをプルアップするのに役立ちます。 たとえば、ここでは VMCluster オブジェクトを以下のように定義します。 # vmcluster - デモ.yaml apiバージョン: operator .victoriametrics .com / v1beta1 種類: VMCluster メタデータ: 名前: vmcluster -デモ 仕様: レプリケーション係数: 1 保持期間: "1週間" ストレージ: レプリカ数: 2 ストレージ: ボリュームクレームテンプレート: 仕様: アクセスモード: -一度だけ読み書き可能 リソース: リクエスト: ストレージ: 10G ストレージクラス名: nfs -クライアント ストレージデータパス: / vm-データ vmselect : レプリカ数: 2 キャッシュマウントパス: / cache ストレージ: ボリュームクレームテンプレート: 仕様: ストレージクラス名: nfs -クライアント アクセスモード: -一度だけ読み書き可能 リソース: リクエスト: ストレージ: 1G vmin挿入: レプリカ数: 2 ここでは、spec.retentionPeriod を使用してデータ保持期間を 1 週間に指定し、replicaCount を使用して各コンポーネントのレプリカ数を 2 に指定し、storage.volumeClaimTemplate を使用してデータ永続性の PVC テンプレートを指定します。 kubectl explain を通じて、オブジェクト全体の構成可能なプロパティを取得できます。 ☸ ➜ kubectl で VMCluster .specを説明します 種類: VMCluster バージョン: operator.victoriametrics.com/v1beta1 リソース: spec <オブジェクト> 説明: VMClusterSpecはVMClusterの望ましい状態を定義します 分野: clusterVersion <文字列> ClusterVersion は、すべてのコンポーネントのデフォルトのイメージ タグを定義します。それはできる コンポーネント固有のイメージ.tag値で上書きされます。
imagePullSecrets < [ ]オブジェクト> ImagePullSecrets 同じディレクトリ内のシークレットへの参照のリスト(オプション) レジストリからイメージを取得するために使用する名前空間。 http://kubernetes.io/docs/user-guide/images#specifying-imagepullsecrets-on-a-pod podSecurityPolicyName <文字列> PodSecurityPolicyName -空の場合のpodSecurityPolicyの名前を定義します value 、 prefixedName が使用されます。 replicationFactor < 整数> ReplicationFactorは、 異なるデータ間でデータのコピーをいくつ作成するかを定義します。 ストレージノード 保持期間<文字列> -必須- 保存されたメトリックの保持期間VictoriaMetricsにはデータ/ と indexdb /フォルダのメトリックはデータから/パーティションが作成されるやいなや削除される 保存期間が終了し、インデックスデータベースの逆インデックスデータが1回回転します。 設定された保存期間の半分 https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#retention serviceAccountName <文字列> ServiceAccountNameは、実行に使用するServiceAccountの名前です。 VMSelectポッド。 vminsert <オブジェクト> vmselect <オブジェクト> vmstorage <オブジェクト> 同様に、コンポーネントで定義できるプロパティを取得する場合も、vmstorage オブジェクトで構成できるプロパティを表示するなど、このメソッドを使用して取得できます。 ☸ ➜ kubectl で VMCluster .spec .vmstorageを説明します 種類: VMCluster バージョン: operator.victoriametrics.com/v1beta1 リソース: vmstorage <オブジェクト> 説明: <空> 分野: 親和性<> アフィニティ 指定されている場合、ポッドのスケジュール制約。 configMaps <[]文字列> ConfigMapsはVMSelectと同じ名前空間内のConfigMapsのリストです。 VMSelect Pod にマウントされるオブジェクト。 ConfigMapは /etc/vm/configs/<configmap-name> にマウントされます。 コンテナ <[]> コンテナプロパティを使用すると、サイドカーの追加やパッチの挿入が可能になります。 既存のコンテナ。プロキシやバックアップなどに役立ちます。 dnsConfig <オブジェクト> ポッドの DNS パラメータを指定します。ここで指定されたパラメータは DNSPolicy に基づいて生成された DNS 構成にマージされます。 dnsPolicy <文字列> DNSPolicyはポッドのDNSポリシーを設定します extraArgs <map[文字列]文字列> 追加環境 <[]> VMSelectポッドに追加されるExtraEnvs ホストネットワーク <ブール値> HostNetworkはポッドがノードネットワーク名前空間を使用できるかどうかを制御します 画像 <オブジェクト> イメージ - VMStorage の Docker イメージ設定 コンテナの初期化 <[]> InitContainers を使用すると、ポッド定義に initContainers を追加できます。それらの VMSelectに注入するための秘密を取得するために使用できます。 外部ソースからの構成。実行中にエラーが発生した場合、 initContainer により Pod が再起動されます。詳細: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ 使用方法 シークレットフェッチ以外のユースケースのinitContainersは完全に メンテナーがサポートする範囲外であり、そうすることで、 この動作は予告なしにいつでも中断される可能性があることをご了承ください。 ライブネスプローブ <> CRDポッドに追加されるLivenessProbe logFormat <文字列> VMSelect で構成する LogFormat。デフォルトまたはJSON logLevel <文字列> VMSelect で構成する LogLevel。 メンテナンス挿入ノードID <[]整数> MaintenanceInsertNodeIDs - 指定されたノード ID を挿入リクエストから除外します ルーティングにはポッドサフィックスを含める必要があります。ポッド0の場合、IDは0などになります。 たとえば、pod-0、pod-1、pod-2、pod-3 があるとします。 pod-0とpod-3を除外するには ルーティングを挿入し、ノードIDを定義します: [0,3]。ストレージ拡張時に便利 クラスターで一部のデータを再バランスしたい。 maintenanceSelectNodeIDs <[]integer> MaintenanceInsertNodeIDs - 指定されたノード ID を選択リクエストから除外します ルーティングには、ポッドサフィックスを含める必要があります。pod-0 の場合、ID は 0 などになります。 名前 <文字列> 名前は非推奨であり、0.22.0 リリースで削除されます。 nodeSelector <map[文字列]文字列> NodeSelector ポッドがスケジュールされるノードを定義します。 podDisruptionBudget <オブジェクト> PodDisruptionBudget はオペレータによって作成されました podMetadata <オブジェクト> PodMetadataはラベルと注釈を設定し、 VMSelectポッド。 ポート <文字列> ヘルスチェック接続用のポート 優先度クラス名 <文字列> ポッドに割り当てられた優先クラス 準備プローブ <> CRDポッドに追加されるReadinessProbe replicaCount <整数> -必須- ReplicaCount は、VMStorage クラスターの予想サイズです。コントローラー 最終的には、実行中のクラスタのサイズが予想と同じになります。 サイズ。 リソース <オブジェクト> リソースコンテナのリソース要求と制限、 https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ rollingUpdateStrategy <文字列> RollingUpdateStrategyはアプリケーションの更新戦略を定義します。デフォルトは OnDeleteの場合、この場合オペレータは更新プロセスを処理します。変更可能です ローリングアップデート ランタイムクラス名 <文字列> RuntimeClassName - Kubernetes ポッドのランタイム クラスを定義します。 https://kubernetes.io/docs/concepts/containers/runtime-class/ スケジューラ名 <文字列> SchedulerName - Kubernetes スケジューラ名を定義します 秘密 <[]文字列> SecretsはVMSelectオブジェクトと同じ名前空間内のSecretのリストです。 VMSelect Pod にマウントする必要があります。秘密は /etc/vm/secrets/<シークレット名>。 セキュリティコンテキスト<> SecurityContextはポッドレベルのセキュリティ属性と共通コンテナを保持します 設定。デフォルトでは、デフォルトの PodSecurityContext になります。 サービススクレイプスペック <> vmselect VMServiceScrape spec に追加される ServiceScrapeSpec serviceSpec <オブジェクト> vmstorage の追加サービスを作成する ServiceSpec スタートアッププローブ <> CRDポッドに追加されるStartupProbe
ストレージ <オブジェクト> ストレージ - StorageDataPathの永続ボリュームを追加します。 永続キャッシュ storageDataPath <文字列> StorageDataPath - ストレージデータへのパス 終了猶予期間秒数 <整数> TerminationGracePeriodSeconds コンテナの正常終了期間 許容範囲 <[]Object> 許容範囲 指定されている場合、ポッドの許容範囲。 トポロジースプレッド制約< [ ] > TopologySpreadConstraints 組み込み Kubernetes ポッド構成オプション、 ポッドがクラスタ内の障害ドメインにどのように分散されるかを制御します。 リージョン、ゾーン、ノード、 その他のユーザー定義のトポロジドメインなど https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ vmBackup <オブジェクト> バックアップ用の VMBackup 構成 vmInsertPort <文字列> VMInsert 接続用の VMInsertPort vmSelectPort <文字列> VMSelect接続用のVMSelectPort volumeMounts < [ ]オブジェクト> VolumeMountsは出力に追加のVolumeMountsの設定を可能にします デプロイメント定義。指定されたボリュームマウントは他のボリュームマウントに追加されます VMSelectコンテナ内のボリュームマウントは、 StorageSpec オブジェクト。 巻数< [ ] > ボリュームは出力デプロイメントで追加のボリュームを構成できます 意味。指定されたボリュームは、他のボリュームに追加されます。 StorageSpec オブジェクトの結果として生成されます。 上記で定義したオブジェクトを直接適用します。 ☸ ➜ kubectl apply -f vmcluster -デモ.yaml ☸ ➜ kubectl で vmcluster を取得します 名前挿入数ストレージ数選択数年齢 ステータス vmcluster -デモ2 2 2 7 m21s 拡張 適用後、vm-operator は CRD オブジェクトが作成されたことを確認し、定義に従って対応する VM クラスター (上記のコンポーネント サービス) を自動的に作成します。 ☸ ➜ kubectl ポッドを取得する 名前 準備完了 ステータス 再起動 年齢 vminsert - vmcluster -デモ- 84956 d98b5 - 5 ckft 1 / 1実行中0 93秒 vminsert - vmcluster -デモ- 84956 d98b5 - kpcj6 1 / 1実行中0 93秒 vmselect - vmcluster -デモ- 0 1 / 1実行中0 3分 7 秒 vmselect - vmcluster -デモ- 1 1 / 1実行中0 3分 7 秒 vmstorage - vmcluster -デモ- 0 1 / 1実行中0 4分 54 秒 vmstorage - vmcluster -デモ- 1 1 / 1実行中0 4分54秒 ☸ ➜ kubectl でサービスを取得 名前 タイプ クラスタ- IP 外部- IP ポート( S )年齢 vminsert - vmcluster -デモ ClusterIP 10.102 .145 .24 <なし> 8480 / TCP 4分57秒 vmselect - vmcluster -デモ ClusterIP なし<なし> 8481 / TCP 6分 31 秒 vmstorage - vmcluster - demo ClusterIP なし<なし> 8482 / TCP 、 8400 / TCP 、 8401 / TCP 8分 18 秒
単純な VMCluster オブジェクトを定義するだけで、VM クラスターを管理できます。とても便利じゃないですか?特にコンポーネント レプリカの数が多い場合は、-storageNode パラメータを手動で構成する必要はありません。 VM クラスターは正常にインストールされましたが、まだデータがないため、監視インジケーターのキャプチャを構成する必要があります。ここで VMAgent オブジェクトを直接作成し、以下に示すようにオブジェクトを作成できます。 # vmagent - デモ.yaml apiバージョン: operator .victoriametrics .com / v1beta1 種類: VMAgent メタデータ: 名前: vmagent -デモ 仕様: サービススクレイプ名前空間セレクター: { } podScrape名前空間セレクタ: { } ポッドスクレイプセレクタ: { } サービススクレイプセレクタ: { } ノードスクレイプセレクタ: { } ノードスクレイプ名前空間セレクタ: { } 静的スクレイプセレクタ: { } 静的スクレイプ名前空間セレクタ: { } レプリカ数: 1 リモート書き込み: - URL : "http://vminsert-vmcluster-demo.default.svc.cluster.local:8480/insert/0/prometheus/api/v1/write" 同様に、VMAgent のすべての構成可能なプロパティを取得するには、kubectl explain VMAgent.spec を使用します。ここで最も重要な構成は、vminsert コンポーネントのサービス アドレスである remoteWrite.url を通じてリモート書き込み URL アドレスを指定することです。キャプチャするインジケーターをフィルタリングするために、他のいくつかのプロパティを使用できます。 上記の VMAgent オブジェクトを適用するだけで、監視データのキャプチャを開始できます。 ☸ ➜ kubectl apply -f vmagent -デモ.yaml ☸ ➜ kubectl で vmagent を取得する 名前 年齢 vmagent -デモ6秒 作成後、vm-operator は対応する説明に従って対応する vmagent インスタンスを作成します。 ☸ ➜ kubectl get pods -l app .kubernetes .io / name = vmagent 名前 準備完了 ステータス 再起動 年齢 vmagent - vmagent -デモ- 6 dcc7f9dfd - hxsff 2 / 2実行中0 4分 24 秒 vmagent には 2 つのコンテナがあり、1 つは vmagent アプリケーション コンテナで、もう 1 つは Secret オブジェクトをマウントするために使用される config-reloader コンテナであることがわかります。構成の変更を監視し、vmagent の構成を再読み込みするための信号を送信します。 Secret オブジェクトには、vmagent キャプチャ インジケーターの構成コンテンツが含まれています。 次のコマンドを実行すると、ローカル マシンから vmagent ポートにアクセスできるようになります。 ☸ ➜ kubectl ポート転送svc / vmagent - vmagent - demo 8429 : 8429 127.0.0.1 から転送: 8429 - > 8429 [ :: 1 ] から転送中: 8429 -> 8429 ブラウザで http://127.0.0.1:8429/targets にアクセスして、vmagent によって収集されたクラスター メトリックを確認できます。 vmagent は、vm-operator によって制御される Kubernetes サービス検出を通じてキャプチャするターゲットを取得します。 VMクラスタの検証次に、VM クラスターを検証するために Grafana をインストールします。簡単にするために、Helm Chart を直接使用してインストールします。 ☸ ➜ helm リポジトリ追加grafana https://grafana.github.io/helm-charts ☸ ➜ helm リポジトリの更新 以下のように、データ ソースと組み込みダッシュボードを事前に値で定義できます。 猫<< EOF |ヘルム インストール グラファナ グラファナ/グラファナ- f - データソース: データソース.yaml : apiバージョン: 1 データソース: -名前: victoriametrics タイプ:プロメテウス 組織ID : 1 url : http : // vmselect - vmcluster - demo.default.svc.cluster.local : 8481 / select / 0 / prometheus / アクセス:プロキシ isDefault : 真 更新間隔秒数: 10 編集可能: true ダッシュボードプロバイダー: ダッシュボードプロバイダー.yaml : apiバージョン: 1 プロバイダー: -名前: 'デフォルト' 組織ID : 1 フォルダ: '' タイプ:ファイル 削除を無効にする: true 編集可能: true オプション: パス: / var / lib / grafana / dashboards / default ダッシュボード: デフォルト: ビクトリアメトリックス: ネットID : 11176 改訂: 18 データソース: victoriametrics vmagent : ネットID : 12683 改訂: 7 データソース: victoriametrics Kubernetes : : ネットID : 14205 改訂: 1 データソース: victoriametrics 終了 名前:グラファナ 最終配備日: 2022年5月17 日火曜日17:13:14 名前空間:デフォルト ステータス:展開済み 改訂: 1 注記: 1.次のコマンドを実行して、 「admin」ユーザーのパスワードを取得します。 kubectl get secret 2.クラスター内から次の DNS 名のポート80経由で Grafana サーバーにアクセスできます。 グラファナ.default .svc .cluster .local 同じシェルで次のコマンドを実行して、アクセスする Grafana URL を取得します。 POD_NAME をエクスポートします。 $ ( kubectl get pods kubectl 3.手順1 のパスワードとユーザー名「admin」でログインします。 ########################################################################### ###### 警告:永続性が無効になっています!!!次の場合、データは失われます。##### ###### Grafana ポッドは終了します。 ##### ########################################################################### インストールが完了したら、上記のコマンドを使用して Grafana サービスをローカルで公開できます。 ☸ ➜ POD_NAME をエクスポートします。 $ ( kubectl get pods kubectl 127.0 .0 .1 から転送: 3000 -> 3000 [ :: 1 ] から転送中: 3000 -> 3000 ログインユーザー名は admin で、パスワードは次のコマンドで取得できます。 ☸ ➜ kubectl get secret victoriametrics クラスターのダッシュボードを表示できます。 通常、次のページが表示されます。 これは、デフォルトでは VMAgent が vmagent 自体を含む VM クラスター関連コンポーネントのメトリックを収集するため、VM クラスター ダッシュボードを正常に表示できますが、node-exporter などの他のメトリックは収集されないためです。 16098 ダッシュボードを Grafana にインポートできます。 現時点では、 VMNodeScrape CRD オブジェクトを通じて定義できます。 VMNodeScrape オブジェクトを使用すると、Kubernetes ノードを自動的に検出し、次のリソース オブジェクトを作成してノード エクスポータ インジケーターを収集できます。 # vmnode -エクスポーター- .yamlをスクレイピング apiバージョン: operator .victoriametrics .com / v1beta1 種類: VMNodeScrape メタデータ: 名前:ノード-エクスポーター 仕様: パス: /メトリック port : "9111" #ノードのポートを指定-エクスポーター scrape_interval : 15秒 # relabelConfigs: # 再ラベル設定 # セレクタ: # フィルターノード 上記のオブジェクトを適用するだけです: ☸ ➜ kubectl apply -f vmnode -exporter -scrape .yaml ☸ ➜ kubectl で vmnodescrape を取得します 名前 年齢 ノード-エクスポーター19秒 作成後、vmagent は自動的にオブジェクトを識別し、ノード エクスポーターを取得します。 この時点で、ノード エクスポーターのダッシュボードを確認すると、すべてが正常であることがわかります。 さらに、VMServiceScrape を使用して、スクレイピングするサービス (エンドポイント) を定義することもできます。セレクタに基づいて vmagent のスクレイピング構成を生成します。定義されたサービスを持たないポッドのインジケーターをスクレイピングする場合は、VMPodScrape を通じて定義できます。同様に、アラーム関連情報の管理用の対応する CRD もあります。 vm-operator を使用すると、VM クラスターの管理が大幅に軽減されるため、強くお勧めします。 |