diff --git a/docs/ingress/kube-vip.md b/docs/ingress/kube-vip.md index a01f2daaa..2ca975825 100644 --- a/docs/ingress/kube-vip.md +++ b/docs/ingress/kube-vip.md @@ -86,3 +86,12 @@ kube_vip_leaseduration: 30 kube_vip_renewdeadline: 20 kube_vip_retryperiod: 4 ``` + +To expose [Prometheus metrics](https://kube-vip.io/docs/installation/flags/#environment-variables) from the kube-vip static pod, set `kube_vip_metrics_enabled`. `kube_vip_metrics_port` is an integer; the manifest sets `prometheus_server` to `:PORT` because kube-vip passes that value to Go's HTTP listen address (see [`servePrometheusHTTPServer` in kube-vip](https://github.com/kube-vip/kube-vip/blob/main/cmd/kube-vip.go)). The manifest `ports` entry uses the same number for tooling that reads the pod spec. + +Kubespray defaults `kube_vip_metrics_port` to `2112`, matching upstream kube-vip's `--prometheusHTTPServer` default. Override it if your scrape config expects another port. + +```yaml +kube_vip_metrics_enabled: true +# kube_vip_metrics_port: 2112 +``` diff --git a/inventory/sample/group_vars/k8s_cluster/addons.yml b/inventory/sample/group_vars/k8s_cluster/addons.yml index 67206e1db..d7657bdb9 100644 --- a/inventory/sample/group_vars/k8s_cluster/addons.yml +++ b/inventory/sample/group_vars/k8s_cluster/addons.yml @@ -201,6 +201,8 @@ kube_vip_enabled: false # kube_vip_lb_fwdmethod: local # kube_vip_bgp_sourceip: # kube_vip_bgp_sourceif: +# kube_vip_metrics_enabled: false +# kube_vip_metrics_port: 2112 # Node Feature Discovery node_feature_discovery_enabled: false diff --git a/roles/kubernetes/node/defaults/main.yml b/roles/kubernetes/node/defaults/main.yml index b0f5bac37..015aa1d97 100644 --- a/roles/kubernetes/node/defaults/main.yml +++ b/roles/kubernetes/node/defaults/main.yml @@ -88,6 +88,9 @@ kube_vip_retryperiod: 1 kube_vip_enable_node_labeling: false kube_vip_bgp_sourceip: kube_vip_bgp_sourceif: +kube_vip_metrics_enabled: false +# TCP port for kube-vip Prometheus metrics; manifest sets prometheus_server to :PORT (same as kube-vip upstream default, see cmd/kube-vip.go). +kube_vip_metrics_port: 2112 # Requests for load balancer app loadbalancer_apiserver_memory_requests: 32M diff --git a/roles/kubernetes/node/templates/manifests/kube-vip.manifest.j2 b/roles/kubernetes/node/templates/manifests/kube-vip.manifest.j2 index 165e73d24..f3df165ae 100644 --- a/roles/kubernetes/node/templates/manifests/kube-vip.manifest.j2 +++ b/roles/kubernetes/node/templates/manifests/kube-vip.manifest.j2 @@ -109,11 +109,21 @@ spec: {% if kube_vip_lb_fwdmethod %} - name: lb_fwdmethod value: {{ kube_vip_lb_fwdmethod | string | to_json }} +{% endif %} +{% if kube_vip_metrics_enabled %} + - name: prometheus_server + value: {{ (':' ~ (kube_vip_metrics_port | string)) | to_json }} {% endif %} image: {{ kube_vip_image_repo }}:{{ kube_vip_image_tag }} imagePullPolicy: {{ k8s_image_pull_policy }} name: kube-vip resources: {} +{% if kube_vip_metrics_enabled %} + ports: + - name: metrics + containerPort: {{ kube_vip_metrics_port }} + protocol: TCP +{% endif %} {% if kube_vip_lb_fwdmethod == "masquerade" %} securityContext: privileged: true