From 2a4636568d8c33d466076bfd13ca350513c655b5 Mon Sep 17 00:00:00 2001 From: Patrick Spek Date: Thu, 29 Feb 2024 14:04:42 +0000 Subject: Add k8s-master playbook --- playbooks.d/k8s-master/description.txt | 1 + playbooks.d/k8s-master/etc/defaults | 4 ++ playbooks.d/k8s-master/playbook.bash | 118 +++++++++++++++++++++++++++++++++ 3 files changed, 123 insertions(+) create mode 100644 playbooks.d/k8s-master/description.txt create mode 100644 playbooks.d/k8s-master/etc/defaults create mode 100644 playbooks.d/k8s-master/playbook.bash 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 +} -- cgit v1.1