二进制基于kubeasz部署 K8s 1.34.x 高可用集群实战指南-第一章节基础环境准备(1-4)
第一章:基础环境准备
目标:所有节点完成基础配置,160部署节点实现免密登录所有节点。
1.1 服务器清单
|----------|----------------|--------------|----------|
| 角色 | IP地址 | 主机名 | 性能 |
| Master1 | 192.168.44.101 | k8s-master1 | 2C4G100G |
| Master2 | 192.168.44.102 | k8s-master2 | 2C4G100G |
| Master3 | 192.168.44.103 | k8s-master3 | 2C4G100G |
| Harbor1 | 192.168.44.104 | k8s-harbor1 | 2C4G100G |
| Harbor2 | 192.168.44.105 | k8s-harbor2 | 2C4G100G |
| Etcd1 | 192.168.44.106 | k8s-etcd1 | 2C4G100G |
| Etcd2 | 192.168.44.107 | k8s-etcd2 | 2C4G100G |
| Etcd3 | 192.168.44.108 | k8s-etcd3 | 2C4G100G |
| HAProxy1 | 192.168.44.109 | k8s-haproxy1 | 2C4G100G |
| HAProxy2 | 192.168.44.110 | k8s-haproxy2 | 2C4G100G |
| Node1 | 192.168.44.111 | k8s-node1 | 2C4G100G |
| Node2 | 192.168.44.112 | k8s-node2 | 2C4G100G |
| Deploy | 192.168.44.160 | k8s-deploy | 2C4G100G |

