セルフホスト Prometheus モニタリングシステムを使用するハイブリッドクラウド環境では、ACK One 登録済みクラスターのコントロールプレーンコンポーネントからのメトリックを既存のモニタリングシステムに統合できます。この統合では、Metrics Aggregator コンポーネントをインストールし、ServiceMonitor を設定することで、統合されたアラートと可観測性を実現します。
仕組み
ACK One 登録済みクラスターでは、kube-scheduler や cloud-controller-manager などのコントロールプレーンコンポーネントは Alibaba Cloud が管理するインフラストラクチャ上で実行されており、直接アクセスすることはできません。セルフホスト Prometheus がこれらのコンポーネントからメトリックをスクレイピングできるようにするため、Container Service for Kubernetes (ACK) は次のプロセスを使用します。
メトリックの集約と公開:マネージド側の Metrics Aggregator コンポーネントは、さまざまなコントロールプレーンコンポーネントからメトリックを収集・集約します。その後、API サーバーの内部エンドポイント (プライベート向け SLB インスタンス) を介して、統合されたメトリックインターフェイスを公開します。
サービスディスカバリーメカニズム:クラスター内に Headless Service がデプロイされ、その Endpoints はマネージド API サーバーのプライベート向け SLB インスタンスの IP アドレスを指します。Prometheus Operator のカスタムリソース定義 (CRD) である ServiceMonitor には、Prometheus がこのサービスを自動的に検出・監視するためのサービスディスカバリールールが設定されています。
スクレイピングプロセス:Prometheus は ServiceMonitor を介してターゲットサービスを検出し、そのエンドポイントを解析した後、内部 SLB を経由してマネージドメトリック集約インターフェイスにアクセスし、コントロールプレーンコンポーネントのメトリックをスクレイピングします。
このプロセスはパブリックエンドポイントを必要としないため、セキュリティが確保され、ネットワークパフォーマンスが向上します。
注:Managed Service for Prometheus をクラスターに統合すると、データの自動モニタリングとスクレイピング、リアルタイムの Grafana ダッシュボード、設定可能なアラート機能を利用できます。このサービスを使用すると、アラートルールを作成し、メール、SMS、DingTalk などのチャンネルを通じて通知を受け取ることができます。
前提条件
ACK One 登録済みクラスターの ack-stub コンポーネントのバージョンは、v1.15.0.4 以降である必要があります。
ステップ 1:Metrics Aggregator コンポーネントのインストール
Metrics Aggregator コンポーネントをインストールして、コントロールプレーンコンポーネントからメトリックを集約します。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターを選択します。
クラスターページで、対象のクラスター名をクリックします。左側のナビゲーションウィンドウで、アドオンをクリックします。
アドオンページで、Metrics Aggregator を検索します。コンポーネントカードで インストールをクリックし、画面の指示に従ってインストールを完了します。
ステップ 2:認証情報の準備
クラスターの KubeConfig を取得し、kubectl を使用してクラスターに接続します。
注:セキュリティを強化するため、必要最小限の権限を持つ KubeConfig を使用してください。
KubeConfig から証明書を抽出します。Prometheus はこれらの証明書を使用して、API サーバーとの安全な TLS 接続を確立します。
# 1. CA 証明書を抽出します (API サーバーの検証用) kubectl config view --raw -o jsonpath='{.clusters[0].cluster.certificate-authority-data}' | base64 -d > ca.crt # 2. クライアント証明書を抽出します (API サーバーへのクライアント識別用) kubectl config view --raw -o jsonpath='{.users[0].user.client-certificate-data}' | base64 -d > client.crt # 3. クライアント秘密鍵を抽出します kubectl config view --raw -o jsonpath='{.users[0].user.client-key-data}' | base64 -d > client.key証明書と秘密鍵を格納するための Secret を作成します。
kubectl create secret generic demo-metrics-tls \ --namespace monitoring \ --from-file=ca.crt=./ca.crt \ --from-file=tls.crt=./client.crt \ --from-file=tls.key=./client.key
ステップ 3:モニタリングリソースの作成
クラスター情報ページで、基本情報タブをクリックします。API サーバー内部エンドポイントを見つけます。メトリックへのアクセスアドレスは、
https://<YOUR_SLB_IP>:6443というフォーマットです。API サーバー用の Service を作成し、Prometheus がサービスを検出してメトリックをスクレイピングできるようにします。
次の YAML コンテンツで、
<YOUR_SLB_IP>を前のステップで取得した API サーバー内部エンドポイントの IP アドレスに置き換えます。コンテンツをack-metrics-monitoring.yamlという名前のファイルとして保存します。# API サーバーの内部 IP アドレスとポートを手動で指す Endpoints オブジェクトを作成します。 apiVersion: v1 kind: Endpoints metadata: name: demo-metrics-service # この名前は、リンクを確立するために、以下の Service 名と完全に一致する必要があります。 namespace: monitoring subsets: - addresses: - ip: <YOUR_SLB_IP> # API サーバーエンドポイントの内部 IP アドレスに置き換えます。 ports: - port: 6443 name: https-metrics protocol: TCP --- # Headless Service を作成し、上記の Endpoints オブジェクトにバインドして、ServiceMonitor に安定したサービスディスカバリーターゲットを提供します。 apiVersion: v1 kind: Service metadata: name: demo-metrics-service namespace: monitoring labels: app: demo-metrics # このラベルは、以下の ServiceMonitor のセレクターと一致する必要があります。 spec: clusterIP: None # Headless Service を定義します。仮想 IP は割り当てられず、Endpoints の IP に直接解決されます。 ports: - name: https-metrics port: 6443 targetPort: 6443 protocol: TCP --- # Prometheus のスクレイピング設定を定義します。 apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: demo-control-plane-metrics namespace: monitoring # このラベルは、自動検出のために、ご利用の Prometheus インスタンスの serviceMonitorSelector と一致する必要があります。 labels: app: prometheus-operator spec: endpoints: - interval: 30s params: hosting: - 'true' path: /metrics port: https-metrics scheme: https # ステップ 2 で作成した Secret を参照します。 tlsConfig: ca: secret: key: ca.crt name: demo-metrics-tls cert: secret: key: tls.crt name: demo-metrics-tls insecureSkipVerify: false keySecret: key: tls.key name: demo-metrics-tls selector: matchLabels: app: demo-metrics namespaceSelector: matchNames: - monitoringYAML ファイルを適用してリソースを作成します。
kubectl apply -f ack-metrics-monitoring.yaml
収集ステータスの確認
リソースが正常に作成されたことを確認します。
# Service、Endpoints、Secret を確認します kubectl get service,endpoints,secret -n monitoring | grep demo-metrics # ServiceMonitor を確認します kubectl get servicemonitor -n monitoringセルフホスト Prometheus サービスをローカルマシンにポートフォワーディングします。
kubectl port-forward svc/ack-prometheus-operator-prometheus 9090 -n monitoringブラウザで http://localhost:9090 を開き、Prometheus UI にアクセスします。
ページに移動します。
serviceMonitor/monitoring/demo-control-plane-metricsのターゲットグループを見つけます。状態列にUPと表示されていれば、メトリックのスクレイピングは成功です。