boxmoe_header_banner_img

(>wO``)❤

加载中

文章导读

初始化集群–clown文章1


avatar
bai, mo 2026年4月10日 105


主机清单

主机名 IPv4 网关 dns1
master 10.10.10.101/24 10.10.10.1 10.10.10.101
node1 10.10.10.102/24 10.10.10.1 10.10.10.101
node2 10.10.10.103/24 10.10.10.1 10.10.10.101
windows/物理机 10.10.10.2/24 10.10.10.1

1.所使用的环境为vm 内创建三台rocky10-mini.iso虚拟机

2.使用nat连接外网 使内网进行互联通信

3.vm虚拟网络编辑器 编辑vment8的nat设置 网关指向10.10.10.1充当路由器与物理主机进行链接 物理机的vment8网络信息与信息表内容相同

4.开始配置前需进行以下配置再进行克隆 无特殊要求请按文档进行操作

5.我的虚拟机都关闭了侧缓通道

配置网络信息

请在master主机下进行该操作

hostnamectl set-hostname master #更改主机名<br>nmcli c modify ens160 ipv4.address 10.10.10.101/24 ipv4.gateway 10.10.10.1 ipv4.dns 10.10.10.101 autoconnect yes    #配置网卡ens160信息<br>systemctl restart NetworkManager #重启网络管理工具<br>bash    #加载主机名

关闭防火墙与selinux

这里要放很多个端口所以为了简便一点直接关闭防火墙

selinux会挡到k8s的运行 也关闭了

systemctl stop firewalld<br>systemctl disable firewalld<br>​<br>vi /etc/selinux/config<br>     16  grubby --update-kernel ALL --args selinux=0    #取消注释<br>     22  SELINUX=disabled   #永久关闭selinux

编辑hosts配置文件 为k8s集群提供主机清单

请在 master主机下进行该操作 后续克隆也会将该虚拟机配置一并进行完整克隆

vi /etc/hosts<br>    10.10.10.101 master<br>    10.10.10.102 node1<br>    10.10.10.103 node2

编辑ssh允许远程登陆

sed -i '39a\PermitRootLogin yes' /etc/ssh/sshd_config<br>systemctl enable sshd --now

更换系统软件源

这里是因为rocky的默认镜像源在国外 会比较慢所以在这里使用了阿里云的镜像站

如想先进行yum源的备份 可以使用mv或cp功能进行备份

【注意】这里我的镜像都是x86镜像 如是arm机子等请自行更改

