From 2b0cc6a384c8ee3ea53cb114c3c175dddaedcec8 Mon Sep 17 00:00:00 2001 From: Patrick Spek Date: Mon, 4 Mar 2024 11:40:24 +0000 Subject: Add k8s-node playbook --- playbooks.d/k8s-node/description.txt | 1 + playbooks.d/k8s-node/etc/defaults | 4 ++ playbooks.d/k8s-node/playbook.bash | 103 +++++++++++++++++++++++++++++++++++ 3 files changed, 108 insertions(+) create mode 100644 playbooks.d/k8s-node/description.txt create mode 100644 playbooks.d/k8s-node/etc/defaults create mode 100644 playbooks.d/k8s-node/playbook.bash diff --git a/playbooks.d/k8s-node/description.txt b/playbooks.d/k8s-node/description.txt new file mode 100644 index 0000000..60693ef --- /dev/null +++ b/playbooks.d/k8s-node/description.txt @@ -0,0 +1 @@ +Playbook for a Kubernetes master node diff --git a/playbooks.d/k8s-node/etc/defaults b/playbooks.d/k8s-node/etc/defaults new file mode 100644 index 0000000..9506887 --- /dev/null +++ b/playbooks.d/k8s-node/etc/defaults @@ -0,0 +1,4 @@ +pkg.containerd=containerd +pkg.kubeadm=kubeadm +pkg.kubectl=kubectl +pkg.kubelet=kubelet diff --git a/playbooks.d/k8s-node/playbook.bash b/playbooks.d/k8s-node/playbook.bash new file mode 100644 index 0000000..e422452 --- /dev/null +++ b/playbooks.d/k8s-node/playbook.bash @@ -0,0 +1,103 @@ +#!/usr/bin/env bash + +BASHTARD_PLAYBOOK_VARS[$BASHTARD_PLAYBOOK.cert-hash]="required" +BASHTARD_PLAYBOOK_VARS[$BASHTARD_PLAYBOOK.master.address]="required" +BASHTARD_PLAYBOOK_VARS[$BASHTARD_PLAYBOOK.token]="required" + +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 + + if [[ "$(config "$BASHTARD_PLAYBOOK.node-ip" "")" != "" ]] + 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.node-ip")" + EOF + fi + + notice "$BASHTARD_PLAYBOOK" "Initialize kubeadm" + kubeadm join \ + --discovery-token-ca-cert-hash "$(config "$BASHTARD_PLAYBOOK.cert-hash")" \ + --node-name="${BASHTARD_PLATFORM[fqdn]}" \ + --token "$(config "$BASHTARD_PLAYBOOK.token")" \ + "$(config "$BASHTARD_PLAYBOOK.master.address"):$(config "$BASHTARD_PLAYBOOK.master.port" "6443")" +} + +playbook_sync() { + :; +} + +playbook_del() { + kubectl drain "${BASHTARD_PLATFORM[fqdn]}" \ + --delete-emptydir-data \ + --force \ + --ignore-daemonsets + + kubeadm reset + 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 +} -- cgit v1.1