summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Spek <p.spek@tyil.nl>2024-03-04 11:40:24 +0000
committerPatrick Spek <p.spek@tyil.nl>2024-03-04 12:53:11 +0100
commit2b0cc6a384c8ee3ea53cb114c3c175dddaedcec8 (patch)
treecc83a6e2177a2548d5e3e1092cadf3eb2cc1e254
parentc6414001da261aa9cf4b1a0980afce84ba4cc10d (diff)
Add k8s-node playbook
-rw-r--r--playbooks.d/k8s-node/description.txt1
-rw-r--r--playbooks.d/k8s-node/etc/defaults4
-rw-r--r--playbooks.d/k8s-node/playbook.bash103
3 files changed, 108 insertions, 0 deletions
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
+}