基于 PVE 8.1 的 CentOS / Ubuntu / Docker / Kubernetes 部署手册

基于 PVE 8.1 的 CentOS / Ubuntu / Docker / Kubernetes 部署手册

适用场景:一台已安装 Proxmox VE 8.1 的物理服务器,需要同时运行多个 CentOS 虚拟机(或 LXC 容器)以部署 Docker 环境,并部署一个 Ubuntu 虚拟机用于 Docker 与 Kubernetes(K8s)集群的搭建与管理。


1. 前提条件与规划

  • 硬件资源:至少 8 核 CPU、32 GB 内存、500 GB SSD/NVMe(根据实际业务扩展,K8s 建议 64 GB+ 内存)。
  • 网络规划
  • 管理网段:192.168.10.0/24(PVE 管理、SSH)
  • 生产网段:192.168.20.0/24(虚拟机业务流量,可选)
  • Kubernetes Pod 网段:10.244.0.0/16(以 Flannel 为例)
  • Service 网段:10.96.0.0/12
  • PVE 存储 :建议划分 local(镜像/ISO)、local-lvm(VM 磁盘),如使用 Ceph/NFS 需提前配置。
  • 镜像准备
  • CentOS 7/Stream 8/9 ISO(官方)
  • Ubuntu Server 22.04 LTS ISO
  • 账号与权限 :准备至少一个有 PVE root@pam 权限的账号 & SSH 公钥。

2. PVE 8.1 基础配置

2.1 更新 PVE 与订阅设置

bash 复制代码
apt update && apt full-upgrade -y  
sed -i 's/enterprise/no-subscription/g' /etc/apt/sources.list.d/pve-enterprise.list  
cat <<'EOF' >/etc/apt/sources.list.d/pve-no-subscription.list  
deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription  
EOF  
apt update && apt full-upgrade -y  

2.2 创建桥接网络

  1. 登录 PVE Web 界面 → 数据中心节点系统网络
  2. 创建 vmbr1 作为业务网桥(如需要):
  • 类型:Linux Bridge
  • 物理接口:enp3s0(示例)
  • IPv4/IPv6 配置:按规划填写或留空
  1. 应用更改并重启网络服务:ifreload -a

3. 安装多个 CentOS + Docker

3.1 创建 CentOS 模板虚拟机

  1. 上传 ISO:数据中心存储local内容上传 ISO。
  2. 新建 VM 参数建议:
  • ID:2001
  • 名称:tmpl-centos7
  • BIOS:OVMF (UEFI)SeaBIOS(取决于需求)
  • SCSI 控制器:VirtIO SCSI
  • 磁盘:32 GB(Thin provision)
  • CPU:4 cores,类型 host
  • 内存:8 GB
  • 网络:vmbr0,型号 VirtIO (paravirtualized)
  1. 启动 VM,按常规流程安装 CentOS(Minimal)。
  2. 安装基础工具与 QEMU Guest Agent:
bash 复制代码
sudo yum install -y epel-release  
sudo yum install -y qemu-guest-agent vim curl wget net-tools  
sudo systemctl enable --now qemu-guest-agent  
  1. 配置静态 IP(示例):
bash 复制代码
nmcli con mod ens18 ipv4.addresses 192.168.10.101/24  
nmcli con mod ens18 ipv4.gateway 192.168.10.1  
nmcli con mod ens18 ipv4.dns "8.8.8.8 114.114.114.114"  
nmcli con mod ens18 ipv4.method manual  
nmcli con up ens18  
  1. 更新系统并清理:
bash 复制代码
sudo yum update -y  
sudo yum clean all  
  1. 关机后在 PVE Web 上右键 VM → 转换为模板

3.2 快速克隆多个 CentOS 实例

  1. 右键模板 tmpl-centos7克隆
  2. 设置:
  • VM ID:依次递增 2010, 2011, ...
  • 名称:centos-docker-01
  • 选择 完整克隆链接克隆(使用 Ceph/ZFS 建议链接克隆)
  1. 克隆完成后启动 VM,修改主机名与 IP:
bash 复制代码
sudo hostnamectl set-hostname centos-docker-01  
nmcli con mod ens18 ipv4.addresses 192.168.10.110/24  
nmcli con mod ens18 ipv4.gateway 192.168.10.1  
nmcli con up ens18  

3.3 安装 Docker CE(CentOS)

bash 复制代码
sudo yum install -y yum-utils device-mapper-persistent-data lvm2  
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo  
sudo yum install -y docker-ce docker-ce-cli containerd.io  
sudo mkdir -p /etc/docker  
cat <<'EOF' | sudo tee /etc/docker/daemon.json  
{  
"registry-mirrors": [  
"https://docker.m.daocloud.io",  
"https://hub-mirror.c.163.com"  
],  
"exec-opts": ["native.cgroupdriver=systemd"],  
"log-driver": "json-file",  
"log-opts": {  
"max-size": "100m"  
},  
"storage-driver": "overlay2"  
}  
EOF  
sudo systemctl enable --now docker  
sudo usermod -aG docker $USER  