1.2 所有节点执行 (13台)
# 1. 配置主机名 (每台节点修改为自己的主机名)
hostnamectl set-hostname k8s-master1
# ============================================
# 在 192.168.44.101 上执行
# ============================================
sudo hostnamectl set-hostname k8s-master1.example.com
exec bash
# ============================================
# 在 192.168.44.102 上执行
# ============================================
sudo hostnamectl set-hostname k8s-master2.example.com
exec bash
# ============================================
# 在 192.168.44.103 上执行
# ============================================
sudo hostnamectl set-hostname k8s-master3.example.com
exec bash
# ============================================
# 在 192.168.44.104 上执行
# ============================================
sudo hostnamectl set-hostname k8s-harbor1.example.com
exec bash
# ============================================
# 在 192.168.44.105 上执行
# ============================================
sudo hostnamectl set-hostname k8s-harbor2.example.com
exec bash
# ============================================
# 在 192.168.44.106 上执行
# ============================================
sudo hostnamectl set-hostname k8s-etcd1.example.com
exec bash
# ============================================
# 在 192.168.44.107 上执行
# ============================================
sudo hostnamectl set-hostname k8s-etcd2.example.com
exec bash
# ============================================
# 在 192.168.44.108 上执行
# ============================================
sudo hostnamectl set-hostname k8s-etcd3.example.com
exec bash
# ============================================
# 在 192.168.44.109 上执行
# ============================================
sudo hostnamectl set-hostname k8s-haproxy1.example.com
exec bash
# ============================================
# 在 192.168.44.110 上执行
# ============================================
sudo hostnamectl set-hostname k8s-haproxy2.example.com
exec bash
# ============================================
# 在 192.168.44.111 上执行
# ============================================
sudo hostnamectl set-hostname k8s-node1.example.com
exec bash
# ============================================
# 在 192.168.44.112 上执行
# ============================================
sudo hostnamectl set-hostname k8s-node2.example.com
exec bash
-----
# 在 192.168.44.113 上执行
# ============================================
sudo hostnamectl set-hostname k8s-node3.example.com
exec bash
------
# ============================================
# 在 192.168.44.160 上执行
# ============================================
sudo hostnamectl set-hostname k8s-deploy.example.com
exec bash
# 示例,其他节点对应修改
# 2. 配置 hosts 文件
# 3. 设置 root 密码为 123456
# 4. 开启 root SSH 登录
# 5. 关闭防火墙和 swap
# 6. 配置内核参数
# 7. 加载内核模块
# 8. 时间同步
sudo tee /etc/hosts << EOF
192.168.44.101 k8s-master1
192.168.44.102 k8s-master2
192.168.44.103 k8s-master3
192.168.44.104 k8s-harbor1
192.168.44.105 k8s-harbor2
192.168.44.106 k8s-etcd1
192.168.44.107 k8s-etcd2
192.168.44.108 k8s-etcd3
192.168.44.109 k8s-haproxy1
192.168.44.110 k8s-haproxy2
192.168.44.111 k8s-node1
192.168.44.112 k8s-node2
192.168.44.113 k8s-node3
192.168.44.160 k8s-deploy
192.168.44.188 k8s-api
EOF
sudo sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication yes/' /etc/ssh/sshd_config
echo "root:123456" | sudo chpasswd
sudo systemctl restart ssh
sudo ufw allow ssh
sudo systemctl stop ufw
sudo systemctl disable ufw
sudo systemctl stop ufw && sudo systemctl disable ufw
sudo swapoff -a && sudo sed -i '/swap/d' /etc/fstab
sudo sysctl --system
sudo modprobe overlay && sudo modprobe br_netfilter
sudo apt update && sudo apt install -y systemd-timesyncd
sudo systemctl restart systemd-timesyncd && sudo systemctl enable systemd-timesyncd
1.3 部署节点免密登录配置 (仅在 160 执行)
# 1. 生成 SSH 密钥
ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa
# 先安装 sshpass(解决命令不存在)
apt update && apt install -y sshpass
# 再批量推送公钥到所有节点
for ip in 101 102 103 104 105 106 107 108 109 110 111 112; do
sshpass -p "123456" ssh-copy-id -o StrictHostKeyChecking=no root@192.168.44.$ip
done
# 3. 验证免密登录
for ip in 101 102 103 104 105 106 107 108 109 110 111 112 160; do
echo "=== 192.168.44.$ip ==="
ssh root@192.168.44.$ip "hostname"
done
批量在所有 12 台节点上设置 ip_forward=1 并生效
for ip in 101 102 103 104 105 106 107 108 109 110 111 112; do
echo "=== 配置 192.168.44.$ip ==="
ssh root@192.168.44.$ip "
# 写入内核配置
cat > /etc/sysctl.d/k8s.conf << EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
vm.swappiness = 0
EOF
# 加载内核模块
modprobe overlay
modprobe br_netfilter
# 立即生效内核参数
sysctl --system
"
done
检查清单:
1. 批量验证所有节点连通性(最关键)
for ip in 101 102 103 104 105 106 107 108 109 110 111 112 160; do
echo "=== 192.168.44.$ip ==="
ssh root@192.168.44.$ip "hostname; uptime"
done
2. 批量检查 swap 是否关闭(K8s 必须关闭)
for ip in 101 102 103 104 105 106 107 108 109 110 111 112; do
echo "=== 192.168.44.$ip ==="
ssh root@192.168.44.$ip "swapon --show"
done
3. 批量检查内核参数(K8s 必需)
for ip in 101 102 103 104 105 106 107 108 109 110 111 112; do
echo "=== 192.168.44.$ip ==="
ssh root@192.168.44.$ip "sysctl net.ipv4.ip_forward"
done
总结
基于目前优化后的环境可以直接开始安装:
- Docker / containerd
- kubeadm / kubelet / kubectl
- Etcd 集群
- HAProxy + Keepalived
- Master 节点初始化
- Node 节点加入集群
第一章检查清单
|--------|------------------------------------|------------|
| 检查项 | 命令 | 预期结果 |
| 主机名 | hostname | 正确的主机名 |
| root密码 | su - root | 123456 可登录 |
| 免密登录 | ssh root@192.168.44.101 hostname | 无需密码 |
| 防火墙 | ufw status | inactive |
| swap | free -m | grep Swap | 0 |
| Docker | docker version | 显示版本 |
