Machine initialization
1. Disable swap
Run sudo swapoff -a
then configure /etc/fstab
1
2
3
4
| cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
|
1
2
| sudo modprobe overlay
sudo modprobe br_netfilter
|
1
2
3
4
5
| cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
|
3. Install containerd
1
2
| sudo apt update
sudo apt -y install containerd
|
Config file is in /etc/containerd/config.toml
- Generate default containerd config file
1
| containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
|
- Set cgroup driver to systemd.
1
2
3
| [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
- SystemdCgroup = false
+ SystemdCgroup = true
|
- Change pause image
1
2
3
| [plugins."io.containerd.grpc.v1.cri"]
- sandbox_image = "registry.k8s.io/pause:3.6"
+ sandbox_image = "registry.k8s.io/pause:3.10"
|
In China use registry.aliyuncs.com/google_containers/pause:3.10
instead.
- Restart containerd
1
2
| sudo systemctl restart containerd
sudo systemctl enable containerd
|
Follow Installing kubeadm, kubelet and kubectl
In China follow https://developer.aliyun.com/mirror/kubernetes to use mirror.
- Install prerequisite packages.
1
2
3
| sudo apt update
# apt-transport-https may be a dummy package; if so, you can skip that package
sudo apt install -y apt-transport-https ca-certificates curl gpg
|
- Configure repository keyrings
1
2
| export K8S_VERSION=v1.32
sudo mkdir -p -m 755 /etc/apt/keyrings
|
1
2
| curl -fsSL "https://pkgs.k8s.io/core:/stable:/${K8S_VERSION}/deb/Release.key" | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/${K8S_VERSION}/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
|
In China use:
1
2
| curl -fsSL "https://mirrors.aliyun.com/kubernetes-new/core/stable/${K8S_VERSION}/deb/Release.key" | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/${K8S_VERSION}/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
|
- Install tools
1
2
3
| sudo apt update
sudo apt install -y kubelet kubeadm kubectl
# sudo apt-mark hold kubelet kubeadm kubectl
|
- Enable service
1
| sudo systemctl enable --now kubelet
|
In this time journalctl -f -u kubelet
should failure by
error: failed to load Kubelet config file /var/lib/kubelet/config.yaml
,
it’s ok, we will fix it later.
Install k8s cluster
Configure hostname
1
2
3
| sudo hostnamectl set-hostname "k8s-master.local" // Run on master node
sudo hostnamectl set-hostname "k8s-worker-01.local" // Run on 1st worker node
sudo hostnamectl set-hostname "k8s-worker-02.local" // Run on 2nd worker node
|
Configure /etc/hosts
1
2
3
| 192.168.5.100 k8s-master.local k8s-master
192.168.5.101 k8s-worker-01.local k8s-worker-01
192.168.5.102 k8s-worker-02.local k8s-worker-02
|
1. Install k8s cluster with kubeadm (run on control panel node)
Create kubelet.yaml
1
2
3
4
5
6
7
8
9
10
11
| apiVersion: kubeadm.k8s.io/v1beta4
kind: InitConfiguration
---
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
kubernetesVersion: '1.32.0' # Replace with your desired version
controlPlaneEndpoint: 'k8s-master' # Replace with your desired control plane endpoint
imageRepository: registry.k8s.io
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
|
In China use imageRepository: registry.aliyuncs.com/google_containers
.
Install control panel
1
| sudo kubeadm init --config kubelet.yaml
|
Use sudo kubeadm reset
if you want to reset k8s cluster.
Configure default kube config
1
2
3
| mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
|
2. Join k8s cluster with kubeadm (run on worker nodes)
1
2
| sudo kubeadm join k8s-master:6443 --token 21nm87.x1lgd4jf0lqiiiau \
--discovery-token-ca-cert-hash sha256:28b503f1f2a2592678724c482776f04b445c5f99d76915552f14e68a24b78009
|
3. Check k8s cluster status (run on control panel node)
Setup Pod Network
1. Install Calico (run on control panel node)
Install Calico
1
| sudo kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.29.2/manifests/calico.yaml
|
In China:
1
2
| curl -sSLO https://raw.githubusercontent.com/projectcalico/calico/v3.29.2/manifests/calico.yaml
sed -i 's/docker.io/dockerhub.icu/g' calico.yaml
|
Verify
1
| sudo kubectl get pods -n kube-system
|
When finished, you should see the calico-node
pod running by
sudo kubectl get pods -n kube-system
and see all nodes ready by
sudo kubectl get nodes
.
Test
1
2
3
| sudo kubectl create deployment nginx-app --image=nginx --replicas 2
sudo kubectl expose deployment nginx-app --name=nginx-web-svc --type NodePort --port 80 --target-port 80
sudo kubectl describe svc nginx-web-svc
|
Curl using either of worker node’s hostname
1
| curl http://k8s-worker-01:32283
|
Reference