提示 :批量节点可通过 cloud-initAnsible 推送上述配置。


4. 部署 Ubuntu + Docker 用于 Kubernetes

4.1 创建 Ubuntu 虚拟机

  1. 新建 VM(示例 ID:3001,名称 ubuntu-master),参数:
  • CPU:6 cores
  • 内存:16 GB
  • 磁盘:64 GB
  • 网络:vmbr0(管理),必要时添加第二块网卡 vmbr1
  1. 安装 Ubuntu Server 22.04,开启 OpenSSH Server 组件。
  2. 配置静态 IP(netplan):
bash 复制代码
sudo nano /etc/netplan/01-netcfg.yaml  

示例:

yaml 复制代码
network:  
version: 2  
renderer: networkd  
ethernets:  
ens18:  
addresses:  
- 192.168.10.120/24  
gateway4: 192.168.10.1  
nameservers:  
addresses: [8.8.8.8, 223.5.5.5]  

应用:sudo netplan apply

4.2 安装 Docker CE(Ubuntu)

bash 复制代码
sudo apt update  
sudo apt install -y ca-certificates curl gnupg lsb-release  
sudo mkdir -p /etc/apt/keyrings  
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg  
echo \  
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \  
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null  
sudo apt update  
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin  
sudo systemctl enable --now docker  
sudo usermod -aG docker $USER  

5. 使用 kubeadm 构建 K8s 集群

建议使用 Ubuntu 节点作为控制平面;工作节点可选择 CentOS 或 Ubuntu。以下示例:1 Master + 2 Worker。

5.1 节点规划

角色 主机名 IP 系统
Master k8s-master-01 192.168.10.120 Ubuntu 22.04
Worker 01 k8s-worker-01 192.168.10.130 CentOS 7/Stream
Worker 02 k8s-worker-02 192.168.10.131 CentOS 7/Stream

5.2 通用系统设置

bash 复制代码
sudo swapoff -a  
sudo sed -i '/ swap / s/^/#/' /etc/fstab  
sudo modprobe br_netfilter  
cat <<'EOF' | sudo tee /etc/modules-load.d/k8s.conf  
br_netfilter  
EOF  
cat <<'EOF' | sudo 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  
sudo sysctl --system  

5.3 安装容器运行时(containerd)

Kubernetes 官方推荐使用 containerd。可沿用 Docker 安装包内的 containerd,或单独安装。

bash 复制代码
sudo mkdir -p /etc/containerd  
containerd config default | sudo tee /etc/containerd/config.toml  
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml  
sudo systemctl restart containerd  
sudo systemctl enable containerd  

5.4 安装 Kubernetes 组件

在 Ubuntu 节点:
bash 复制代码
sudo apt update  
sudo apt install -y apt-transport-https ca-certificates curl  
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg  
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | \  
sudo tee /etc/apt/sources.list.d/kubernetes.list  
sudo apt update  
sudo apt install -y kubelet kubeadm kubectl  
sudo apt-mark hold kubelet kubeadm kubectl  
在 CentOS 节点:
bash 复制代码
cat <<'EOF' | sudo tee /etc/yum.repos.d/kubernetes.repo  
[kubernetes]  
name=Kubernetes  
baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/  
enabled=1  
gpgcheck=1  
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.key  
EOF  
sudo yum install -y kubelet kubeadm kubectl  
sudo systemctl enable --now kubelet  

注意:保持所有节点的 kubelet/kubeadm/kubectl 版本一致。

5.5 初始化控制平面

在 Master 节点执行:

bash 复制代码
sudo kubeadm init \  
--apiserver-advertise-address=192.168.10.120 \  
--pod-network-cidr=10.244.0.0/16 \  
--service-cidr=10.96.0.0/12  

初始化完成后,按提示配置 kubectl

bash 复制代码
mkdir -p $HOME/.kube  
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config  
sudo chown $(id -u):$(id -g) $HOME/.kube/config  

5.6 安装网络插件(Flannel 示例)

bash 复制代码
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml  

5.7 加入 Worker 节点

在每个 Worker 上执行 Master 输出的 kubeadm join 命令(如丢失可重新生成):

bash 复制代码
sudo kubeadm token create --print-join-command  

执行后检查集群状态:

bash 复制代码
kubectl get nodes  
kubectl get pods -A  

