mirror of
https://github.com/techno-tim/k3s-ansible.git
synced 2026-08-09 15:33:18 +02:00
287d8b7a27
* feat(kube-vip): add endpoint override for the internal listening address Add a kube_vip_endpoint variable so the address kube-vip binds and listens on can differ from the announced apiserver_endpoint. This is useful for complex routing and site-to-site tunnels where the VIP kube-vip advertises over ARP differs from the address it listens on internally. - roles/k3s_server/templates/vip.yaml.j2: use kube_vip_endpoint (defaulting to apiserver_endpoint) for the `address` env and for deriving `vip_subnet` - roles/k3s_server/defaults/main.yml: add kube_vip_endpoint default (null) - roles/k3s_server/meta/main.yml: add kube_vip_endpoint argument_spec - inventory/sample/group_vars/all.yml: document the new sample variable - README.md: document the kube_vip_endpoint option - .github/scripts/test-kube-vip-manifest.py: extend regression test to cover the default (apiserver_endpoint) and the override case Closes #221 * chore(ci): extend molecule job timeout to 3 hours The default scenario occasionally takes longer than 150 minutes on the shared nested-virt runner (k3s agent notify-wait can exceed the limit under load), and a single timeout aborts the whole run before the other four scenarios execute. Raise timeout-minutes from 150 to 180 so a slow-but-progressing run completes instead of aborting. The default scenario remains first in the matrix so a failure surfaces fastest. * fix(kube-vip): fall back on null kube_vip_endpoint and cover it in the test - vip_subnet and address use default(apiserver_endpoint, true) so the null role default falls back to the apiserver endpoint instead of rendering an empty/invalid address and subnet - change the manifest regression test default case to pass kube_vip_endpoint as None so it pins the real runtime null condition and fails fast on this regression rather than timing out in CI
105 lines
3.2 KiB
Django/Jinja
105 lines
3.2 KiB
Django/Jinja
apiVersion: apps/v1
|
|
kind: DaemonSet
|
|
metadata:
|
|
name: kube-vip-ds
|
|
namespace: kube-system
|
|
spec:
|
|
selector:
|
|
matchLabels:
|
|
name: kube-vip-ds
|
|
template:
|
|
metadata:
|
|
labels:
|
|
name: kube-vip-ds
|
|
spec:
|
|
affinity:
|
|
nodeAffinity:
|
|
requiredDuringSchedulingIgnoredDuringExecution:
|
|
nodeSelectorTerms:
|
|
- matchExpressions:
|
|
- key: node-role.kubernetes.io/master
|
|
operator: Exists
|
|
- matchExpressions:
|
|
- key: node-role.kubernetes.io/control-plane
|
|
operator: Exists
|
|
containers:
|
|
- args:
|
|
- manager
|
|
env:
|
|
- name: vip_arp
|
|
value: "{{ 'true' if kube_vip_arp | default(true) | bool else 'false' }}"
|
|
- name: bgp_enable
|
|
value: "{{ 'true' if kube_vip_bgp | default(false) | bool else 'false' }}"
|
|
- name: port
|
|
value: "6443"
|
|
{% if kube_vip_iface %}
|
|
- name: vip_interface
|
|
value: {{ kube_vip_iface }}
|
|
{% endif %}
|
|
- name: vip_subnet
|
|
value: "{{ (kube_vip_endpoint | default(apiserver_endpoint, true)) | ansible.utils.ipsubnet | ansible.utils.ipaddr('prefix') }}"
|
|
- name: cp_enable
|
|
value: "true"
|
|
- name: cp_namespace
|
|
value: kube-system
|
|
- name: vip_ddns
|
|
value: "false"
|
|
- name: svc_enable
|
|
value: "{{ 'true' if kube_vip_lb_ip_range is defined else 'false' }}"
|
|
- name: vip_leaderelection
|
|
value: "true"
|
|
- name: vip_leaseduration
|
|
value: "15"
|
|
- name: vip_renewdeadline
|
|
value: "10"
|
|
- name: vip_retryperiod
|
|
value: "2"
|
|
- name: address
|
|
value: {{ kube_vip_endpoint | default(apiserver_endpoint, true) }}
|
|
{% if kube_vip_bgp | default(false) | bool %}
|
|
{% if kube_vip_bgp_routerid is defined %}
|
|
- name: bgp_routerid
|
|
value: "{{ kube_vip_bgp_routerid }}"
|
|
{% endif %}
|
|
{% if _kube_vip_bgp_peers | length > 0 %}
|
|
- name: bgp_peers
|
|
value: "{{ _kube_vip_bgp_peers | map(attribute='peer_address') | zip(_kube_vip_bgp_peers | map(attribute='peer_asn')) | map('join', ':') | join(',') }}" # yamllint disable-line rule:line-length
|
|
{% else %}
|
|
{% if kube_vip_bgp_as is defined %}
|
|
- name: bgp_as
|
|
value: "{{ kube_vip_bgp_as }}"
|
|
{% endif %}
|
|
{% if kube_vip_bgp_peeraddress is defined %}
|
|
- name: bgp_peeraddress
|
|
value: "{{ kube_vip_bgp_peeraddress }}"
|
|
{% endif %}
|
|
{% if kube_vip_bgp_peeras is defined %}
|
|
- name: bgp_peeras
|
|
value: "{{ kube_vip_bgp_peeras }}"
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endif %}
|
|
image: ghcr.io/kube-vip/kube-vip:{{ kube_vip_tag_version }}
|
|
imagePullPolicy: Always
|
|
name: kube-vip
|
|
resources: {}
|
|
securityContext:
|
|
capabilities:
|
|
add:
|
|
- NET_ADMIN
|
|
- NET_RAW
|
|
- SYS_TIME
|
|
hostNetwork: true
|
|
serviceAccountName: kube-vip
|
|
tolerations:
|
|
- effect: NoSchedule
|
|
operator: Exists
|
|
- effect: NoExecute
|
|
operator: Exists
|
|
updateStrategy: {}
|
|
status:
|
|
currentNumberScheduled: 0
|
|
desiredNumberScheduled: 0
|
|
numberMisscheduled: 0
|
|
numberReady: 0
|