基于containerd部署K8S

零、 环境介绍

  • HW: 2c2g 20GB
  • OS: Rocky Linux 9.2
  • Master: 192.168.128.200
  • Node1: 192.168.128.204
  • Node2: 192.168.128.205

一、 基础环境

  • 一台或多台服务器
  • 内存2GB或更多,CPU2核或更多,硬盘30GB或更多
  • 所有机器之间网络互通
  • 可以访问外网,需要拉取镜像
  • 禁止swap分区

1.1 禁止 SWAP 分区

编辑配置文件: /etc/fstab 注释相关分区, 重启系统

1.2 关闭防火墙

  • 三台服务器都需配置
    systemctl stop firewalld iptables
    systemctl disable firewalld iptables

1.3 关闭 SeLinux

  • 三台服务器都需配置
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

1.4 配置主机名

  • hostnamectl set-hostname k8s-master
主机 ip
k8s-master 192.168.128.200
k8s-node1 192.168.128.204
k8s-node2 192.168.128.205

1.5 配置解析

  • 三台服务器都需配置

    cat >> /etc/hosts << EOF
    192.168.128.200 k8s-master
    192.168.128.204 k8s-node1
    192.168.128.205 k8s-node2
    EOF

1.6 配置时间同步

  • 三台服务器都需配置
    systemctl enable chronyd --now

1.7 配置ipvs负载均衡

  • master 节点配置
    路径不同于CentOS7 的 /etc/sysconfig/modules

    # 安装相关软件包
    yum install ipset ipvsadm

    # 开启 ip_vs 配置文件
    cat > /etc/modules-load.d/ipvs.conf <<EOF
    ip_vs
    ip_vs_rr
    ip_vs_wrr
    ip_vs_sh
    nf_conntrack_ipv4
    EOF

    # 内核重新加载
    systemctl restart systemd-modules-load.service

    # 验证相关模块是否加载
    [root@k8s-master]# lsmod | grep ip_vs
    ip_vs_sh 16384 0
    ip_vs_wrr 16384 0
    ip_vs_rr 16384 0
    ip_vs 233472 6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
    nf_conntrack 212992 3 nf_nat,nft_ct,ip_vs
    nf_defrag_ipv6 24576 2 nf_conntrack,ip_vs
    libcrc32c 16384 5 nf_conntrack,nf_nat,nf_tables,xfs,ip_vs

1.8 开启网络转发和桥接

  • 三台服务器都需配置
    cat >> /etc/sysctl.conf << EOF
    net.ipv4.ip_forward = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    EOF
    sysctl -p

1.9 修改源

  • 三台服务器都需配置
    sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \
    -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirror.nju.edu.cn/rocky|g' \
    -i.bak \
    /etc/yum.repos.d/rocky-extras.repo \
    /etc/yum.repos.d/rocky.repo

二、 containerd 部署 (二进制)

  • 三台服务器都需要部署

2.1 下载

https://github.com/containerd/containerd/releases

2.2 解压(not follow FHS)

tar xzvf containerd-1.6.2-linux-amd64.tar.gz -C /usr/local/containerd

2.3 systemd管理

[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target

[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/containerd/bin/containerd

Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5

LimitNPROC=infinity
LimitCORE=infinity

TasksMax=infinity
OOMScoreAdjust=-999

[Install]
WantedBy=multi-user.target

systemctl daemon-reload
systemctl enable containerd --now
echo 'PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/containerd/bin"' > /etc/environment

2.4 可能遇到的问题

问题: containerd.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
解决: rm -rf /var/lib/containerd

2.5 安装 runc

https://github.com/containernetworking/plugins/releases
mkdir -p /opt/cni/bin
tar -xzvf cni-plugins-linux-amd64-v1.1.1.tgz -C /opt/cni/bin

三、 containerd 安装 (yum)

containerd的官方yum源是由docker去维护的 😂😂😂😂(●’◡’●)(●’◡’●)(●’◡’●)
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
yum install containerd.io

四、 配置 cotainerd

4.1 生成配置文件

containerd config default > /etc/containerd/config.toml

kubeadm config images list
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers

kubeadm init \
--pod-network-cidr=172.16.0.0/16 \
--service-cidr=10.1.0.0/16 \
--image-repository registry.aliyuncs.com/google_containers \
--apiserver-advertise-address 192.168.255.10 \
--control-plane-endpoint dev.i.k8s.rondochen.com:8443 \
--upload-certs

二、 安装 k8s 组件

2.1 配置源

  • 三台服务器都需要操作
    cat >  /etc/yum.repos.d/kubernetes.repo << EOF
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
    enabled=1
    gpgcheck=1
    gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
    EOF

2.2 安装 K8S 软件包

  • 三台服务器都需要操作

yum install kubeadm kubelet kubectl kubernetes-cni cri-tools

2.3 配置 cri

  • 三台服务器都需要操作
    cat > /etc/crictl.yaml << EOF
    runtime-endpoint: unix:///run/containerd/containerd.sock
    image-endpoint: unix:///run/containerd/containerd.sock
    timeout: 10
    debug: true
    pull-image-on-create: false
    disable-pull-on-run: false
    EOF