K8S
1、项目总览
1.1、最终架构方案
1.2、IP分配规划
1.3、域名规划
1.4、CPU优化指南
1.5、云C部署指南
1.6、部署检查清单
1.7、快速参考手册
2.1、API-VIP高可用配置
2.2、Calico网络配置
2.3、存储方案配置
2.4、Ingress入口配置
2.5、安全加固配置
2.6、etcd优化配置
2.7、灾难恢复配置
2.8、公司网络配置
K8s部署
本文档使用 MrDoc 发布
-
+
首页
1.5、云C部署指南
# 云C服务器部署指南 ## 📋 部署前准备检查 ### 硬件资源确认 **云端服务器(云A/B/C):** - [ ] AMD Ryzen 7700 (8核16线程) × 3台 - [ ] 128GB内存 × 3台 - [ ] 2×1TB SSD × 3台 - [ ] 公网IP × 30个(已到位) **网络连通性:** - [ ] 云A/B/C互ping延迟 <1ms - [ ] SSH免密登录配置完成 - [ ] WireGuard密钥对已生成并交换 ### 文档阅读确认 - [ ] `1.1、最终架构方案.md` - 了解整体架构 - [ ] `1.2、IP分配规划.md` - 熟悉IP分配规划 - [ ] `1.7、快速参考手册.md` - 准备快速参考卡片 ### 时间规划 | 阶段 | 预计耗时 | 建议时间窗口 | |------|---------|-------------| | 阶段1:PVE网络配置 | 30分钟 | 工作时间 | | 阶段2:WireGuard配置 | 30分钟 | 工作时间 | | 阶段3:创建VM | 1小时 | 工作时间 | | 阶段4:K8s集群扩展 | 1小时 | 工作时间 | | 阶段5:存储配置 | 30分钟 | 工作时间 | | **总计** | **3.5小时** | - | **完整检查清单:** 参考 `1.6、部署检查清单.md` --- ## 📋 服务器信息 | 项目 | 配置 | |------|------| | **CPU** | AMD Ryzen 7700 (8核16线程) | | **内存** | 128GB | | **存储** | 2×1TB SSD | | **网络** | 1000MB宽带 | | **公网IP** | 10个(多网段) | | **PVE主IP** | 199.127.62.90 | | **延迟** | 到云A/B: 0.5ms | ### 集群配置 | 项目 | 配置 | |------|------| | **集群名称** | KtCloudGroup | | **K8s版本** | 最新稳定版(推荐 v1.28.x+)| | **CPU方案** | 平衡方案(6C Master / 16C Worker,2.375:1超配)| | **默认密码** | Kt#admin(Harbor、Gitea等服务)| ## 🌐 网络信息 ### 公网IP列表 | 序号 | IP地址 | 网关 | 子网掩码 | 用途 | |------|--------|------|---------|------| | 1 | 199.127.62.90 | 199.127.62.1 | 255.255.255.0 | **PVE宿主机** | | 2 | 104.243.47.223 | 104.243.47.1 | 255.255.255.0 | 测试环境入口 | | 3 | 45.126.208.32 | 45.126.208.1 | 255.255.255.0 | 测试API网关 | | 4 | 45.126.208.63 | 45.126.208.1 | 255.255.255.0 | 测试WebSocket | | 5 | 45.126.208.170 | 45.126.208.1 | 255.255.255.0 | 灰度环境入口 | | 6 | 45.126.208.194 | 45.126.208.1 | 255.255.255.0 | 灰度API网关 | | 7 | 45.126.209.131 | 45.126.209.1 | 255.255.255.0 | 监控公网访问 | | 8 | 45.126.209.140 | 45.126.209.1 | 255.255.255.0 | 备用1 | | 9 | 45.126.209.141 | 45.126.209.1 | 255.255.255.0 | 备用2 | | 10 | 45.126.209.149 | 45.126.209.1 | 255.255.255.0 | 备用3 | **IP分配说明:** - ✅ 测试/灰度环境:占用公网IP(外部访问需求) - ❌ 开发环境:不占用公网IP,通过VPN内网访问(节省资源) - ❌ Harbor/Gitea:不占用公网IP,通过VPN内网访问(管理工具) **其他云服务器PVE主IP:** - 云A PVE:185.150.190.216 - 云B PVE:104.194.9.56 - 云C PVE:199.127.62.90(本服务器) ### 内网IP规划 | 设备 | IP地址 | 用途 | |------|--------|------| | PVE WireGuard | 10.255.0.3 | VPN互联 | | Master-3 | 10.255.0.103 | K8s控制节点 | | Worker-C-1 | 10.255.0.115 | K8s工作节点 | | Worker-C-2 | 10.255.0.116 | K8s工作节点 | --- ## 🚀 部署流程 ### 阶段1:PVE基础配置(30分钟) #### 1.1 配置PVE网络 ```bash # === 登录PVE宿主机 === ssh root@199.127.62.90 # 1. 编辑网络配置 nano /etc/network/interfaces ``` **网络配置内容:** ```bash # /etc/network/interfaces # Loopback auto lo iface lo inet loopback # 主公网接口(199.127.62.90/24) auto vmbr0 iface vmbr0 inet static address 199.127.62.90/24 gateway 199.127.62.1 bridge-ports none bridge-stp off bridge-fd 0 # 添加额外路由(多网段支持) post-up ip route add 104.243.47.0/24 via 199.127.62.1 dev vmbr0 post-up ip route add 45.126.208.0/24 via 199.127.62.1 dev vmbr0 post-up ip route add 45.126.209.0/24 via 199.127.62.1 dev vmbr0 # 内网桥接(K8s虚拟机使用) auto vmbr1 iface vmbr1 inet static address 10.255.0.30/24 bridge-ports none bridge-stp off bridge-fd 0 # 用于K8s VM内网通信 # 注意:WireGuard接口wg0将在后续步骤配置 ``` **应用配置:** ```bash # 检查语法 cat /etc/network/interfaces # 重启网络 systemctl restart networking # 验证 ip addr show ip route show # 应该看到: # - vmbr0: 199.127.62.90/24 # - vmbr1: 10.255.0.30/24 # - 路由: 104.243.47.0/24, 45.126.208.0/24, 45.126.209.0/24 ``` #### 1.2 添加额外公网IP到PVE ```bash # 创建IP别名配置文件 nano /etc/network/interfaces.d/additional-ips # 添加以下内容: # 额外公网IP(用于分配给VM) auto vmbr0:1 iface vmbr0:1 inet static address 104.243.47.223/24 auto vmbr0:2 iface vmbr0:2 inet static address 45.126.208.32/24 auto vmbr0:3 iface vmbr0:3 inet static address 45.126.208.63/24 auto vmbr0:4 iface vmbr0:4 inet static address 45.126.208.170/24 auto vmbr0:5 iface vmbr0:5 inet static address 45.126.208.194/24 auto vmbr0:6 iface vmbr0:6 inet static address 45.126.209.131/24 auto vmbr0:7 iface vmbr0:7 inet static address 45.126.209.140/24 auto vmbr0:8 iface vmbr0:8 inet static address 45.126.209.141/24 auto vmbr0:9 iface vmbr0:9 inet static address 45.126.209.149/24 # 重启网络 systemctl restart networking # 验证所有IP ip addr show vmbr0 ``` #### 1.3 配置防火墙 ```bash # 允许K8s相关端口 ufw allow 6443/tcp # K8s API ufw allow 2379:2380/tcp # etcd ufw allow 10250/tcp # kubelet ufw allow 51820/udp # WireGuard ufw allow 8006/tcp # PVE Web # 允许来自WireGuard网段的流量 ufw allow from 10.255.0.0/24 # 启用防火墙 ufw enable ufw status ``` --- ### 阶段2:WireGuard VPN配置(30分钟) #### 2.1 安装WireGuard ```bash # 安装WireGuard apt update apt install -y wireguard wireguard-tools # 启用IP转发 echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf sysctl -p ``` #### 2.2 生成密钥对 ```bash # 生成云C密钥对 cd /etc/wireguard umask 077 wg genkey | tee cloud-c-privatekey | wg pubkey > cloud-c-publickey # 查看密钥 echo "=== 云C私钥(保密) ===" cat cloud-c-privatekey echo "" echo "=== 云C公钥(需要发给云A/B) ===" cat cloud-c-publickey echo "" # 记录下来,稍后需要交换密钥 ``` #### 2.3 配置WireGuard(wg0接口) **⚠️ 需要先从云A/B获取它们的公钥** ```bash # 创建WireGuard配置 nano /etc/wireguard/wg0.conf ``` **配置内容:** ```ini [Interface] Address = 10.255.0.3/24 ListenPort = 51820 PrivateKey = <云C私钥 - 从cloud-c-privatekey文件获取> # 转发规则 PostUp = iptables -A FORWARD -i wg0 -j ACCEPT PostUp = iptables -A FORWARD -o wg0 -j ACCEPT PostUp = iptables -t nat -A POSTROUTING -o vmbr0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT PostDown = iptables -D FORWARD -o wg0 -j ACCEPT PostDown = iptables -t nat -D POSTROUTING -o vmbr0 -j MASQUERADE # === Peer: 云A === [Peer] PublicKey = <云A公钥> Endpoint = <云A公网IP>:51820 AllowedIPs = 10.255.0.1/32, 10.255.0.10/32, 10.255.0.101/32, 10.255.0.111/32, 10.255.0.112/32 PersistentKeepalive = 25 # === Peer: 云B === [Peer] PublicKey = <云B公钥> Endpoint = <云B公网IP>:51820 AllowedIPs = 10.255.0.2/32, 10.255.0.20/32, 10.255.0.102/32, 10.255.0.113/32, 10.255.0.114/32 PersistentKeepalive = 25 # === Peer: 公司 === [Peer] PublicKey = <公司公钥> AllowedIPs = 10.255.0.100/32, 172.16.100.0/21, 172.16.101.0/24 # 不设置Endpoint,公司为动态IP客户端 PersistentKeepalive = 25 ``` #### 2.4 启动WireGuard ```bash # 设置权限 chmod 600 /etc/wireguard/wg0.conf # 启动WireGuard wg-quick up wg0 # 设置开机自启 systemctl enable wg-quick@wg0 # 验证 wg show ip addr show wg0 ping 10.255.0.1 # 测试到云A ping 10.255.0.2 # 测试到云B ``` #### 2.5 更新云A/B的WireGuard配置 **在云A上添加云C Peer:** ```bash # SSH到云A ssh root@<云A IP> # 编辑WireGuard配置 nano /etc/wireguard/wg0.conf # 添加云C Peer [Peer] PublicKey = <云C公钥> Endpoint = 199.127.62.90:51820 AllowedIPs = 10.255.0.3/32, 10.255.0.30/32, 10.255.0.103/32, 10.255.0.115/32, 10.255.0.116/32 PersistentKeepalive = 25 # 重启WireGuard wg-quick down wg0 && wg-quick up wg0 # 验证 ping 10.255.0.3 ``` **在云B上添加云C Peer:** ```bash # SSH到云B ssh root@<云B IP> # 编辑WireGuard配置 nano /etc/wireguard/wg0.conf # 添加云C Peer(同云A) [Peer] PublicKey = <云C公钥> Endpoint = 199.127.62.90:51820 AllowedIPs = 10.255.0.3/32, 10.255.0.30/32, 10.255.0.103/32, 10.255.0.115/32, 10.255.0.116/32 PersistentKeepalive = 25 # 重启WireGuard wg-quick down wg0 && wg-quick up wg0 # 验证 ping 10.255.0.3 ``` #### 2.6 延迟测试 ```bash # === 在云C上测试 === # 测试到云A ping -c 10 10.255.0.1 # 预期: 平均延迟 <1ms # 测试到云B ping -c 10 10.255.0.2 # 预期: 平均延迟 <1ms # 测试到云A的Master节点(如果已部署) ping -c 10 10.255.0.101 # 测试到云B的Master节点(如果已部署) ping -c 10 10.255.0.102 # 查看WireGuard状态 wg show ``` **预期结果:** ``` ✅ 云C ↔ 云A: <1ms ✅ 云C ↔ 云B: <1ms ✅ Full Mesh连接正常 ``` --- ### 阶段3:创建K8s虚拟机(1小时) #### 3.1 准备VM模板(如果还没有) ```bash # 下载Ubuntu 22.04镜像 cd /var/lib/vz/template/iso wget https://releases.ubuntu.com/22.04/ubuntu-22.04.3-live-server-amd64.iso # 或者从云A/B复制现有模板(更快) # 假设云A已有模板ID 9000 ssh root@<云A IP> "qm export 9000 - | gzip" | gzip -d | qm restore 9000 /dev/stdin ``` #### 3.2 创建Master-3(VM ID: 301) ```bash # 克隆模板或创建新VM qm clone 9000 301 --name k8s-master-3 --full # 配置资源(优化方案:6C 16G) qm set 301 \ --cores 6 \ --sockets 1 \ --memory 16384 \ --balloon 0 \ --cpu host \ --numa 1 # 配置网络(内网) qm set 301 --net0 virtio,bridge=vmbr1 # 配置存储 qm set 301 --scsi0 local-lvm:100 # 系统盘100G # 设置开机自启 qm set 301 --onboot 1 # 启动VM qm start 301 # 进入控制台配置网络 qm terminal 301 ``` **在VM内配置网络:** ```bash # 编辑netplan nano /etc/netplan/00-installer-config.yaml # 配置如下 network: version: 2 ethernets: ens18: addresses: - 10.255.0.103/24 gateway4: 10.255.0.30 nameservers: addresses: - 8.8.8.8 - 1.1.1.1 # 应用配置 netplan apply # 测试连通性 ping 10.255.0.1 # 云A ping 10.255.0.2 # 云B ping 10.255.0.101 # Master-1 ping 10.255.0.102 # Master-2 ``` #### 3.3 创建Worker-C-1(VM ID: 302) ```bash # 克隆模板 qm clone 9000 302 --name k8s-worker-c-1 --full # 配置资源(优化方案:16C 52G) qm set 302 \ --cores 16 \ --sockets 1 \ --memory 53248 \ --balloon 0 \ --cpu host \ --numa 1 # 配置网络 qm set 302 --net0 virtio,bridge=vmbr1 # 配置存储(系统+数据) qm set 302 --scsi0 local-lvm:100 # 系统盘 qm set 302 --scsi1 local-lvm:900 # 数据盘(Longhorn) # 设置开机自启 qm set 302 --onboot 1 # 启动并配置 qm start 302 qm terminal 302 # 在VM内配置IP: 10.255.0.115/24 ``` #### 3.4 创建Worker-C-2(VM ID: 303) ```bash # 同Worker-C-1配置 qm clone 9000 303 --name k8s-worker-c-2 --full qm set 303 --cores 16 --memory 53248 --balloon 0 qm set 303 --net0 virtio,bridge=vmbr1 qm set 303 --scsi0 local-lvm:100 qm set 303 --scsi1 local-lvm:900 qm set 303 --onboot 1 qm start 303 # 在VM内配置IP: 10.255.0.116/24 ``` #### 3.5 验证所有VM ```bash # 查看VM列表 qm list # 预期输出: # VMID NAME STATUS MEM(MB) BOOTDISK(GB) # 301 k8s-master-3 running 16384 100 # 302 k8s-worker-c-1 running 53248 100+900 # 303 k8s-worker-c-2 running 53248 100+900 # 从PVE宿主机测试连通性 ping 10.255.0.103 ping 10.255.0.115 ping 10.255.0.116 ``` --- ### 阶段4:安装K8s组件(1小时) #### 4.1 准备工作(所有节点) ```bash # SSH到Master-3 ssh root@10.255.0.103 # 更新系统 apt update && apt upgrade -y # 禁用swap swapoff -a sed -i '/ swap / s/^/#/' /etc/fstab # 加载内核模块 cat <<EOF | tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF modprobe overlay modprobe br_netfilter # 内核参数 cat <<EOF | tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF sysctl --system # 安装containerd apt install -y containerd mkdir -p /etc/containerd containerd config default | tee /etc/containerd/config.toml sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml systemctl restart containerd systemctl enable containerd # 安装K8s组件(KtCloudGroup标准:最新稳定版) # 推荐使用 v1.28 或更高版本 apt install -y apt-transport-https ca-certificates curl # 使用最新稳定版(当前推荐 v1.28+) K8S_VERSION="v1.28" # 可根据需要更新到 v1.29, v1.30 等 curl -fsSL https://pkgs.k8s.io/core:/stable:/${K8S_VERSION}/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/${K8S_VERSION}/deb/ /" | tee /etc/apt/sources.list.d/kubernetes.list apt update apt install -y kubelet kubeadm kubectl apt-mark hold kubelet kubeadm kubectl # 验证安装版本 kubectl version --client kubeadm version # 在Worker-C-1和Worker-C-2上重复以上步骤 ``` #### 4.2 将Master-3加入集群 **⚠️ 需要从现有Master节点获取join命令** ```bash # === 在云A Master-1上生成证书上传命令 === ssh root@10.255.0.101 # 生成证书上传命令 kubeadm init phase upload-certs --upload-certs # 记录certificate-key输出 # 生成Master join命令 kubeadm token create --print-join-command --certificate-key <上一步的certificate-key> # 输出示例: # kubeadm join 10.255.0.100:6443 --token xxx --discovery-token-ca-cert-hash sha256:xxx --control-plane --certificate-key xxx ``` ```bash # === 在云C Master-3上执行join === ssh root@10.255.0.103 # 执行上面获取的join命令 kubeadm join 10.255.0.100:6443 \ --token xxx \ --discovery-token-ca-cert-hash sha256:xxx \ --control-plane \ --certificate-key xxx \ --apiserver-advertise-address 10.255.0.103 # 配置kubectl mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config # 验证 kubectl get nodes kubectl get cs ``` #### 4.3 将Worker节点加入集群 ```bash # === 在Master-1上生成Worker join命令 === ssh root@10.255.0.101 kubeadm token create --print-join-command # 输出示例: # kubeadm join 10.255.0.100:6443 --token xxx --discovery-token-ca-cert-hash sha256:xxx ``` ```bash # === Worker-C-1加入集群 === ssh root@10.255.0.115 # 执行join命令 kubeadm join 10.255.0.100:6443 \ --token xxx \ --discovery-token-ca-cert-hash sha256:xxx # === Worker-C-2加入集群 === ssh root@10.255.0.116 # 执行join命令(同上) kubeadm join 10.255.0.100:6443 \ --token xxx \ --discovery-token-ca-cert-hash sha256:xxx ``` #### 4.4 验证集群状态 ```bash # 在任意Master节点执行 kubectl get nodes # 预期输出: # NAME STATUS ROLES AGE VERSION # k8s-master-1 Ready control-plane xx v1.28.x # k8s-master-2 Ready control-plane xx v1.28.x # k8s-master-3 Ready control-plane 1m v1.28.x ← 新加入 # k8s-worker-a-1 Ready <none> xx v1.28.x # k8s-worker-a-2 Ready <none> xx v1.28.x # k8s-worker-b-1 Ready <none> xx v1.28.x # k8s-worker-b-2 Ready <none> xx v1.28.x # k8s-worker-c-1 Ready <none> 1m v1.28.x ← 新加入 # k8s-worker-c-2 Ready <none> 1m v1.28.x ← 新加入 # 验证etcd集群 kubectl exec -n kube-system etcd-k8s-master-1 -- sh -c \ 'ETCDCTL_API=3 etcdctl \ --endpoints=https://10.255.0.101:2379,https://10.255.0.102:2379,https://10.255.0.103:2379 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/etcd/server.crt \ --key=/etc/kubernetes/pki/etcd/server.key \ endpoint health' # 预期输出:3个endpoint都healthy ``` --- ### 阶段5:配置Longhorn存储(30分钟) #### 5.1 为Worker节点准备存储 ```bash # === 在Worker-C-1上 === ssh root@10.255.0.115 # 格式化数据盘 mkfs.ext4 /dev/sdb # 挂载 mkdir -p /var/lib/longhorn mount /dev/sdb /var/lib/longhorn # 添加到fstab echo "/dev/sdb /var/lib/longhorn ext4 defaults 0 0" >> /etc/fstab # 安装依赖 apt install -y open-iscsi nfs-common systemctl enable --now iscsid # === 在Worker-C-2上重复以上步骤 === ``` #### 5.2 Longhorn自动发现 ```bash # Longhorn会自动发现新Worker节点的存储 # 检查Longhorn状态 kubectl get nodes -n longhorn-system kubectl get pods -n longhorn-system # 查看可用存储 kubectl get nodes -n longhorn-system -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.capacity.storage}{"\n"}{end}' ``` --- ## ✅ 验证清单 ### 网络验证 ```bash # 1. PVE网络 ping -c 3 199.127.62.1 # 网关 ping -c 3 10.255.0.1 # 云A ping -c 3 10.255.0.2 # 云B # 2. WireGuard Full Mesh wg show # 应该显示3个peer(云A、云B、公司) # 3. VM互通 ping -c 3 10.255.0.101 # Master-1 ping -c 3 10.255.0.102 # Master-2 ping -c 3 10.255.0.103 # Master-3(本地) # 4. 延迟测试 for i in 10.255.0.{1,2,101,102}; do echo "=== $i ===" ping -c 10 $i | tail -1 done # 预期: 所有延迟 <1ms ``` ### K8s集群验证 ```bash # 1. 节点状态 kubectl get nodes -o wide # 应该看到9个节点(3 Master + 6 Worker) # 2. etcd健康 kubectl exec -n kube-system etcd-k8s-master-3 -- sh -c \ 'ETCDCTL_API=3 etcdctl endpoint health \ --endpoints=https://127.0.0.1:2379 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/etcd/server.crt \ --key=/etc/kubernetes/pki/etcd/server.key' # 3. 核心Pod kubectl get pods -n kube-system | grep -E 'etcd|apiserver|controller|scheduler' # 4. 网络测试(部署测试Pod) kubectl run test-pod-c --image=nginx --overrides='{"spec":{"nodeSelector":{"kubernetes.io/hostname":"k8s-worker-c-1"}}}' kubectl wait --for=condition=Ready pod/test-pod-c --timeout=60s kubectl exec test-pod-c -- curl -s http://kubernetes.default.svc.cluster.local # 5. 存储测试 kubectl get nodes -n longhorn-system # 应该看到云C的2个Worker节点 ``` ### 资源验证 ```bash # CPU配置验证 kubectl get nodes -o custom-columns=NAME:.metadata.name,CPU:.status.capacity.cpu # 预期: # k8s-master-3: 6 # k8s-worker-c-1: 16 # k8s-worker-c-2: 16 # 总资源 kubectl top nodes ``` --- ## 🎯 后续步骤 ### 1. 配置公网IP暴露 参考:`solutions/ingress-expose-fix.yaml` ```bash # 为测试环境配置MetalLB IP kubectl apply -f - <<EOF apiVersion: v1 kind: ConfigMap metadata: name: metallb-config namespace: metallb-system data: config: | address-pools: - name: test-pool protocol: layer2 addresses: - 104.243.47.223/32 - 45.126.208.32/32 EOF ``` ### 2. 部署测试应用 ```bash # 部署到云C节点 kubectl apply -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: test-app namespace: test spec: replicas: 2 selector: matchLabels: app: test-app template: metadata: labels: app: test-app spec: nodeSelector: kubernetes.io/hostname: k8s-worker-c-1 containers: - name: nginx image: nginx:latest ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: test-app namespace: test spec: type: LoadBalancer loadBalancerIP: 104.243.47.223 ports: - port: 80 targetPort: 80 selector: app: test-app EOF # 验证 curl http://104.243.47.223 ``` ### 3. 配置域名解析 ```bash # 添加DNS记录 test.ktcloud.cc A 104.243.47.223 dev.ktcloud.cc A 45.126.208.32 harbor.ktnet.cc A 45.126.208.170 ci.ktnet.cc A 45.126.208.194 ``` ### 4. CPU优化(可选) CPU配置采用平衡方案(6C Master / 16C Worker),详细说明参考:`1.4、CPU优化指南.md` --- ## 🚨 故障排查 ### 问题1:WireGuard连接失败 ```bash # 检查防火墙 ufw status ufw allow 51820/udp # 检查WireGuard状态 wg show systemctl status wg-quick@wg0 # 查看日志 journalctl -u wg-quick@wg0 -n 50 # 测试连通性 ping 10.255.0.1 traceroute 10.255.0.1 ``` ### 问题2:VM无法访问互联网 ```bash # 检查PVE路由 ip route show iptables -t nat -L -n -v # 确认NAT规则 iptables -t nat -A POSTROUTING -o vmbr0 -j MASQUERADE # 在VM内测试 ping 8.8.8.8 curl -I https://google.com ``` ### 问题3:etcd无法加入 ```bash # 检查证书 ls -la /etc/kubernetes/pki/etcd/ # 检查时间同步 timedatectl status ntpdate -q pool.ntp.org # 查看etcd日志 kubectl logs -n kube-system etcd-k8s-master-3 ``` ### 问题4:多网段路由问题 ```bash # 云C的IP来自不同网段,需要添加静态路由 ip route add 104.243.47.0/24 via 199.127.62.1 dev vmbr0 ip route add 45.126.208.0/24 via 199.127.62.1 dev vmbr0 ip route add 45.126.209.0/24 via 199.127.62.1 dev vmbr0 # 永久化(已在/etc/network/interfaces中配置) ``` --- ## 📞 支持文档 - 完整架构:`1.1、最终架构方案.md` - IP规划:`1.2、IP分配规划.md` - 域名规划:`1.3、域名规划.md` - CPU优化:`1.4、CPU优化指南.md` - 技术方案:`solutions/` 目录 --- **部署完成后,您将拥有:** ✅ 3个Master节点(云A/B/C,0.5ms延迟,完美etcd) ✅ 6个Worker节点(云端,充足算力) ✅ Full Mesh网络(三云互联) ✅ 高可用etcd集群(3节点) ✅ 分布式存储(Longhorn 5.4TB) ✅ 30个公网IP(灵活分配) ✅ 生产级高可用集群 🎉
arise
2025年11月22日 09:49
转发文档
收藏文档
‹‹
‹
6
/ 17
›
››
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码