基于 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/9ISO(官方)Ubuntu Server 22.04 LTSISO- 账号与权限 :准备至少一个有 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 创建桥接网络
- 登录 PVE Web 界面 →
数据中心→节点→系统→网络 - 创建
vmbr1作为业务网桥(如需要):
- 类型:Linux Bridge
- 物理接口:
enp3s0(示例) - IPv4/IPv6 配置:按规划填写或留空
- 应用更改并重启网络服务:
ifreload -a
3. 安装多个 CentOS + Docker
3.1 创建 CentOS 模板虚拟机
- 上传 ISO:
数据中心→存储→local→内容→上传ISO。 - 新建 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)
- 启动 VM,按常规流程安装 CentOS(Minimal)。
- 安装基础工具与 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
- 配置静态 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
- 更新系统并清理:
bash
sudo yum update -y
sudo yum clean all
- 关机后在 PVE Web 上右键 VM →
转换为模板。
3.2 快速克隆多个 CentOS 实例
- 右键模板
tmpl-centos7→克隆 - 设置:
- VM ID:依次递增
2010,2011, ... - 名称:
centos-docker-01等 - 选择
完整克隆或链接克隆(使用 Ceph/ZFS 建议链接克隆)
- 克隆完成后启动 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-init或Ansible推送上述配置。
4. 部署 Ubuntu + Docker 用于 Kubernetes
4.1 创建 Ubuntu 虚拟机
- 新建 VM(示例 ID:
3001,名称ubuntu-master),参数:
- CPU:
6 cores - 内存:
16 GB - 磁盘:
64 GB - 网络:
vmbr0(管理),必要时添加第二块网卡vmbr1
- 安装 Ubuntu Server 22.04,开启
OpenSSH Server组件。 - 配置静态 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-ceLTS。 - K8s:按小版本滚动升级,先控制平面再工作节点。
7. 常见问题排查
| 问题 | 可能原因 | 解决建议 |
|---|---|---|
| VM 网络不通 | 虚拟交换机未绑定物理口、VLAN 配置缺失 | 核对 vmbr 绑定与上联交换机 VLAN |
| 克隆 VM 后 IP 冲突 | 未修改 ifcfg/netplan MAC/IP |
克隆后立即变更 MAC 或重启获取 DHCP |
| Docker 启动失败 | cgroup 驱动不匹配 | 确保 systemd,配置 daemon.json |
| kubeadm 初始化失败 | swap 未关闭、端口被占用 | swapoff -a,检查 6443、10250 等端口 |
节点 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、K8sNetworkPolicy)。 - 为 Docker Registry 配置 HTTPS 与鉴权;避免默认
latest标签。 - 启用 PVE 备份(快照 + 定时备份),并测试恢复流程。
- K8s 集群启用 RBAC、审计日志;定期轮换证书。
- 监控:部署
Prometheus + Grafana、Loki,结合 PVE 自带监控。
11. PVE Web 前端操作手册(初学者版)
《基于 PVE8.1 快速搭建 K8s 集群》
11.1 登录与界面认识
- 浏览器访问
https://<PVE主机IP>:8006,选择登录域Linux PAM standard authentication,使用root@pam或授权账户登录。 - 左侧
数据中心树展示所有节点与虚拟资源;右侧为详细面板。 - 顶部状态栏:
搜索:快速定位 VM / 存储。Shell:打开节点 CLI。帮助:查看官方文档。
- 常用面板:
概览:资源使用、订阅状态。任务历史:实时查看正在执行的操作(创建 VM、备份等)。
11.2 Web 前端基础配置
- 订阅源切换 :在
节点 → Shell执行本文第 2.1 节命令,或在Shell面板直接粘贴。 - 时区与时间 :
节点 → 系统 → 时间,同步 NTP 服务器(如ntp.aliyun.com)。 - 网络桥配置:
节点 → 系统 → 网络 → 创建 → Linux Bridge。- 设置名称(例:
vmbr1)、绑定物理网卡、是否配置 VLAN。 - 点击
应用配置,系统提示重启网络,确认即可。
11.3 ISO / 容器模板管理
- 选中
数据中心 → 存储 → local。 - 切换到
内容标签:
上传:选择 CentOS / Ubuntu ISO。模板:可下载官方 LXC 模板,如centos-7-default_20240625_amd64.tar.xz。
- 上传进度可在右上角任务栏查看,如失败可点进日志排错。
11.4 创建 KVM 虚拟机(以 CentOS 为例)
- 选中目标节点 → 点击右上
创建虚拟机。 - 常规 :填写 VM ID、名称(例:
centos-docker-01),可选备注。 - 操作系统 :选择已上传的 ISO;
Guest OS选Linux。 - 系统 :BIOS 选
OVMF (UEFI)或默认SeaBIOS;勾选Qemu Agent。 - 磁盘 :
总线/设备建议SCSI,存储选local-lvm,勾选精简节省空间。 - CPU :类型选
host,分配核心数(例:2)。 - 内存:设置动态内存(例:最小 2 GB,最大 4 GB),也可关闭气球内存固定值。
- 网络 :模型选
VirtIO (paravirtualized),桥接vmbr0。 - 确认 :检查配置后点击
完成,等待任务完成。 - 在 VM 页面点击
控制台,选择noVNC或SPICE进入安装界面。
11.5 创建 LXC 容器(可用于轻量 Docker 节点)
- 选中节点 →
创建 LXC。 - 填写容器 ID、主机名,勾选
无密码并上传 SSH 公钥或设置密码。 - 选择模板(例:
ubuntu-22.04-standard_20240715_amd64.tar.zst)。 - 配置根磁盘大小(例:20 GB)、CPU/内存限制。
- 网络设置:桥接到
vmbr0,指派 IPv4(DHCP/静态)。 - 确认创建后,即可在容器内使用 Docker(二进制安装或 apt/yum)。
11.6 虚拟机前端常规操作
- 启动/关闭/重启 :选中 VM →
摘要页面左上操作按钮。 - 快照:
快照标签 →拍摄,填写描述。- 可选择
包含内存(用于热备份),容量大时谨慎使用。 还原会恢复到快照状态,注意可能导致未写入数据丢失。
- 克隆:
- 选中模板或现有 VM →
更多→克隆。 - 选择
完整克隆(独立磁盘)或链接克隆(共享基础镜像)。 - 创建后记得修改网卡 MAC 或操作系统内部 IP。
- 迁移 :在多节点环境可通过
迁移按钮在线迁移 VM 至其他节点。
11.7 Docker / K8s 节点的 GUI 辅助操作
- 上传 SSH 密钥 :
数据中心 → 权限 → SSH 密钥,方便在 Web Console 内一键登录。 - 资源监控 :
节点 → 摘要、VM → 监控可查看实时 CPU/内存/磁盘/网络曲线。 - 备份与还原:
数据中心 → 备份创建备份任务,选择存储(如 NFS)。- 支持
停止模式(关机快照)或快照模式(需启用 Qemu Agent)。 - 恢复时在目标节点
更多 → 恢复选择备份文件。
- 调度任务 :
数据中心 → 任务计划,可设定定时备份、快照、更新等操作。
11.8 常见前端操作问题
| 症状 | 处理建议 |
|---|---|
| Web 无法访问 | 检查浏览器证书、宿主防火墙,必要时重启 pveproxy:systemctl restart pveproxy |
| 上传 ISO 失败 | 确认存储剩余空间、网络稳定,查看任务日志(右上角) |
| 控制台黑屏 | 切换 noVNC/SPICE,或在 VM 选项 中启用 显卡、确认 OS 安装完成 |
| 克隆后网络异常 | 在 OS 内重置 udev 网卡规则、重新配置 IP,或删除旧的 ifcfg 文件 |
文档建议结合企业内部 IP、账号、存储、网络实际情况进行二次调整,并与变更管理流程同步。