#!/usr/bin/env bash playbook_add() { local version version="1.29" case "${BASHTARD_PLATFORM[key]}" in linux-debian_gnu_linux) # Fetch the apt key info "$BASHTARD_PLAYBOOK" "Adding apt repository" mkdir -pv -m 755 -- /etc/apt/keyrings curl -fsSL "https://pkgs.k8s.io/core:/stable:/v$version/deb/Release.key" \ | gpg --dearmor \ > /etc/apt/keyrings/kubernetes-apt-keyring.gpg printf "deb [signed-by=%s] %s /\n" \ "/etc/apt/keyrings/kubernetes-apt-keyring.gpg" \ "https://pkgs.k8s.io/core:/stable:/v$version/deb/" \ > /etc/apt/sources.list.d/kubernetes.list apt update ;; esac pkg install containerd pkg install kubeadm pkg install kubectl pkg install kubelet info "$BASHTARD_PLAYBOOK" "Enabling forwarding" cat <<-EOF > "$(config "fs.etcdir")/sysctl.d/kubernetes.conf" net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 net.ipv6.conf.all.forwarding = 1 EOF sysctl --system info "$BASHTARD_PLAYBOOK" "Enabling kernel modules" cat <<-EOF > "$(config "fs.etcdir")/modules-load.d/kubernetes.conf" br_netfilter overlay EOF modprobe overlay modprobe br_netfilter notice "$BASHTARD_PLAYBOOK" "Creating data directories" mkdir -pv -- "$(playbook_path "data")/manifests.d" if [[ "$(config "$BASHTARD_PLAYBOOK.flags.apiserver-advertise-address" "")" != "" ]] then notice "$BASHTARD_PLAYBOOK" "Setting node ip in $(config "fs.etcdir")/default/kubelet" cat <<-EOF > "$(config "fs.etcdir")/default/kubelet" KUBELET_EXTRA_ARGS="--node-ip=$(config "$BASHTARD_PLAYBOOK.flags.apiserver-advertise-address")" EOF fi notice "$BASHTARD_PLAYBOOK" "Initialize kubeadm" kubeadm init \ --apiserver-advertise-address="$(config "$BASHTARD_PLAYBOOK.flags.apiserver-advertise-address" "127.0.0.1")" \ --apiserver-bind-port="$(config "$BASHTARD_PLAYBOOK.flags.apiserver-bind-port" "6443")" \ --control-plane-endpoint="$(config "$BASHTARD_PLAYBOOK.flags.control-plane-endpoint" "localhost")" \ --node-name="${BASHTARD_PLATFORM[fqdn]}" \ --service-cidr="$(config "$BASHTARD_PLAYBOOK.flags.service-cidr" "10.96.0.0/12")" \ --service-dns-domain="$(config "$BASHTARD_PLAYBOOK.flags.service-dns-domain" "cluster.local")" \ --pod-network-cidr="$(config "$BASHTARD_PLAYBOOK.flags.pod-network-cidr" "10.0.0.0/12")" \ || return 1 playbook_sync return 0 } playbook_sync() { local data local kubeconfig local manifest_prefix local values data="$(playbook_path "data")" kubeconfig="$(config "fs.etcdir")/kubernetes/admin.conf" manifest_prefix="$(config "$BASHTARD_PLAYBOOK.manifest-prefix" "")" notice "$BASHTARD_PLAYBOOK/manifests" "Applying manifests.d" kubectl --kubeconfig "$kubeconfig" apply --recursive --filename "$data/manifests.d/$manifest_prefix" } playbook_del() { kubeadm reset --force iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X ipvsadm -C rm -fr -- \ "$(config "fs.etcdir")/modules-load.d/kubernetes.conf" \ "$(config "fs.etcdir")/sysctl.d/kubernetes.conf" \ "$(config "fs.etcdir")/cni/net.d" \ "$(config "fs.etcdir")/kubernetes" \ "/var/lib/etcd" \ "/var/lib/cni" pkg uninstall kubectl pkg uninstall kubeadm pkg uninstall kubelet pkg uninstall containerd case "${BASHTARD_PLATFORM[key]}" in linux-debian_gnu_linux) # Fetch the apt key info "$BASHTARD_PLAYBOOK" "Removing apt repository" rm -fr -- \ /etc/apt/keyrings/kubernetes-apt-keyring.gpg \ /etc/apt/sources.list.d/kubernetes.list ;; esac }