6. Docker / Kubernetes 常见运维

  • 镜像加速 :在 /etc/docker/daemon.json/etc/containerd/config.toml 中配置国内镜像。
  • 权限管理 :创建 docker 组,使用 sudo usermod -aG docker username
  • 日志轮转 :Docker 自带 json-file 日志,必要时结合 logrotate
  • 资源控制 :在 PVE 中设定 CPU/内存限制,K8s 中使用 LimitRange/ResourceQuota
  • 备份
  • VM:使用 PVE 备份 功能到 NFS/Ceph。
  • 集群:使用 velero/etcdctl snapshot
  • 升级策略
  • PVE:每季度计划升级;确保订阅源稳定。
  • Docker:先测试环境节点后生产;遵循 docker-ce LTS。
  • K8s:按小版本滚动升级,先控制平面再工作节点。

7. 常见问题排查

问题 可能原因 解决建议
VM 网络不通 虚拟交换机未绑定物理口、VLAN 配置缺失 核对 vmbr 绑定与上联交换机 VLAN
克隆 VM 后 IP 冲突 未修改 ifcfg/netplan MAC/IP 克隆后立即变更 MAC 或重启获取 DHCP
Docker 启动失败 cgroup 驱动不匹配 确保 systemd,配置 daemon.json
kubeadm 初始化失败 swap 未关闭、端口被占用 swapoff -a,检查 644310250 等端口
节点 NotReady 网络插件异常 重装 CNI,检查 kube-flannel Pod 日志

8. 批量自动化建议

  • Ansible :编写 playbook 批量安装 Docker/K8s,维护 inventory
  • Cloud-Init :使用 cloud-init 模板,减少克隆后手工步骤。
  • Packer:自动构建 VM 模板,结合 PVE API 批量部署。
  • CI/CD:将 YAML 清单、Ansible Playbooks 存入 Git,使用 GitLab CI/Argo CD 自动化。

9. 附录

9.1 常用命令速查

bash 复制代码
# PVE CLI 创建 VM 示例  
qm create 2010 --name centos-docker-01 --memory 8192 --cores 4 --net0 virtio,bridge=vmbr0  
qm importdisk 2010 centos.qcow2 local-lvm  
qm set 2010 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-2010-disk-0  
qm set 2010 --boot c --bootdisk scsi0  
qm set 2010 --ide2 local:iso/CentOS-7-x86_64-Minimal.iso,media=cdrom  
  
# PVE 克隆  
qm clone 2001 2011 --name centos-docker-02 --full  
  
# 管理 VM  
qm start 2010  
qm stop 2010  
qm status 2010  
  
# Docker 常用  
docker info  
docker ps -a  
docker system df  
  
# Kubernetes 常用  
kubectl get nodes -o wide  
kubectl get pods -A  
kubectl describe node k8s-worker-01  

9.2 端口与服务

  • PVE Web:8006
  • SSH:22
  • Docker API:2375(禁用或限制)
  • Kubernetes:
  • API Server:6443
  • kubelet:10250
  • NodePort:30000-32767

10. 维护与安全建议

  • 定期更新 PVE 与虚拟机系统;配置企业级镜像源。
  • 使用防火墙(PVE iptables/pf、K8s NetworkPolicy)。
  • 为 Docker Registry 配置 HTTPS 与鉴权;避免默认 latest 标签。
  • 启用 PVE 备份(快照 + 定时备份),并测试恢复流程。
  • K8s 集群启用 RBAC、审计日志;定期轮换证书。
  • 监控:部署 Prometheus + GrafanaLoki,结合 PVE 自带监控。

11. PVE Web 前端操作手册(初学者版)

《基于 PVE8.1 快速搭建 K8s 集群》

11.1 登录与界面认识

  1. 浏览器访问 https://<PVE主机IP>:8006,选择登录域 Linux PAM standard authentication,使用 root@pam 或授权账户登录。
  2. 左侧 数据中心 树展示所有节点与虚拟资源;右侧为详细面板。
  3. 顶部状态栏:
  • 搜索:快速定位 VM / 存储。
  • Shell:打开节点 CLI。
  • 帮助:查看官方文档。
  1. 常用面板:
  • 概览:资源使用、订阅状态。
  • 任务历史:实时查看正在执行的操作(创建 VM、备份等)。

11.2 Web 前端基础配置

  • 订阅源切换 :在 节点 → Shell 执行本文第 2.1 节命令,或在 Shell 面板直接粘贴。
  • 时区与时间节点 → 系统 → 时间,同步 NTP 服务器(如 ntp.aliyun.com)。
  • 网络桥配置
  1. 节点 → 系统 → 网络 → 创建 → Linux Bridge
  2. 设置名称(例:vmbr1)、绑定物理网卡、是否配置 VLAN。
  3. 点击 应用配置,系统提示重启网络,确认即可。

11.3 ISO / 容器模板管理

  1. 选中 数据中心 → 存储 → local
  2. 切换到 内容 标签:
  • 上传:选择 CentOS / Ubuntu ISO。
  • 模板:可下载官方 LXC 模板,如 centos-7-default_20240625_amd64.tar.xz
  1. 上传进度可在右上角任务栏查看,如失败可点进日志排错。

