migrate
This commit is contained in:
@@ -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: {}
|
||||
@@ -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."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user