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: replaceJika 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_nameOpen-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-systemJika 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