11.4 创建 KVM 虚拟机(以 CentOS 为例)

  1. 选中目标节点 → 点击右上 创建虚拟机
  2. 常规 :填写 VM ID、名称(例:centos-docker-01),可选备注。
  3. 操作系统 :选择已上传的 ISO;Guest OSLinux
  4. 系统 :BIOS 选 OVMF (UEFI) 或默认 SeaBIOS;勾选 Qemu Agent
  5. 磁盘总线/设备 建议 SCSI,存储选 local-lvm,勾选 精简 节省空间。
  6. CPU :类型选 host,分配核心数(例:2)。
  7. 内存:设置动态内存(例:最小 2 GB,最大 4 GB),也可关闭气球内存固定值。
  8. 网络 :模型选 VirtIO (paravirtualized),桥接 vmbr0
  9. 确认 :检查配置后点击 完成,等待任务完成。
  10. 在 VM 页面点击 控制台,选择 noVNCSPICE 进入安装界面。

11.5 创建 LXC 容器(可用于轻量 Docker 节点)

  1. 选中节点 → 创建 LXC
  2. 填写容器 ID、主机名,勾选 无密码 并上传 SSH 公钥或设置密码。
  3. 选择模板(例:ubuntu-22.04-standard_20240715_amd64.tar.zst)。
  4. 配置根磁盘大小(例:20 GB)、CPU/内存限制。
  5. 网络设置:桥接到 vmbr0,指派 IPv4(DHCP/静态)。
  6. 确认创建后,即可在容器内使用 Docker(二进制安装或 apt/yum)。

11.6 虚拟机前端常规操作

  • 启动/关闭/重启 :选中 VM → 摘要 页面左上操作按钮。
  • 快照
  1. 快照 标签 → 拍摄,填写描述。
  2. 可选择 包含内存(用于热备份),容量大时谨慎使用。
  3. 还原 会恢复到快照状态,注意可能导致未写入数据丢失。
  • 克隆
  1. 选中模板或现有 VM → 更多克隆
  2. 选择 完整克隆(独立磁盘)或 链接克隆(共享基础镜像)。
  3. 创建后记得修改网卡 MAC 或操作系统内部 IP。
  • 迁移 :在多节点环境可通过 迁移 按钮在线迁移 VM 至其他节点。

11.7 Docker / K8s 节点的 GUI 辅助操作

  • 上传 SSH 密钥数据中心 → 权限 → SSH 密钥,方便在 Web Console 内一键登录。
  • 资源监控节点 → 摘要VM → 监控 可查看实时 CPU/内存/磁盘/网络曲线。
  • 备份与还原
  1. 数据中心 → 备份 创建备份任务,选择存储(如 NFS)。
  2. 支持 停止模式(关机快照)或 快照模式(需启用 Qemu Agent)。
  3. 恢复时在目标节点 更多 → 恢复 选择备份文件。
  • 调度任务数据中心 → 任务计划,可设定定时备份、快照、更新等操作。

11.8 常见前端操作问题

症状 处理建议
Web 无法访问 检查浏览器证书、宿主防火墙,必要时重启 pveproxysystemctl restart pveproxy
上传 ISO 失败 确认存储剩余空间、网络稳定,查看任务日志(右上角)
控制台黑屏 切换 noVNC/SPICE,或在 VM 选项 中启用 显卡、确认 OS 安装完成
克隆后网络异常 在 OS 内重置 udev 网卡规则、重新配置 IP,或删除旧的 ifcfg 文件

文档建议结合企业内部 IP、账号、存储、网络实际情况进行二次调整,并与变更管理流程同步。

相关推荐
Main121382 小时前
JDK 8 Stream API 教程文档
后端
火山引擎开发者社区2 小时前
Vibe Coze-企业 AI 应用赛道开启
后端
百锦再2 小时前
大型省级政务平台采用金仓数据库(KingbaseES)
开发语言·数据库·后端·rust·eclipse
m0_639817152 小时前
基于springboot个人云盘管理系统【带源码和文档】
java·spring boot·后端
NUllPOINTEXCEPTION3 小时前
MyBatis-Plus 开发指北
后端
bcbnb3 小时前
没有 Mac,如何上架 iOS App?跨平台开发者的完整上架实战指南
后端
ZhengEnCi3 小时前
P3E-Python Lambda表达式完全指南-什么是匿名函数?为什么90%程序员都在用?怎么快速掌握函数式编程利器?
后端·python
爱分享的鱼鱼3 小时前
Java基础 (七:网络编程、HTTP客户端开发)(待完善)
后端
aiopencode4 小时前
iOS WebKit Debug Proxy 深度解析与替代方案,跨平台远程调试的新思路
后端