This commit is contained in:
Mike McFetridge
2026-07-20 09:23:17 -04:00
parent c1315882da
commit 72272e4006
3179 changed files with 562960 additions and 14 deletions
+147
View File
@@ -0,0 +1,147 @@
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: << service_account_name >>
namespace: << namespace >>
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: << service_account_name >>
rules:
- apiGroups:
- ""
resources:
- services
- services/status
- nodes
- endpoints
- pods
verbs:
- list
- get
- watch
- update
- patch
- apiGroups:
- discovery.k8s.io
resources:
- endpointslices
verbs:
- list
- get
- watch
- apiGroups:
- coordination.k8s.io
resources:
- leases
verbs:
- list
- get
- watch
- update
- create
- patch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: << service_account_name >>
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: << service_account_name >>
subjects:
- kind: ServiceAccount
name: << service_account_name >>
namespace: << namespace >>
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: << daemonset_name >>
namespace: << namespace >>
spec:
selector:
matchLabels:
app.kubernetes.io/name: kube-vip
app.kubernetes.io/instance: << daemonset_name >>
template:
metadata:
labels:
app.kubernetes.io/name: kube-vip
app.kubernetes.io/instance: << daemonset_name >>
spec:
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet
serviceAccountName: << service_account_name >>
<%- if control_plane_only %>
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node-role.kubernetes.io/master
operator: Exists
- matchExpressions:
- key: node-role.kubernetes.io/control-plane
operator: Exists
<%- endif %>
tolerations:
- operator: Exists
effect: NoSchedule
- operator: Exists
effect: NoExecute
containers:
- name: kube-vip
image: << image >>
imagePullPolicy: IfNotPresent
args:
- manager
env:
- name: vip_arp
value: "true"
- name: port
value: "<< control_plane_port >>"
- name: vip_interface
value: "<< interface >>"
- name: vip_subnet
value: "<< vip_subnet >>"
- name: cp_enable
value: "<< control_plane_enabled | lower >>"
- name: cp_namespace
value: "<< namespace >>"
- name: vip_ddns
value: "false"
- name: svc_enable
value: "<< services_enabled | lower >>"
- name: svc_election
value: "<< service_election_enabled | lower >>"
- name: vip_leaderelection
value: "<< leader_election_enabled | lower >>"
- name: vip_leaseduration
value: "<< lease_duration >>"
- name: vip_renewdeadline
value: "<< renew_deadline >>"
- name: vip_retryperiod
value: "<< retry_period >>"
<%- if control_plane_enabled %>
- name: address
value: "<< vip_address >>"
<%- endif %>
<%- if services_interface_enabled %>
- name: vip_servicesinterface
value: "<< services_interface >>"
<%- endif %>
<%- if watch_services_namespace_enabled %>
- name: svc_namespace
value: "<< watch_services_namespace >>"
<%- endif %>
securityContext:
capabilities:
add:
- NET_ADMIN
- NET_RAW
- SYS_TIME
resources: {}
+246
View File
@@ -0,0 +1,246 @@
{
"slug": "kube-vip",
"kind": "kubernetes",
"metadata": {
"name": "kube-vip DaemonSet",
"description": "Practical kube-vip DaemonSet bootstrap with RBAC for control-plane virtual IPs and optional Service LoadBalancer handling in bare-metal clusters.",
"tags": [],
"icon": {
"provider": "simple-icons",
"id": "kubernetes"
},
"draft": true,
"version": {
"name": "1.0.1",
"source_dep_name": "manual/kube-vip"
}
},
"variables": [
{
"title": "General",
"name": "general",
"items": [
{
"name": "namespace",
"type": "str",
"title": "Namespace",
"required": false,
"default": "kube-system",
"description": "Namespace where kube-vip should run.",
"config": {
"placeholder": "kube-system"
}
},
{
"name": "service_account_name",
"type": "str",
"title": "Service account",
"required": false,
"default": "kube-vip",
"description": "Service account name used by the kube-vip DaemonSet.",
"config": {
"placeholder": "kube-vip"
}
},
{
"name": "daemonset_name",
"type": "str",
"title": "DaemonSet name",
"required": false,
"default": "kube-vip-ds",
"config": {
"placeholder": "kube-vip-ds"
}
},
{
"name": "image",
"type": "str",
"title": "Image",
"required": false,
"default": "ghcr.io/kube-vip/kube-vip:v1.0.1",
"description": "Container image for kube-vip.",
"config": {
"placeholder": "ghcr.io/kube-vip/kube-vip:v1.0.1"
}
}
]
},
{
"title": "Networking",
"name": "networking",
"items": [
{
"name": "interface",
"type": "str",
"title": "Primary interface",
"required": false,
"default": "eth0",
"description": "Host interface used by kube-vip for ARP announcements and VIP binding.",
"config": {
"placeholder": "eth0"
}
},
{
"name": "services_interface_enabled",
"type": "bool",
"title": "Services interface",
"required": false,
"default": false
},
{
"name": "services_interface",
"type": "str",
"title": "Services interface name",
"required": false,
"default": "eth1",
"description": "Interface used for service advertisements when a dedicated interface is required.",
"config": {
"placeholder": "eth1"
}
},
{
"name": "vip_address",
"type": "str",
"title": "Control-plane VIP",
"required": false,
"default": "192.168.1.30",
"description": "Virtual IP for the Kubernetes API when control-plane mode is enabled.",
"config": {
"placeholder": "192.168.1.30"
}
},
{
"name": "vip_subnet",
"type": "str",
"title": "VIP subnet mask",
"required": false,
"default": "32",
"description": "Subnet mask used for the advertised VIP.",
"config": {
"placeholder": "32"
}
},
{
"name": "control_plane_port",
"type": "int",
"title": "API port",
"required": false,
"default": 6443,
"description": "Kubernetes API port exposed by the control-plane VIP.",
"config": {
"placeholder": "6443"
}
}
]
},
{
"title": "Features",
"name": "features",
"items": [
{
"name": "control_plane_enabled",
"type": "bool",
"title": "Control-plane VIP",
"required": false,
"default": true,
"description": "Advertise a floating VIP for the Kubernetes API."
},
{
"name": "services_enabled",
"type": "bool",
"title": "Service LoadBalancer",
"required": false,
"default": false,
"description": "Watch and advertise Kubernetes Services of type LoadBalancer."
},
{
"name": "service_election_enabled",
"type": "bool",
"title": "Per-service election",
"required": false,
"default": false,
"description": "Use a separate leader election for each service when service mode is enabled."
},
{
"name": "leader_election_enabled",
"type": "bool",
"title": "Leader election",
"required": false,
"default": true
},
{
"name": "watch_services_namespace_enabled",
"type": "bool",
"title": "Watch one namespace",
"required": false,
"default": false,
"description": "Restrict service mode to a specific namespace instead of the whole cluster."
},
{
"name": "watch_services_namespace",
"type": "str",
"title": "Watched namespace",
"required": false,
"default": "apps",
"description": "Namespace watched by kube-vip when scoped service mode is enabled.",
"config": {
"placeholder": "apps"
}
}
]
},
{
"title": "Leader Election Timing",
"name": "timing",
"items": [
{
"name": "lease_duration",
"type": "int",
"title": "Lease duration",
"required": false,
"default": 5,
"description": "Lease duration in seconds for leader election.",
"config": {
"placeholder": "5"
}
},
{
"name": "renew_deadline",
"type": "int",
"title": "Renew deadline",
"required": false,
"default": 3,
"description": "Renew deadline in seconds for leader election.",
"config": {
"placeholder": "3"
}
},
{
"name": "retry_period",
"type": "int",
"title": "Retry period",
"required": false,
"default": 1,
"description": "Retry period in seconds for leader election.",
"config": {
"placeholder": "1"
}
}
]
},
{
"title": "Scheduling",
"name": "scheduling",
"items": [
{
"name": "control_plane_only",
"type": "bool",
"title": "Control-plane nodes only",
"required": false,
"default": true,
"description": "Schedule kube-vip only on nodes labeled as control-plane or master."
}
]
}
]
}