*基于containerd 容器引擎的kubernetes集群配置步骤:

1 安装虚拟机;vm16

2 安装centos8 操作系统;镜像文件

3 注意生成快照;

4 创建一台模板机的步骤;

–1[root@llfk8s ~]#cd /etc/yum.repos.d/ //进入yum 配置仓库里面
–2[root@llfk8s yum.repos.d]#ls //【可选】查看一下
–3[root@llfk8s yum.repos.d]#rm -rf * //删除文件
–4[root@llfk8s yum.repos.d]#curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo //重新配置阿里云yum 仓库
–5[root@llfk8s yum.repos.d]#yum repolist //仓库安装 注意看一下
–6[root@llfk8s ~]#systemctl stop firewalld && systemctl disable firewalld //关闭防火墙 设置开机自启动
–7[root@llfk8s ~]#sed -ri ‘/^SELINUX=/cSELINUX=disedied’ /etc/selinux/config //书本10页 最后一行 设置为永久关闭
–8[root@llfk8s ~]#setenforce 0 //关闭SELinux

【一】正式开始!!!
–0 导入模板机后去到VMware虚拟机中,编辑–> 虚拟网络编辑器中修改IP地址 开始地址结束地址;网段为 192.168.200.2
–1[root@llfk8s ~]# yum install vim //没有vim 工具的使用该命令装一下,有就不用装了
–2[root@llfk8s ~]#vim /etc/sysconfig/network-scripts/ifcfg-ens160 //打开网络配置文件,修改网络配置信息;
对照一下内容有的就修改 ,没有的就添加;
修改:
BOOTPROTO=“static”

添加:(注意三台主机服务器的IP地址不一致,注意修改)
IPADDR=“192.168.200.10”
NETMASK=“255.255.255.0”
GATEWAY=“192.168.200.2”
DNS1=“8.8.8.8”

修改配置后一定记得重载、重启网络!!!
–3[root@llfk8s ~]# nmcli c reload //启动网卡
–4[root@llfk8s ~]# nmcli c up ens160 //重启虚拟机才生效,可以修改主机名之后再一起重启!!!!
–5[root@llfk8s ~]# ping 8.8.8.8 //测试网络连通性
–6[root@llfk8s ~]# hostnamectl set-hostname master //修改主机名重启后主机名才生效;
–7[root@master ~]# vim /etc/hosts //配置域名解析 ,在该文件中,加入以下内容;
192.168.200.10 master
192.168.200.20 node1
192.168.200.30 node2
192.168.200.10 k8s

–8[root@master ~]# swapoff -a //关闭交换分区
–9[root@master ~]# vim /etc/fstab //配置永久关闭交换分区 这一行前面加个# 注意注意
#/dev/mapper/cl-swap swap swap defaults 0 0

–10[root@master ~]# modprobe overlay //加载覆盖文件系统模块
–11[root@master ~]# modprobe br_netfilter //加载启用Linux内核中的桥接网络过滤功能模块
–12[root@master ~]# cd /etc/modules-load.d/ //设置为系统启动之后,自动加载这两个模块
–13[root@master modules-load.d]# touch k8s.conf
–14[root@master modules-load.d]# vim k8s.conf //加入以下内容
overlay
br_netfilter

–15[root@master modules-load.d]# cd /etc/sysctl.d/ //其他内核参数的配置
–16[root@master sysctl.d]# touch k8s.conf
–17[root@master sysctl.d]# vim k8s.conf //加入以下内容
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
vm.overcommit_memeory = 0

–18[root@master sysctl.d]#sysctl -p /etc/sysctl.d/k8s.conf //加载配置一下

【二】配置安装源

–1[root@master ~]# yum install -y yum-utils ipset ipvsadm tc

ping 8.8.8.8 //确保网络连接通畅

