すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:セルフホスト Prometheus を使用したコントロールプレーンコンポーネントメトリックの収集

最終更新日:Dec 09, 2025

セルフホスト Prometheus モニタリングシステムを使用するハイブリッドクラウド環境では、ACK One 登録済みクラスターのコントロールプレーンコンポーネントからのメトリックを既存のモニタリングシステムに統合できます。この統合では、Metrics Aggregator コンポーネントをインストールし、ServiceMonitor を設定することで、統合されたアラートと可観測性を実現します。

仕組み

ACK One 登録済みクラスターでは、kube-schedulercloud-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 コンポーネントをインストールして、コントロールプレーンコンポーネントからメトリックを集約します。

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターを選択します。

  2. クラスターページで、対象のクラスター名をクリックします。左側のナビゲーションウィンドウで、アドオンをクリックします。

  3. アドオンページで、Metrics Aggregator を検索します。コンポーネントカードで インストールをクリックし、画面の指示に従ってインストールを完了します。

ステップ 2:認証情報の準備

  1. クラスターの KubeConfig を取得し、kubectl を使用してクラスターに接続します

    :セキュリティを強化するため、必要最小限の権限を持つ KubeConfig を使用してください。
  2. 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
  3. 証明書と秘密鍵を格納するための 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:モニタリングリソースの作成

  1. クラスター情報ページで、基本情報タブをクリックします。API サーバー内部エンドポイントを見つけます。メトリックへのアクセスアドレスは、https://<YOUR_SLB_IP>:6443 というフォーマットです。

  2. 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:
          - monitoring
  3. YAML ファイルを適用してリソースを作成します。

    kubectl apply -f ack-metrics-monitoring.yaml

収集ステータスの確認

  1. リソースが正常に作成されたことを確認します。

    # Service、Endpoints、Secret を確認します
    kubectl get service,endpoints,secret -n monitoring | grep demo-metrics
    # ServiceMonitor を確認します
    kubectl get servicemonitor -n monitoring
  2. セルフホスト Prometheus サービスをローカルマシンにポートフォワーディングします。

    kubectl port-forward svc/ack-prometheus-operator-prometheus 9090 -n monitoring
  3. ブラウザで http://localhost:9090 を開き、Prometheus UI にアクセスします。

  4. ステータス > ターゲット ページに移動します。serviceMonitor/monitoring/demo-control-plane-metrics のターゲットグループを見つけます。状態列に UP と表示されていれば、メトリックのスクレイピングは成功です。