Setup Kubernetes 1.25.2 with containerd on openSUSE Leap 15.4
Setup Kubernetes 1.25.2 with contained on openSUSE Leap 15.4
Do not want to work overtime in the weekend, and want to give a free time to myself in those terrible period of time.
environment
OS: openSUSE Leap 15.4
kubernetes: 1.25.2
containerd: 1.6.6/1.6.8
virtualization: Parallels Desktop 18 for Mac Pro Edition
setup the virtual machines
create 3 virtual machines of (aarch64) openSUSE Leap 15.4, one is for the master node, the other two is for the worker nodes. the 3 virtual machines are connected under the 'Shared' model in Parallels Desktop. The LZY-SUSE154-002 is the master node, the other two are the worker nodes.
172.18.0.3 LZY-SUSE154-001
172.18.0.6 LZY-SUSE154-002
172.18.0.7 LZY-SUSE154-003
during the installation of the virtual machines, ensure swap partition is not created.
add IP, full-hostname and short-hostname into etc\hosts
, ==not understand why need do this actually==.
172.18.0.3 LZY-SUSE154-001 node1
172.18.0.6 LZY-SUSE154-002 master
172.18.0.7 LZY-SUSE154-003 node2
preflight in 3 virtual machines
sudo zypper addrepo https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-aarch64 aliyun-k8s
sudo zypper update
sudo zypper refresh
#ensure the swap is disable
sudo swapon --show
disable the firewall in 3 virtual machines
disable the firewall is only for the easy test, it could enable the firewall but set the rules for specific ports and service.
sudo systemctl stop firewalld
sudo systemctl disable firewalld
install kubelet, kubeadm and kubectl in 3 virtual machines
sudo zypper install kubelet=1.25.2-0
sudo zypper install kubeadm=1.25.2-0
#enable the kubelet service started on boot
sudo systemctl enable kubelet
install containerd
option 1 (1.6.8) from the official binaries in master node
use sudo su -
if superuser privileges required.
installing containerd
sudo wget https://github.com/containerd/containerd/releases/download/v1.6.8/containerd-1.6.8-linux-arm64.tar.gz
sudo tar Cxzvf /usr/local containerd-1.6.8-linux-arm64.tar.gz
starting containerd via systemd, download the containerd.service
unit file fromhttps://raw.githubusercontent.com/containerd/containerd/main/containerd.service into /usr/local/lib/systemd/system/
systemctl daemon-reload
systemctl enable --now containerd
installing runc
wget https://github.com/opencontainers/runc/releases/download/v1.1.4/runc.arm64
install -m 755 runc.arm64 /usr/local/sbin/runc
installing CNI plugins
wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-arm-v1.1.1.tgz
mkdir -p /opt/cni/bin
tar Cxzvf /opt/cni/bin cni-plugins-linux-arm-v1.1.1.tgz
option 2 (1.6.6) from docker in worker node 1
sudo zypper install docker
sudo docker ps
option 3 (1.6.6) from zupper repos in worker node 2
sudo zypper install containerd=1.6.6-150000.73.2
sudo zypper install containerd-ctr=1.6.6-150000.73.2
configure containerd
initialize the containerd with config.toml
sudo mkdir -p /etc/containerd
sudo containerd config default > /etc/containerd/config.toml
sudo vi /etc/containerd/config.toml
update config.toml
, this is to configure the systemd cgroup driver
, overriding the sandbox (pause) image and configure the booster
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
...
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6"
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]
endpoint = ["https://tgg8yfs8.mirror.aliyuncs.com"]
restart and enable containerd
sudo systemctl restart containerd
sudo systemctl enable containerd
do in master node, initialize the cluster with kubeadm
initialize the cluster
sudo kubeadm init --kubernetes-version=1.25.2 \
--apiserver-advertise-address=172.18.0.6 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=172.19.0.0/16 \
--pod-network-cidr=172.20.0.0/16
make kubectl work for the non-root user
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
install a Pod network add-on
sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
if https://raw.githubusercontent.com is blocked, just get the yaml file and copy/pates into vi
sudo vi kube-flannel.yml
sudo kubectl apply -f kube-flannel.yml
change the IP range of service-cidr
net-conf.json: |
{
"Network": "172.20.0.0/16",
"Backend": {
"Type": "vxlan"
}
}
check the status, all pods should be in running status
sudo kubectl get pods --all-namespaces
do in worker nodes, add the worker nodes into the cluster with kubeadm
specify the container runtime in --cri-socket
, Kubernetes uses the Container Runtime Interface (CRI) to interface with your chosen container runtime, if it's using containerd, on Linux the default CRI socket for containerd is /run/containerd/containerd.sock
, then set --cri-socket=/run/containerd/containerd.sock
sudo kubeadm join 172.18.0.6:6443 \
--cri-socket=/run/containerd/containerd.sock \
--token <your token> \
--discovery-token-ca-cert-hash sha256:<your hash>
rebalance the CoreDNS Pods after at least one new node is joined
sudo kubectl -n kube-system rollout restart deployment coredns
check status in master node
sudo kubectl label node lzy-suse154-001 node-role.kubernetes.io/worker=worker
sudo kubectl label node lzy-suse154-003 node-role.kubernetes.io/worker=worker
sudo kubectl get nodes -o wide
sudo kubectl get pods --all-namespaces -o wide
references
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm
https://kubernetes.io/docs/setup/production-environment/container-runtimes
https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver
https://github.com/containerd/containerd/blob/main/docs/getting-started.md
https://help.aliyun.com/document_detail/60750.html
https://www.cnblogs.com/centos-python/articles/14097330.html
https://juejin.cn/post/7053683649283096606
评论已关闭