准备Kubernetes集群(z-k8s)容器运行时¶
备注
在部署 高可用(HA)Kubernetes集群 之前,首先需要部署高可用的 私有云etcd服务 。在高可用 etcd - 分布式kv存储 基础上,才能部署高可用Kubernetes。
安装 containerd运行时(runtime) 运行时¶
备注
所有Kuberntest节点都需要安装 containerd运行时(runtime) 容器运行时,替代 Docker Atlas
XFS存储目录切换¶
备注
文件系统改为常规 XFS文件系统 避免不成熟的 containerd的btrfs
卸载
docker
:
sudo systemctl stop docker
sudo systemctl stop docker.socket
sudo apt purge docker.io
sudo apt autoremove
新格式化成 XFS文件系统 :
sudo umount /var/lib/docker
sudo sed -i 's/^\/dev\/vdb1/#\/dev\/vdb1/g' /etc/fstab
sudo mkfs.xfs -f -n ftype=1 /dev/vdb1
echo "/dev/vdb1 /var/lib/containerd xfs defaults,uquota,pquota 0 1" | sudo tee -a /etc/fstab
sudo systemctl stop containerd
sudo mv /var/lib/containerd /var/lib/containerd.bak
sudo mkdir /var/lib/containerd
sudo mount /var/lib/containerd
sudo su -
(cd /var/lib/containerd.bak && tar cf - .) | (cd /var/lib/containerd && tar xf -)
sudo systemctl start containerd
安装containerd¶
采用 安装containerd官方执行程序 完成以下 containerd
安装:
从 containernetworking github仓库 下载安装包,并从 从 containerd github仓库containerd.service 下载
containerd.service
:
wget https://github.com/containerd/containerd/releases/download/v1.6.6/containerd-1.6.6-linux-amd64.tar.gz
sudo tar Cxzvf /usr/local containerd-1.6.6-linux-amd64.tar.gz
sudo mkdir -p /usr/local/lib/systemd/system
sudo curl https://raw.githubusercontent.com/containerd/containerd/main/containerd.service -o /usr/local/lib/systemd/system/containerd.service
sudo systemctl daemon-reload
sudo unlink /etc/systemd/system/containerd.service
sudo systemctl enable containerd
安装runc¶
从 containerd github仓库runc 下载
runc
安装:
wget https://github.com/opencontainers/runc/releases/download/v1.1.3/runc.amd64
sudo install -m 755 runc.amd64 /usr/local/sbin/runc
安装cni-plugins¶
从 containernetworking github仓库 下载安装cni-plugins:
wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
sudo mkdir -p /opt/cni/bin
tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.1.1.tgz
执行以下命令创建containerd的默认网络配置(该步骤可以提供kubernetes集群节点自举所依赖的网络):
sudo mkdir /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
转发IPv4和允许iptables查看bridged流量¶
执行以下脚本配置 sysctl :
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
启用systemd的cgroup v2¶
内核调整¶
用于部署 z-k8s
Kubernetes集群的虚拟机都采用了Ubuntu 20.04,不过,默认没有启用 Control Group v2 。实际上Kubernetes已经支持cgroup v2,可以更好控制资源分配,所以,调整内核参数 在Ubuntu 20.04 LTS激活Cgroup v2 。
修改
/etc/default/grub
配置在GRUB_CMDLINE_LINUX
添加参数:systemd.unified_cgroup_hierarchy=1
然后执行更新grup:
sudo update-grub
重启系统:
sudo shutdown -r now
重启后登陆系统检查:
cat /sys/fs/cgroup/cgroup.controllers
可以看到:
cpuset cpu io memory pids rdma
表明系统已经激活 Control Group v2
备注
所有 z-k8s
集群节点都这样完成修订
配置 Systemd进程管理器 cgroup驱动¶
修订
/etc/containerd/config.toml
的systemd
cgroup 驱动使用runc
(参见 安装containerd官方执行程序 ):
[plugins]
[plugins."io.containerd.grpc.v1.cri"]
[plugins."io.containerd.grpc.v1.cri".containerd]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
...
runtime_type = "io.containerd.runc.v2"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
...
SystemdCgroup = true
重启 containerd
sudo systemctl restart containerd