K8S auf Alpine Linux installieren

13. März 2023 - Lesezeit: 4 Minuten

Es gibt unendlich viele Wege Kubernetes zu installieren. Auf jedem Fall sollte man sich mal das Tutorial "Kubernetes the hard way" von Kesley Hightower anschauen. Außerdem gibt es Tools wie Sand am Meer um einen Kubernetes Cluster aufzusetzen. Das hat alles seine Berechtigung, aber ich mag eher einen minimalistischen Ansatz.

Hier eine kurze Anleitung für einen Single Node Cluster auf Alpine Linux...
Die Original Anleitung habe ich vom Alpine Linux Wiki -> https://wiki.alpinelinux.org/wiki/K8s

# add edge repos
echo "https://dl-cdn.alpinelinux.org/alpine/edge/main" >> /etc/apk/repositories
echo "https://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories
echo "https://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories

# add kernel module for networking stuff
echo "br_netfilter" > /etc/modules-load.d/k8s.conf
modprobe br_netfilter
echo "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.conf
sysctl net.bridge.bridge-nf-call-iptables=1
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl net.ipv4.ip_forward=1

# disable swap
sed -ie '/swap/ s/^/#/' /etc/fstab
swapoff -a

# fix prometheus errors
mount --make-rshared /
echo "#!/bin/sh" > /etc/local.d/sharedmetrics.start
echo "mount --make-rshared /" >> /etc/local.d/sharedmetrics.start
chmod +x /etc/local.d/sharedmetrics.start
rc-update add local default

# install packages
apk add kubelet
apk add kubeadm
apk add kubectl
apk add cni-plugin-flannel
apk add cni-plugins
apk add flannel
apk add flannel-contrib-cni
apk add containerd
apk add containerd-ctr
apk add k9s

# add services and start container runtime
rc-update add kubelet
rc-update add containerd
/etc/init.d/containerd start

# create cluster
kubeadm init --pod-network-cidr=10.244.0.0/16 --node-name=$HOSTNAME

# copy kube config
mkdir ~/.kube
ln -s /etc/kubernetes/admin.conf ~/.kube/config

# add overlay network flannel
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

# on single node cluster remove no schedule taint for control plane
kubectl taint nodes $HOSTNAME node-role.kubernetes.io/control-plane=:NoSchedule-

# have fun with k8s and use k9s
k9s

That's it ;-)

Und es hat auch nur 5 Minuten gedauert. In einem weiteren Beitrag werde ich dann mal beschreiben, was man mit so einem Cluster anstellen kann. Wir werden einen Container bauen und Tunnel bohren...