prerequisite
container runtime
- Use containerd (containerd, CRI-O, docker)
sudo apt-get update
sudo apt-get install -y \\
ca-certificates \\
curl \\
gnupg \\
lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \\
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] <https://download.docker.com/linux/ubuntu> \\
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install containerd.io=1.6.14-1
sudo apt-mark hold containerd.io
# Disabled cri plugin such as below line in config.toml after installing containerd package
# disabled_plugins = ["cri"]
# So, set the config to default
# Use SystemdCgroup and restart daemon
containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd
network
- overlay enables networking between nods
- br_netfilter enables networking between pods
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# sysctl params required by setup, params persist across reboots
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
# Apply sysctl params without reboot
sudo sysctl --system
swap off
- swap memory support from v 1.22
# Check swap memory
"swapon -s" or "free -h"
# Disable swap
sudo swapoff -a
# Disable swap on startup
sudo sed -i '/ swap / s/^\\(.*\\)$/#\\1/g' /etc/fstab
# Implementation after reboot
(crontab -l 2>/dev/null; echo "@reboot /sbin/swapoff -a") | crontab - || true
setup cluster
caution
- pod’s CIDR block overlap
control-plane node
-
TBD: use public/private IP for api server address
-
pod-cidr: set according to your environment
e.g. Use 10.244.0.0/16 host: 192…, docker: 172…
# Install packages needed to use the Kubernetes apt repository
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
# Download the Google Cloud public signing key:
sudo curl -fsSLo /etc/apt/keyrings/kubernetes-archive-keyring.gpg <https://packages.cloud.google.com/apt/doc/apt-key.gpg>
# Add the Kubernetes apt repository
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] <https://apt.kubernetes.io/> kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
# Install
sudo apt-get update
apt-cache madison kubeadm | head -20
sudo apt-get install -y kubelet=1.26.0-00 kubeadm=1.26.0-00 kubectl=1.26.0-00
sudo apt-mark hold kubelet kubeadm kubectl
# Check packages
kubelet --version
kubeadm version
kubectl version --client
# Pre-pull the required control-plane images
kubeadm config images list --kubernetes-version=v1.26.0
sudo kubeadm config images pull --kubernetes-version=v1.26.0
# Set up the Kubernetes control plane
sudo kubeadm init --apiserver-advertise-address=<private-ip> --apiserver-cert-extra-sans=<private-ip> --pod-network-cidr=<pod-cidr> --node-name $(hostname -s)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes
kubectl get namespaces
kubectl get pods -n kube-system
network plugins
- Use calico cni
- flannel: ‘10.244.0.0/16’, calico: ‘192.168.0.0/16’ …
- To avoid overlapping, modify cidr to ‘10.244.0.0/16’
curl <https://raw.githubusercontent.com/projectcalico/calico/v3.24.5/manifests/calico.yaml> -O
# Edit 'CALICO_IPV4POOL_CIDR' in calico.yml, if CIDR block is changed from default for avoiding overlap.
kubectl apply -f calico.yaml
kubectl describe node | egrep '^Name|PodCIDR'
helm
install
curl -fsSL -o get_helm.sh <https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3>
chmod 700 get_helm.sh
./get_helm.sh
helm version
reference
Read references while following below guide step by step
- set-up https://kubernetes.io/docs/setup/production-environment/container-runtimes/ https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
- runtime https://kubernetes.io/ko/docs/setup/production-environment/container-runtimes/https://github.com/containerd/containerd/blob/main/docs/getting-started.md
- network https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#pod-networkhttps://projectcalico.docs.tigera.io/getting-started/kubernetes/self-managed-onprem/onpremises#install-calico-with-kubernetes-api-datastore-more-than-50-nodes
- swap memory https://kubernetes.io/ko/docs/concepts/architecture/nodes/#swap-memory
- port https://kubernetes.io/docs/reference/networking/ports-and-protocols/
- helm https://helm.sh/docs/intro/install/