–2 添加containerd仓库
[root@master ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

–3
[root@master ~]# cd /etc/yum.repos.d/
[root@master yum.repos.d]# touch k8s.repo
[root@master yum.repos.d]# vim k8s.repo //配置文件方式1
[kubernetes]
name=kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/rpm/
enable=1
gpgcheck=0


[root@master yum.repos.d]# vim k8s.repo //配置文件方式2
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF

–4[root@master yum.repos.d]# yum clean all && yum repolist

【三】安装containerd 容器引擎
–5 安装依赖包
[root@master ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

–6[root@master yum.repos.d]# yum clean all && yum repolist

--------------这里下面三行选一行执行,各行命令使用原因看注释-----------------
–7[root@master ~]# yum install -y containerd.io-1.6.31-3.1.el8 //建议装这个版本兼容性更高;
–7[root@master ~]# yum install containerd -y //这行是标准安装,已经装过或者其他出错了,就选择执行下一行,没出错就接着往下一步;
–7[root@master ~]# yum install containerd -y --allowerasing //允许包管理器通过 “删除与目标包存在冲突的旧包” 来完成新包的安装或升级;

–9[root@master ~]# systemctl start containerd && systemctl enable containerd //启动 开机自启
–10[root@master ~]# systemctl status containerd //查看一下状态【running】

–11[root@master ~]# containerd config default > /etc/containerd/config.toml

–12[root@master ~]# vim /etc/containerd/config.toml //注意!!!!找到文件中的这两行 ,修改参数;
sandbox_image = “registry.aliyuncs.com/google_containers/pause:3.9”
Systemd_Cgroup = true

【四】nerdctl 工具的安装
–1 [root@master ~]#rz //上传压缩包
–2 [root@master ~]#tar -xf nerdctl-full-1.7.5-linux-amd64.tar.gz -C /usr/local/ //解压缩 并复制到位置 /usr/local/
–3 [root@master ~]#mkdir -p /opt/cni/bin/
–4 [root@master ~]#cp /usr/local/libexec/cni/* /opt/cni/bin/
–5 [root@master ~]#cp /usr/local/lib/systemd/system/buildkit.service /usr/lib/systemd/system/
–6 [root@master ~]#systemctl enable buildkit --now //启动 buildkit 构建镜像插件
–7 [root@master ~]#systemctl status buildkit

【五】 安装kubelet-1.29.0 kubeadm-1.29.0 kubectl-1.29.0

[root@master ~]# yum install kubelet-1.29.0 kubeadm-1.29.0 kubectl-1.29.0 -y
[root@master ~]# systemctl start kubelet && systemctl enable kubelet //启动,设置开机自启
[root@master ~]# systemctl status kubelet //查看状态

注意以上操作步骤 请一定在在node1 node2 均操作一遍,以上操作演示步骤仅仅是一台主机服务器的操作;

【六】 master\node1\node2搞好之后在master上初始化集群

[root@master ~]# modprobe br_netfilter //最好是再加载一下模块
[root@master ~]# kubeadm init --apiserver-advertise-address=“192.168.200.10” --control-plane-endpoint=“k8s” --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.29.0 --service-cidr=10.96.0.0/16 --pod-network-cidr=172.16.0.0/16

【七】 保证初始化无任何问题之后再去配置kubectl环境(root用户)
[root@master ~]# sudo mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown (id−u):(id -u):(idu):(id -g) $HOME/.kube/config

【八】 验证Master节点状态(此时应为NotReady,等待网络插件安装)
[root@master ~]# kubectl get nodes

【九】 在Master节点执行,生成加入命令(包含token和CA证书哈希)
[root@master ~]# kubeadm token create --print-join-command //复制加入命令去到各个节点上运行

【十】 在各个节点上运行生成的加入命令;后验证阶段:

  1. 上传calico.yaml文件准备安装网络组件;

[root@master ~]# rz

  1. 部署 Calico 网络插件安装;

[root@master ~]# kubectl apply -f calico.yaml

3、验证Master节点状态(此时应为Ready,网络插件安装成功)

[root@master ~]# kubectl get nodes

4、为 kubectl 配置命令自动补全功能可以极大提高操作效率 【三台都做一遍】

[root@master ~]# ‘source <(kubectl completion bash)’ >> ~/.bashrc

哒哒哒,你完成啦!

++++++++++++++++++++++++++++++++++++++++++++++++++

常见的一些问题的解决方式:【实在解决不了,可私信留言】

遇到问题:查看日志信息
[root@master ~]# journalctl -u kubelet --no-pager //查看 kubelet 日志信息 ctrl +c 停止
属于:查询到报错信息

问题:/etc/containerd/config.toml配置文件不会改,直接用这行
[root@master ~]# sed -i ‘s/SystemdCgroup = false/SystemdCgroup = true/g’ /etc/containerd/config.toml
属于:配置文件需修改位置找不到

问题:初始化时,配置文件报错
–7[root@master ~]# yum install -y containerd.io-1.6.31-3.1.el8 //建议装这个版本兼容性更高;

  1. 停止 containerd 服务
    systemctl stop containerd

  2. 清理旧配置和数据(保留核心目录,避免完全重建)
    rm -rf /etc/containerd/config.toml
    rm -rf /var/run/containerd/*
    rm -rf /var/lib/containerd/io.containerd.grpc.v1.cri/ # 清理CRI相关数据

  3. 重新生成 containerd 默认配置(确保启用CRI v1alpha2兼容)
    containerd config default > /etc/containerd/config.toml

  4. 编辑配置文件,强制启用CRI兼容模式
    vim /etc/containerd/config.toml
    –1. 确保禁用插件列表为空(必须启用CRI)
    disabled_plugins = []
    –2. 配置CRI插件,明确支持v1alpha2(兼容kubeadm检查)
    [plugins.“io.containerd.grpc.v1.cri”]
    –3.基础镜像(与K8s 1.29匹配)
    sandbox_image = “registry.aliyuncs.com/google_containers/pause:3.9”
    –4. 启用v1alpha2 API兼容(关键:解决"unknown service runtime.v1alpha2.RuntimeService")
    [plugins.“io.containerd.grpc.v1.cri”.runtime]
    runtime_type = “io.containerd.runc.v2”
    [plugins.“io.containerd.grpc.v1.cri”.runtime.options]
    SystemdCgroup = true # 与kubelet一致的cgroup驱动
    –5. 确保runc运行时使用v2版本(必须)
    [plugins.“io.containerd.runtimes.runc”]
    runtime_type = “io.containerd.runc.v2”
    [plugins.“io.containerd.runtimes.runc.options”]
    SystemdCgroup = true

  5. 启动服务
    systemctl start containerd
    systemctl enable containerd

  6. 查看 containerd 日志,确认CRI插件启动成功
    journalctl -u containerd -f
    成功标志:日志中出现 “Starting CRI plugin” 或 “grpc server started” 等信息,无报错

  7. 用 crictl 验证(忽略警告,重点看是否有有效输出)
    crictl info
    即使有警告,只要输出中包含 “runtimeName: containerd” 即说明CRI接口基本可用

  8. 初始化
    kubeadm init
    –apiserver-advertise-address=“192.168.200.10”
    –control-plane-endpoint=“k8s”
    –image-repository registry.aliyuncs.com/google_containers
    –kubernetes-version v1.29.0
    –service-cidr=10.96.0.0/16
    –pod-network-cidr=172.16.0.0/16
    –ignore-preflight-errors=CRI # 临时忽略CRI检查错误
    属于:强力解决方案

问题:初始化冲突(已经执行初始化命令但是不成功)

  1. 重置kubeadm配置(关键:清理集群状态)
    kubeadm reset -f
  2. 停止并清理kubelet相关进程(避免端口占用)
    systemctl stop kubelet
    pkill -f kubelet # 强制终止所有kubelet进程
  3. 删除残留的Kubernetes配置文件和数据目录
    rm -rf /etc/kubernetes/*
    rm -rf /var/lib/etcd/* # 清理etcd数据(重要,否则会报DirAvailable错误)
    rm -rf /var/lib/kubelet/*
    rm -rf /var/lib/cni/*
    rm -rf /etc/cni/net.d/*
    rm -rf $HOME/.kube/config # 清理kubectl配置
  4. 检查并释放占用的端口(6443、10250等)
  5. 重启containerd和kubelet(确保状态干净)
    systemctl restart containerd
    systemctl restart kubelet

属于:重置解决

问题:网络安装组件部署不成功

  1. 编辑配置,将 Pod CIDR 改为 172.16.0.0/16(搜索 “CALICO_IPV4POOL_CIDR”)
    sed -i ‘s#192.168.0.0/16#172.16.0.0/16#g’ calico.yaml
  2. 再次部署 Calico
    kubectl apply -f calico.yaml
    3、再次验证Master节点状态(此时应为NotReady,等待网络插件安装)
    kubectl get nodes
    属于:部署解决方案

不要放弃!不要放弃!不要放弃!你一定可以成功创建集群!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