summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Spek <p.spek@tyil.nl>2024-02-29 14:04:42 +0000
committerPatrick Spek <p.spek@tyil.nl>2024-02-29 15:06:43 +0100
commit2a4636568d8c33d466076bfd13ca350513c655b5 (patch)
treed3366fcb8773ae064c99e8aba1ae078aff70385f
parenta104b6b032c2e6816f6ad8e3cbc460d1342a08d9 (diff)
Add k8s-master playbook
-rw-r--r--playbooks.d/k8s-master/description.txt1
-rw-r--r--playbooks.d/k8s-master/etc/defaults4
-rw-r--r--playbooks.d/k8s-master/playbook.bash118
3 files changed, 123 insertions, 0 deletions
diff --git a/playbooks.d/k8s-master/description.txt b/playbooks.d/k8s-master/description.txt
new file mode 100644
index 0000000..60693ef
--- /dev/null
+++ b/playbooks.d/k8s-master/description.txt
@@ -0,0 +1 @@
+Playbook for a Kubernetes master node
diff --git a/playbooks.d/k8s-master/etc/defaults b/playbooks.d/k8s-master/etc/defaults
new file mode 100644
index 0000000..9506887
--- /dev/null
+++ b/playbooks.d/k8s-master/etc/defaults
@@ -0,0 +1,4 @@
+pkg.containerd=containerd
+pkg.kubeadm=kubeadm
+pkg.kubectl=kubectl
+pkg.kubelet=kubelet
diff --git a/playbooks.d/k8s-master/playbook.bash b/playbooks.d/k8s-master/playbook.bash
new file mode 100644
index 0000000..fb88230
--- /dev/null
+++ b/playbooks.d/k8s-master/playbook.bash
@@ -0,0 +1,118 @@
+#!/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
+}
+
+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() {
+ 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
+}