
master‑ip192.168.91.137、worker01‑ip192.168.91.138、worker02‑ip192.168.91.151后续配置全部引用变量后期更换 IP 只修改变量值即可。使用规则所有节点先定义变量复制执行后续配置不再写死 IP统一调用变量区分【所有节点执行】 / 【仅 master 执行】 / 【仅 worker 执行】bash运行# 先在对应机器定义IP变量每台机器单独执行 ## k8s‑master节点执行 master_ip192.168.91.137 worker01_ip192.168.91.138 worker02_ip192.168.91.151 ## k8s‑worker01节点执行 master_ip192.168.91.137 worker01_ip192.168.91.138 worker02_ip192.168.91.151 ## k8s‑worker02节点执行 master_ip192.168.91.137 worker01_ip192.168.91.138 worker02_ip192.168.91.151第一阶段基础环境配置【所有节点执行】步骤 1设置主机名各自节点执行bash运行# master执行 hostnamectl set-hostname k8s-master bash # worker01执行 hostnamectl set-hostname k8s-worker01 bash # worker02执行 hostnamectl set-hostname k8s-worker02 bash步骤 2配置网卡文件ifcfg‑ens321k8s‑master 执行把变量的值填入配置文件bash运行cat /etc/sysconfig/network-scripts/ifcfg-ens32 EOF TYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOnone DEFROUTEyes IPV4_FAILURE_FATALno NAMEens32 DEVICEens32 ONBOOTyes IPADDR${master_ip} NETMASK255.255.255.0 GATEWAY192.168.91.2 DNS18.8.8.8 EOF2k8s‑worker01 执行bash运行cat /etc/sysconfig/network-scripts/ifcfg-ens32 EOF TYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOnone DEFROUTEyes IPV4_FAILURE_FATALno NAMEens32 DEVICEens32 ONBOOTyes IPADDR${worker01_ip} NETMASK255.255.255.0 GATEWAY192.168.91.2 DNS18.8.8.8 EOF3k8s‑worker02 执行bash运行cat /etc/sysconfig/network-scripts/ifcfg-ens32 EOF TYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOnone DEFROUTEyes IPV4_FAILURE_FATALno NAMEens32 DEVICEens32 ONBOOTyes IPADDR${worker02_ip} NETMASK255.255.255.0 GATEWAY192.168.91.2 DNS18.8.8.8 EOF三台机器重启网卡bash运行systemctl restart network步骤 3配置 /etc/hosts三台全部执行引用变量bash运行cat /etc/hosts EOF 127.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 ${master_ip} k8s-master ${worker01_ip} k8s-worker01 ${worker02_ip} k8s-worker02 EOF步骤 4关闭防火墙三台一起执行bash运行systemctl disable firewalld systemctl stop firewalld firewall-cmd --state # 出现 not running 代表成功步骤 5关闭 SELinux三台执行执行完成后 reboot 重启bash运行sed -ri s/^SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config setenforce 0 getenforce步骤 6时间同步chronybash运行dnf install -y chrony sed -i s/^pool.*/pool ntp.aliyun.com iburst/ /etc/chrony.conf systemctl restart chronyd systemctl enable chronyd chronyc sources步骤 7关闭 Swap 分区bash运行swapoff -a sed -ri s/.*swap.*/#/ /etc/fstab cat /etc/fstab | grep swap步骤 8内核参数配置bash运行modprobe overlay modprobe ip_vs modprobe ip_vs_rr modprobe ip_vs_wrr modprobe ip_vs_sh cat /etc/sysctl.d/k8s.conf EOF net.bridge.bridge-nf-call-iptables 1 net.bridge.bridge-nf-call-ip6tables 1 net.ipv4.ip_forward 1 EOF sysctl --system步骤 9安装 ipvsadmbash运行dnf install -y ipvsadm ipset cat /etc/sysconfig/modules/ipvs.modules EOF #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 EOF chmod x /etc/sysconfig/modules/ipvs.modules bash /etc/sysconfig/modules/ipvs.modules lsmod | grep ip_vs第二阶段安装 containerd【所有节点执行】bash运行dnf install -y libseccomp libcgroup wget wget https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/containerd-1.7.18-3.1.el7.x86_64.rpm dnf install -y ./containerd-1.7.18-3.1.el7.x86_64.rpm containerd config default /etc/containerd/config.toml sed -i s#registry.k8s.io#registry.aliyuncs.com/google_containers#g /etc/containerd/config.toml sed -i s#https://registry-1.docker.io#https://hub-mirror.c.163.com#g /etc/containerd/config.toml sed -i s/SystemdCgroup \ false/SystemdCgroup \ true/g /etc/containerd/config.toml systemctl start containerd systemctl enable containerd systemctl status containerd第三阶段安装 kubeadm、kubectl、kubelet【所有节点执行】bash运行cat /etc/yum.repos.d/kubernetes.repo EOF [kubernetes] nameKubernetes baseurlhttps://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled1 gpgcheck1 repo_gpgcheck0 gpgkeyhttps://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg-1.asc EOF dnf clean all dnf makecache KUBE_VERSION1.28.2-0 dnf install -y kubelet-${KUBE_VERSION} kubeadm-${KUBE_VERSION} kubectl-${KUBE_VERSION} systemctl enable kubelet第四阶段初始化集群【仅 Master 节点执行】4‑1 初始化命令这里使用 ${master_ip} 变量代替固定 IPbash运行kubeadm init \ --apiserver-advertise-address${master_ip} \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.28.2 \ --service-cidr10.96.0.0/12 \ --pod-network-cidr10.244.0.0/16 \ --ignore-preflight-errorsSwap初始化成功后输出的 join 命令示例bash运行kubeadm join ${master_ip}:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxtoken 过期重新获取bash运行kubeadm token create --print-join-command4‑2 配置 kubectl 管理员权限仅 Masterbash运行mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config kubectl get nodes第五阶段节点加入集群【仅 Worker 节点执行】worker 节点执行 join 命令依旧调用变量bash运行kubeadm join ${master_ip}:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxx第六阶段部署 Calico 网络插件【仅 Master 节点执行】bash运行kubectl apply -f https://docs.projectcalico.org/v3.26/manifests/calico.yaml kubectl get pods -n kube-system -w kubectl get nodes附录命令集群重置三台机器执行bash运行kubeadm reset -f rm -rf /var/lib/cni/ /etc/kubernetes/* /var/lib/kubelet/* rm -rf $HOME/.kube测试 Podmaster 执行bash运行cat nginx-test.yaml EOF apiVersion: v1 kind: Pod metadata: name: nginx-test spec: containers: - name: nginx image: nginx:1.25 EOF kubectl apply -f nginx-test.yaml kubectl get pods