准备Kubernetes集群(z-k8s)容器运行时

注解

在部署 高可用(HA)Kubernetes集群 之前,首先需要部署高可用的 私有云etcd服务 。在高可用 etcd - 分布式kv存储 基础上,才能部署高可用Kubernetes。

安装 containerd运行时(runtime) 运行时

注解

所有Kuberntest节点都需要安装 containerd运行时(runtime) 容器运行时,替代 Docker Atlas

XFS存储目录切换

注解

文件系统改为常规 XFS文件系统 避免不成熟的 containerd的btrfs

  • 卸载 docker :
卸载docker.io
sudo systemctl stop docker
sudo systemctl stop docker.socket
sudo apt purge docker.io
sudo apt autoremove
将btrfs磁盘转换成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 安装:

安装最新v1.6.6 containerd官方二进制程序
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
安装containerd的systemd配置文件
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

安装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

安装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集群节点自举所依赖的网络):
生成Kuberntes自举所需的默认containerd网络配置
sudo mkdir /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml

转发IPv4和允许iptables查看bridged流量

  • 执行以下脚本配置 sysctl :
配置k8s节点iptables
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驱动

配置containerd的runc使用systemd cgroup驱动
[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