rm -rf /etc/yum.repos.d/*<br>vi /etc/yum.repos.d/a.repo<br>    [BaseOS]<br>    name=baseos<br>    baseurl=https://mirrors.aliyun.com/rockylinux/10/BaseOS/x86_64/os/<br>    gpgcheck=0<br>    enabled=1<br>​<br>    [AppStream]<br>    name=app<br>    baseurl=https://mirrors.aliyun.com/rockylinux/10/AppStream/x86_64/os/<br>    gpgcheck=0<br>    enabled=1<br>​<br>    [extras]<br>    name=extras<br>    baseurl=https://mirrors.aliyun.com/rockylinux/10/extras/x86_64/os/<br>    gpgcheck=0<br>    enabled=1<br>​<br>    [kubernetes]<br>    name=Kubernetes<br>    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/<br>    enabled=1<br>    gpgcheck=0<br>​<br>    [containerd]<br>    name=Containerd<br>    baseurl=https://download.docker.com/linux/centos/10/x86_64/stable/<br>    enabled=1<br>    gpgcheck=0<br>​

配置时间同步

这里做时间同步是为了我的节点和主节点在同一个时间下 也方便看日志

【注意】要删除chrony.conf配置文件内的pool 2.rocky.pool.ntp.org iburst

yum install chrony vim -y<br>vim /etc/chrony.conf<br>    pool ntp1.aliyun.com iburst<br>    pool ntp2.aliyun.com iburst<br>    pool cn.pool.ntp.org iburst<br>​<br>systemctl enable chronyd --now

使用chronyc sources进行测试

禁用swap分区

这里是为了防止这个swap分区占用k8s集群的内存

sed -i 'swap/d' /etc/fstab  #删除掉包含swap的行<br>swapoff -a  #临时关闭swap

开启内核转发

这里我是为了在不同的节点上pod间通信 并使pod访问外部网络 且后续我会配置ipvs规则

k8s的网络模型要求每一个pod都拥有一个独立的IP(IP-per-Pod) 并且任何两个pod之间都可以直接通信 无论是否在同一个节点上 每个节点本质上就是一个小型的网络路由器 负责为运行在其上的所有pod转发流量

vim /etc/sysctl.d/k8s.conf<br>    net.bridge.bridge-nf-call-ip6tables=1<br>    net.bridge.bridge-nf-call-iptables=1<br>    net.ipv4.ip_forward=1   #为每个节点开启路由器模式<br>​<br>vim /etc/modules-load.d/k8s.conf<br>    br_netfilter    #设置系统在启动时自动加载br_netfilter内核模块<br>    overlay #设置系统在启动时自动加载OverkayFS内核模块<br>​<br>modprobe overlay    #临时向内核添加OverlayFS内核模块<br>modprobe br_netfilter   #临时加载内核模块<br>​<br>sysctl --system #重新加载所有系统配置文件<br>lsmod | grep br_netfilter   

使用 lsmod | grep br_netfilter 验证内核模块是否已经成功加载到当前运行的内核中

配置ipvs功能

解决 kube-proxy 使用 iptables 模式时在大规模集群下的性能瓶颈问题

iptables是linux内核网络数据包处理的实际执行者(数据平面)

yum install ipset ipvsadm -y<br><br>//将k8s节点武装成一个高性能的网络数据平面<br>vim /etc/modules-load.d/ipvs.conf   #在系统每次启动时 自动加载该内核模块<br> overlay #启用OverlayFS联合文件系统<br>  ip_vs   #IP Virtual Server的核心开关<br> ip_vs_rr    #Round Robin 轮询<br> ip_vs_wrr   #Weighted Round Robin 加权轮询<br>  ip_vs_sh    #Source Hashing 源哈希地址<br>   nf_conntrack    #网络连接跟踪模块<br>   <br>modprobe overlay    #立即加载<br>modprobe ip_vs && modprobe ip_vs_rr && modprobe ip_vs_wrr && modprobe ip_vs_sh && modprobe nf_conntrack

使用lsmod查看模块是否加载成功

安装kubeadm…

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes    #不排除k8s的包进行下载<br>systemctl enable kubelet --now

配置containerd

1.安装并配置containerd

yum install containerd -y<br><br>#生成默认的配置文件<br>mkdir -p /etc/containerd<br>containerd config default | sudo tee /etc/containerd/config.toml<br><br># 修改配置使用国内镜像源 !!!<br>sudo sed -i 's|registry.k8s.io|registry.aliyuncs.com/google_containers|g' /etc/containerd/config.toml<br>sudo sed -i 's|sandbox_image = ".*"|sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"|g' /etc/containerd/config.toml<br><br># 启动并启用 containerd<br>sudo systemctl enable containerd<br>sudo systemctl start containerd

2.配置crictl使用containerd

# 创建 crictl 配置<br>tee /etc/crictl.yaml > /dev/null <<EOF<br>runtime-endpoint: unix:///var/run/containerd/containerd.sock<br>image-endpoint: unix:///var/run/containerd/containerd.sock<br>timeout: 10<br>debug: false<br>EOF

3.测试containerd是否正常工作

#测试拉取镜像<br>crictl pull registry.aliyuncs.com/google_containers/pause:3.9

克隆该master虚拟机生成node1与node2

过程跳过

编辑node1网络信息与主机名

hostnamectl set-hostname node1<br>nmcli c modify ens160 ipv4.address 10.10.10.102/24<br>systemctl restart NetworkManager<br>bash

编辑node2网络信息与主机名

hostnamectl set-hostname node2<br>nmcli c modify ens160 ipv4.address 10.10.10.103/24<br>systemctl restart NetworkManager<br>bash

配置ssh免密登录

进行操作 配置免密登录传输文件就不用输密码了很便捷

ssh-keygen<br>ssh-copy-id 10.10.10.102<br>ssh-copy-id 10.10.10.103<br>ssh-copy-id 10.10.10.101<br>scp .ssh/know_hosts root@10.10.10.102:/root/.ssh/<br>scp .ssh/know_hosts root@10.10.10.103:/root/.ssh/

K8s初始化前必检清单:

  1. 节点基础
    • ✅ 所有节点主机名唯一且可解析
    • ✅ 已关闭 swapswapoff -a
    • ✅ 已关闭防火墙SELinux
  2. 内核与网络
    • ✅ 加载内核模块:sudo modprobe br_netfilter
    • ✅ 启用桥接转发:sysctl -p /etc/sysctl.d/k8s.conf
  3. 容器运行时
    • ✅ Docker/containerd 已安装并启动
    • ✅ 测试容器运行:docker run hello-world
  4. 镜像访问
    • 预拉取镜像或配置国内源(关键!):bashkubeadm config images pull –image-repository registry.aliyuncs.com/google_containers
  5. 端口检查
    • ✅ 确保 6443、10250 等端口未被占用

最后执行: kubeadm init --dry-run 进行最终预检。

初始化集群

以下命令只能在master节点上进行

sudo kubeadm init --apiserver-advertise-address=10.10.10.101 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.28.2 --service-cidr=192.168.0.0/12 --pod-network-cidr=192.168.0.0/16

1.撤销管理员权限

此步骤只需在master节点进行

 1.不是root用户用这个<br>  mkdir -p $HOME/.kube<br>  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config<br>  sudo chown $(id -u):$(id -g) $HOME/.kube/config<br>  systemctl restart kubelet<br> 2.是root用户用这个<br>  export KUBECONFIG=/etc/kubernetes/admin.conf  #临时生效<br>  echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /root/.bashrc<br>source /root/.bashrc   #永久生效

2.node1与node2节点加入集群

kubeadm join 10.10.10.101:6443 --token mx6jlu.frb3dykrrgofhb5i \<br>        --discovery-token-ca-cert-hash sha256:e467906a6291973f1c0dc1469d5b9caddda338a5bbcd8cb3ee356003bf84dd62

【注意若中途出现证书问题】

ln -sf /etc/kubernetes/pki/apiserver-etcd-client.crt /etc/kubernetes/pki/etcd/<br>ln -sf /etc/kubernetes/pki/apiserver-etcd-client.key /etc/kubernetes/pki/etcd/<br># 确保文件有正确的权限<br>chmod 600 /etc/kubernetes/pki/etcd/*.key<br>chmod 644 /etc/kubernetes/pki/etcd/*.crt<br><br># 检查文件所有权<br>chown root:root /etc/ku

配置calico

安装calico配置文件

[root@master ~]# curl -L https://docs.projectcalico.org/manifests/calico.yaml -o calico.yaml
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 83 100 83 0 0 90 0 --:--:-- --:--:-- --:--:-- 90
100 232k 100 232k 0 0 104k 0 0:00:02 0:00:02 --:--:-- 290k
# 1. 应用 Calico 配置
kubectl apply -f calico.yaml

# 2. 监控安装进度
watch kubectl get pods -n kube-system

# 3. 查看节点状态变化
watch kubectl get nodes


评论(0)

查看评论列表

暂无评论


发表评论

表情 颜文字
插入代码

致读者:

欢迎在评论区留下您的宝贵意见^-^

2026 年 4 月
 123456
78910111213
14151617181920
21222324252627
28293031