K8s: Difference between revisions
No edit summary |
|||
Line 46: | Line 46: | ||
</blockquote> | </blockquote> | ||
<pre>#add kernel module for networking stuff | <pre>#add kernel module for networking stuff | ||
echo | echo "br_netfilter" > /etc/modules-load.d/k8s.conf | ||
modprobe br_netfilter | modprobe br_netfilter | ||
apk add cni-plugin-flannel | apk add cni-plugin-flannel | ||
Line 58: | Line 58: | ||
apk add uuidgen | apk add uuidgen | ||
#get rid of swap | #get rid of swap | ||
cat /etc/fstab | grep -v swap | cat /etc/fstab | grep -v swap > temp.fstab | ||
cat temp.fstab | cat temp.fstab > /etc/fstab | ||
rm temp.fstab | rm temp.fstab | ||
swapoff -a | swapoff -a | ||
#Fix prometheus errors | #Fix prometheus errors | ||
mount --make-rshared / | mount --make-rshared / | ||
echo "#!/bin/sh" > /etc/local.d/sharemetrics.start | |||
echo "mount --make-rshared /" >> /etc/local.d/sharemetrics.start | |||
chmod +x /etc/local.d/sharemetrics.start | |||
rc-update add local | |||
#Fix id error messages | #Fix id error messages | ||
uuidgen | uuidgen > /etc/machine-id | ||
#Add services | #Add services | ||
rc-update add docker | rc-update add docker | ||
Line 73: | Line 77: | ||
/etc/init.d/ntpd start | /etc/init.d/ntpd start | ||
/etc/init.d/docker start | /etc/init.d/docker start | ||
# | #fix flannel | ||
ln -s /usr/libexec/cni/flannel-amd64 /usr/libexec/cni/flannel | ln -s /usr/libexec/cni/flannel-amd64 /usr/libexec/cni/flannel | ||
#kernel stuff | #kernel stuff | ||
echo | echo "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.conf | ||
sysctl net.bridge.bridge-nf-call-iptables=1 | sysctl net.bridge.bridge-nf-call-iptables=1 | ||
Revision as of 02:29, 11 April 2022
Alpine Linux 🌲 K8s in 10 Minutes
Summary
This guide will allow you to deploy a fresh Alpine Linux install into a Kubernetes K8 cluster in less than 10 minutes.
Why ✨
I went to learn Kubernetes recently and I built a k3 cluster using Alpine in an hour or so, it was a great experience. I figured the next step would be K8s, but I found no material on K8s for Alpine. This guide is the result of my first pass and the incorporations of high quality notes from the contributers. Kubernetes 🦄 is awesome.
Contributers
Build K8s on Alpine Linux 🌲
Prerequisits 🔍
You need an Alpine Linux install (this guide is written against version 3.15 standard image) with internet access. I recommend at least 2 CPU with 4GB of ram and 10GB of disk for each node.
For HA control planes you'll need a mininum of three nodes
1. Setup the Repositories 📗
Update you repositories under /etc/apk/repositories to include community, edge community and testing.
#/media/cdrom/apks http://dl-cdn.alpinelinux.org/alpine/v3.15/main http://dl-cdn.alpinelinux.org/alpine/v3.15/community #http://dl-cdn.alpinelinux.org/alpine/edge/main http://dl-cdn.alpinelinux.org/alpine/edge/community http://dl-cdn.alpinelinux.org/alpine/edge/testing
2. Node Setup 🖥️
This series of commands solves a series is incremental problems and sets up the system (if the first control node) for kubectl/kubeadm to run properly on next login by linking the config.
The result here gives you a functional node that can be joined to an existing cluster or can become the first control plane of a new cluster. 🎶
*** 🔔 This build assumes CNI usage of flannel for networking 🔔 ***
#add kernel module for networking stuff echo "br_netfilter" > /etc/modules-load.d/k8s.conf modprobe br_netfilter apk add cni-plugin-flannel apk add cni-plugins apk add flannel apk add flannel-contrib-cni apk add kubelet apk add kubeadm apk add kubectl apk add docker apk add uuidgen #get rid of swap cat /etc/fstab | grep -v swap > temp.fstab cat temp.fstab > /etc/fstab rm temp.fstab swapoff -a #Fix prometheus errors mount --make-rshared / echo "#!/bin/sh" > /etc/local.d/sharemetrics.start echo "mount --make-rshared /" >> /etc/local.d/sharemetrics.start chmod +x /etc/local.d/sharemetrics.start rc-update add local #Fix id error messages uuidgen > /etc/machine-id #Add services rc-update add docker rc-update add kubelet #Sync time rc-update add ntpd /etc/init.d/ntpd start /etc/init.d/docker start #fix flannel ln -s /usr/libexec/cni/flannel-amd64 /usr/libexec/cni/flannel #kernel stuff echo "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.conf sysctl net.bridge.bridge-nf-call-iptables=1
Your blank node is now ready! If it's the first, you'll want to make a control node.
3. Setup the Control Plane (New Cluster!) 🦾
Run this command to start the cluster and then apply a network.
#do not change subnet kubeadm init --pod-network-cidr=10.244.0.0/16 --node-name=master #set up the networking kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml #now you don't need to export ln -s /etc/kubernetes/admin.conf /root/.kube/config
You now have a control plane. This also gives you the command to run on our blank nodes to add them to this cluster as workers.
4. Join the cluster. 🐜
Run this to get the join command from the control plane which you would then run on your new worker.
kubeadm token create --print-join-command
Bonus 💰
Setup NFS Mounts on K8s
This can be shared NFS storage to allow for auto persistent claim fulfilment. You'll need your IP updated and export information.
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/ helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \ --set nfs.server=192.168.1.31 \ --set nfs.path=/exports/cluster00
Now set the default storage class for the cluster.
kubectl get storageclass kubectl patch storageclass nfs-client -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
Check on System 👀
Check on your system.
kubectl get nodes kubectl get all