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

Container Service for Kubernetes:指定された仮想ノードのメトリックを収集する

最終更新日:Dec 14, 2024

Container Service for Kubernetes (ACK) は、データ収集エンドポイント <nodeIP>:10250/metrics/cadvisorに加えて、エンドポイント <nodeIP>:10250/metrics/cadvisor?nodeName=<nodeName> も提供します。 Prometheusの設定を変更して、指定された仮想ノードのメトリックを収集できます。

概要

仮想ノードアーキテクチャは、クラスタ内の複数の仮想ノードが同じノードIPアドレスを共有することを可能にする。 そのため、仮想ノードのメトリックを収集する場合は、すべての仮想ノードのメトリックが返されます。 Prometheusは通常、kubelet Serviceを使用してすべてのノードのメトリックを収集します。 したがって、クラスターに複数の仮想ノードが含まれている場合、重複したメトリックが返されます。

この問題に対処するために、ACKを使用すると、指定された仮想ノードのメトリックを収集できます。 ACKは、データ収集エンドポイント <nodeIP>:10250/metrics/cadvisorに加えて、仮想ノードの名前を指定できるエンドポイント <nodeIP>:10250/metrics/cadvisor?nodeName=<nodeName> を提供します。 仮想ノード名を指定すると, 指定した仮想ノードが管理するポッドの監視データだけが返されます。

前提条件

ACK仮想ノードコンポーネントがインストールされており、コンポーネントのバージョンはv2.11.0以降です。 詳細については、「ACK仮想ノード」をご参照ください。

Prometheusの設定を変更する

Prometheusの設定を変更して、指定された仮想ノードのメトリックを収集できます。 このセクションでは、Managed Service for Prometheus、オープンソースのPrometheus Operator (ackで提供されるオープンソースのPrometheus OperatorまたはACK-prometheus-operator) 、およびオープンソースのPrometheusの設定を変更する方法について説明します。

Managed Service for Prometheus

デフォルトでは、この機能はクラスターで提供されます。 追加の設定は必要ありません。

オープンソースのプロメテウス演算子

ackのアドオンからオープンソースのPrometheus OperatorまたはACK-prometheus-operatorを使用する場合は、次のServiceMonitor CustomResource (CR) を追加する必要があります。

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: virutal-kubelet
  namespace: monitoring
  labels:
    k8s-app: kubelet
    # Add this label to automatically manage prometheus-operator. 
    release: prometheus-operator
spec:
  jobLabel: k8s-app
  selector:
    matchLabels:
      k8s-app: kubelet
  namespaceSelector:
    matchNames:
    - kube-system
  endpoints:
  - port: https-metrics
    interval: 15s
    scheme: https
    path: /metrics/cadvisor
    bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
    tlsConfig:
      caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
      insecureSkipVerify: true
    relabelings:
    # Retain only the virtual node endpoint. 
    - sourceLabels: [__meta_kubernetes_endpoint_address_target_name]
      regex: (^virtual-kubelet.*)
      action: keep
    # Add parameters to query based on the specified nodeName. 
    - sourceLabels: [__meta_kubernetes_endpoint_address_target_name]
      regex: (^virtual-kubelet.*)
      targetLabel: __param_nodeName
      replacement: ${1}
      action: replace

クラスターにサービス検出が設定されている場合、kubeletサービスに基づいてcAdvisorメトリクスを収集するために、次の設定を追加して、重複データが収集された場合に <Virtual Node IP>:10250/metrics/cadvisorエンドポイントを破棄する必要があります。

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
...
spec:
  endpoints:
  - path: /metrics/cadvisor
    port: https-metrics
    ...
    relabelings:
    # The relabeling rule discards the endpoints of all targets whose names start with virtual-kubelet.
    - action: drop
      regex: (^virtual-kubelet.*)
      sourceLabels:
      - __meta_kubernetes_endpoint_address_target_name

オープンソースのPrometheus

オープンソースのPrometheusの設定ファイルを見つけます。 通常、設定ファイルは /etc/prometheus/prometheus.ymlまたはカスタム設定ディレクトリにあります。 次に、次の収集設定をファイルに追加します。

scrape_configs:

...Other job configuration. 

- job_name: monitoring/virutal-kubelet/0
  honor_timestamps: true
  scrape_interval: 15s
  scrape_timeout: 10s
  metrics_path: /metrics/cadvisor
  scheme: https
  bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  tls_config:
    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    insecure_skip_verify: true
  relabel_configs:
  - source_labels: [__meta_kubernetes_service_label_k8s_app]
    separator: ;
    regex: kubelet
    replacement: $1
    action: keep
  - source_labels: [__meta_kubernetes_endpoint_port_name]
    separator: ;
    regex: https-metrics
    replacement: $1
    action: keep
  - source_labels: [__meta_kubernetes_endpoint_address_target_kind, __meta_kubernetes_endpoint_address_target_name]
    separator: ;
    regex: Node;(.*)
    target_label: node
    replacement: ${1}
    action: replace
  - source_labels: [__meta_kubernetes_endpoint_address_target_kind, __meta_kubernetes_endpoint_address_target_name]
    separator: ;
    regex: Pod;(.*)
    target_label: pod
    replacement: ${1}
    action: replace
  - source_labels: [__meta_kubernetes_namespace]
    separator: ;
    regex: (.*)
    target_label: namespace
    replacement: $1
    action: replace
  - source_labels: [__meta_kubernetes_service_name]
    separator: ;
    regex: (.*)
    target_label: service
    replacement: $1
    action: replace
  - source_labels: [__meta_kubernetes_pod_name]
    separator: ;
    regex: (.*)
    target_label: pod
    replacement: $1
    action: replace
  - source_labels: [__meta_kubernetes_pod_container_name]
    separator: ;
    regex: (.*)
    target_label: container
    replacement: $1
    action: replace
  - source_labels: [__meta_kubernetes_service_name]
    separator: ;
    regex: (.*)
    target_label: job
    replacement: ${1}
    action: replace
  - source_labels: [__meta_kubernetes_service_label_k8s_app]
    separator: ;
    regex: (.+)
    target_label: job
    replacement: ${1}
    action: replace
  - separator: ;
    regex: (.*)
    target_label: endpoint
    replacement: https-metrics
    action: replace
  - source_labels: [__meta_kubernetes_endpoint_address_target_name]
    separator: ;
    regex: (^virtual-kubelet.*)
    replacement: $1
    action: keep
  - source_labels: [__meta_kubernetes_endpoint_address_target_name]
    separator: ;
    regex: (^virtual-kubelet.*)
    target_label: __param_nodeName
    replacement: ${1}
    action: replace
  kubernetes_sd_configs:
  - role: endpoints
    namespaces:
      names:
      - kube-system

クラスターにサービス検出が設定されている場合、kubeletサービスに基づいてcAdvisorメトリクスを収集するために、次の設定を追加して、重複データが収集された場合に <Virtual Node IP>:10250/metrics/cadvisorエンドポイントを破棄する必要があります。

scrape_configs:

...Other job configuration. 

- job_name: monitoring/ack-prometheus-operator-kubelet/0
  honor_labels: true
  honor_timestamps: true
  ...
  relabel_configs:
  ...
  // Discard the endpoint for collecting the /metrics/cadviso metrics of virtual nodes. 
  - source_labels: [__meta_kubernetes_endpoint_address_target_name]
    separator: ;
    regex: (^virtual-kubelet.*)
    replacement: $1
    action: drop