全部产品
Search
文档中心

Container Service for Kubernetes:Kumpulkan data metrik node virtual yang ditentukan

更新时间:Jul 06, 2025

Topik ini menjelaskan cara memodifikasi konfigurasi Prometheus untuk mengumpulkan data metrik node virtual yang ditentukan.

Pengenalan

Arsitektur node virtual memungkinkan beberapa node virtual dalam kluster berbagi alamat IP node yang sama. Akibatnya, ketika Anda mengumpulkan data metrik dari node virtual, data metrik dari semua node virtual akan dikembalikan. Prometheus biasanya menggunakan Layanan kubelet untuk mengumpulkan data metrik dari semua node, sehingga data metrik duplikat akan dikembalikan.

Untuk mengatasi masalah ini, dan Container Service for Kubernetes (ACK) memungkinkan Anda mengumpulkan data metrik node virtual yang ditentukan. Selain titik akhir pengumpulan data <nodeIP>:10250/metrics/cadvisor, ACK menyediakan titik akhir <nodeIP>:10250/metrics/cadvisor?nodeName=<nodeName>, yang memungkinkan Anda menentukan nama node virtual. Setelah menentukan nama node virtual, hanya data pemantauan pod yang dikelola oleh node virtual tersebut yang akan dikembalikan.

Prasyarat

Komponen node virtual ACK telah diinstal dengan versi 2.11.0 atau lebih baru. Untuk informasi lebih lanjut, lihat ACK Virtual Node.

Modifikasi konfigurasi Prometheus

Anda dapat memodifikasi konfigurasi Prometheus untuk mengumpulkan data metrik node virtual yang ditentukan. ACK memungkinkan Anda memodifikasi konfigurasi Managed Service for Prometheus, open-source Prometheus Operator (open-source Prometheus Operator atau ack-prometheus-operator yang disediakan oleh ACK), dan open-source Prometheus.

Managed Service for Prometheus

Secara default, fitur ini disediakan dalam kluster. Tidak diperlukan konfigurasi tambahan.

Open-source Prometheus Operator

Jika Anda menggunakan open-source Prometheus Operator atau ack-prometheus-operator dari add-ons ACK, Anda harus menambahkan CustomResource (CR) ServiceMonitor berikut:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: virtual-kubelet
  namespace: monitoring
  labels:
    k8s-app: kubelet
    # Tambahkan label ini untuk mengelola prometheus-operator secara otomatis. 
    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:
    # Pertahankan hanya titik akhir node virtual. 
    - sourceLabels: [__meta_kubernetes_endpoint_address_target_name]
      regex: (^virtual-kubelet.*)
      action: keep
    # Tambahkan parameter untuk query berdasarkan nodeName yang ditentukan. 
    - sourceLabels: [__meta_kubernetes_endpoint_address_target_name]
      regex: (^virtual-kubelet.*)
      targetLabel: __param_nodeName
      replacement: ${1}
      action: replace

Jika kluster sudah dikonfigurasi dengan penemuan layanan untuk mengumpulkan metrik cAdvisor berdasarkan Layanan kubelet, Anda harus menambahkan konfigurasi berikut untuk membuang titik akhir <Virtual Node IP>:10250/metrics/cadvisor agar tidak mengumpulkan data duplikat.

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
...
spec:
  endpoints:
  - path: /metrics/cadvisor
    port: https-metrics
    ...
    relabelings:
    # Aturan relabeling membuang titik akhir semua target yang namanya dimulai dengan virtual-kubelet.
    - action: drop
      regex: (^virtual-kubelet.*)
      sourceLabels:
      - __meta_kubernetes_endpoint_address_target_name

Open-source Prometheus

Temukan file konfigurasi open-source Prometheus. Biasanya, Anda dapat menemukan file konfigurasi di /etc/prometheus/prometheus.yml atau di direktori konfigurasi kustom Anda. Kemudian, tambahkan konfigurasi koleksi berikut ke file tersebut:

scrape_configs:

...Konfigurasi job lainnya. 

- job_name: monitoring/virtual-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

Jika kluster sudah dikonfigurasi dengan penemuan layanan untuk mengumpulkan metrik cAdvisor berdasarkan Layanan kubelet, Anda perlu menambahkan konfigurasi berikut untuk membuang titik akhir <Virtual Node IP>:10250/metrics/cadvisor agar tidak mengumpulkan data duplikat.

scrape_configs:

...Konfigurasi job lainnya. 

- job_name: monitoring/ack-prometheus-operator-kubelet/0
  honor_labels: true
  honor_timestamps: true
  ...
  relabel_configs:
  ...
  // Buang titik akhir untuk mengumpulkan metrik /metrics/cadviso dari node virtual. 
  - source_labels: [__meta_kubernetes_endpoint_address_target_name]
    separator: ;
    regex: (^virtual-kubelet.*)
    replacement: $1
    action: drop