主机清单
| 主机名 | 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 |
| 主机名 | 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会挡到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
请在 master主机下进行该操作 后续克隆也会将该虚拟机配置一并进行完整克隆
vi /etc/hosts<br> 10.10.10.101 master<br> 10.10.10.102 node1<br> 10.10.10.103 node2
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分区占用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 验证内核模块是否已经成功加载到当前运行的内核中
解决 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查看模块是否加载成功
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes #不排除k8s的包进行下载<br>systemctl enable kubelet --now
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
过程跳过
编辑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-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/
swapoff -asudo modprobe br_netfiltersysctl -p /etc/sysctl.d/k8s.confdocker run hello-world最后执行: 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配置文件
[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)
暂无评论