#!/usr/bin/env bash set -e set -o noglob [ $(id -u) -eq 0 ] || exec sudo $0 $@ # Create directory mkdir -p /var/lib/k0s/manifests/kube-vip # Create kube-vip rbac cat < /var/lib/k0s/manifests/kube-vip/rbac.yaml apiVersion: v1 kind: ServiceAccount metadata: name: kube-vip namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: annotations: rbac.authorization.kubernetes.io/autoupdate: "true" name: system:kube-vip-role rules: - apiGroups: [""] resources: ["services/status"] verbs: ["update"] - apiGroups: [""] resources: ["services", "endpoints"] verbs: ["list","get","watch", "update"] - apiGroups: [""] resources: ["nodes"] verbs: ["list","get","watch", "update", "patch"] - apiGroups: ["coordination.k8s.io"] resources: ["leases"] verbs: ["list", "get", "watch", "update", "create"] - apiGroups: ["discovery.k8s.io"] resources: ["endpointslices"] verbs: ["list","get","watch", "update"] --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: system:kube-vip-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:kube-vip-role subjects: - kind: ServiceAccount name: kube-vip namespace: kube-system EOF cat < /var/lib/k0s/manifests/kube-vip/ds.yaml --- apiVersion: apps/v1 kind: DaemonSet metadata: name: kube-vip namespace: kube-system labels: app.kubernetes.io/name: kube-vip spec: selector: matchLabels: app.kubernetes.io/name: kube-vip template: metadata: labels: app.kubernetes.io/name: kube-vip spec: containers: - name: kube-vip image: ghcr.io/kube-vip/kube-vip:v0.6.4 imagePullPolicy: IfNotPresent args: ["manager"] env: - name: address value: "#{ bootstrap_kube_api_addr }#" - name: vip_arp value: "true" - name: lb_enable value: "true" - name: port value: "6443" - name: vip_cidr value: "32" - name: cp_enable value: "true" - name: cp_namespace value: kube-system - name: vip_ddns value: "false" - name: svc_enable value: "false" - name: vip_leaderelection value: "true" - name: vip_leaseduration value: "15" - name: vip_renewdeadline value: "10" - name: vip_retryperiod value: "2" - name: prometheus_server value: :2112 securityContext: capabilities: add: ["NET_ADMIN", "NET_RAW", "SYS_TIME"] hostAliases: - hostnames: - kubernetes ip: 127.0.0.1 hostNetwork: true serviceAccountName: kube-vip affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: node-role.kubernetes.io/master operator: Exists - matchExpressions: - key: node-role.kubernetes.io/control-plane operator: Exists tolerations: - effect: NoSchedule operator: Exists - effect: NoExecute operator: Exists EOF