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