PVE 环境最小化 Kubernetes + KubeSphere 测试环境搭建指南
目录
- 环境规划
- 1.1 推荐资源配置(基于32GB物理内存)
- 1.2 网络规划
- 虚拟机配置要求
- 2.1 PVE 虚拟机配置参数
- 2.2 网卡和硬盘分配说明
- 2.3 Ubuntu 系统安装要点
- 系统初始化
- 使用 KubeKey 部署 Kubernetes + KubeSphere
- 4.1 安装 KubeKey
- 4.2 创建集群配置文件
- 4.3 部署集群
- 4.4 验证部署
- KubeSphere 访问配置
- 5.1 安装 KubeSphere
1. 环境规划
1.1 推荐资源配置(基于32GB物理内存)
单节点配置(学习测试)
- CPU: 8 核心
- 内存: 24GB
- 存储: 120GB
- 网络: 2 个网卡(外网 + 内网)
三节点配置(推荐配置)
节点角色 | 主机名 | 外网IP | 内网IP | CPU | 内存 | 存储 |
---|---|---|---|---|---|---|
Master | k8s-master | 192.168.199.180 | 10.123.123.180 | 4C | 10GB | 120GB |
Worker1 | k8s-node1 | 192.168.199.181 | 10.123.123.181 | 4C | 10GB | 120GB |
Worker2 | k8s-node2 | 192.168.199.182 | 10.123.123.182 | 4C | 10GB | 120GB |
1.2 网络规划
网络配置:
外网网段: 192.168.199.0/24 # 用于外部访问和管理
内网网段: 10.123.123.0/24 # 用于集群内部通信
Pod CIDR: 10.244.0.0/16 # Pod 网络段
Service CIDR: 10.96.0.0/12 # Service 网络段
DNS: 8.8.8.8, 114.114.114.114
2. 虚拟机配置要求
2.1 PVE 虚拟机配置参数
三节点配置示例
# Master 节点配置
VM ID: 100
名称: k8s-master
CPU: 4核心
内存: 10GB (10240MB)
网卡1: virtio,bridge=vmbr0 (外网 - 192.168.199.180)
网卡2: virtio,bridge=vmbr1 (内网 - 10.123.123.180)
硬盘1: 40GB (系统盘)
硬盘2: 80GB (数据盘)
# Worker1 节点配置
VM ID: 101
名称: k8s-node1
CPU: 4核心
内存: 10GB (10240MB)
网卡1: virtio,bridge=vmbr0 (外网 - 192.168.199.181)
网卡2: virtio,bridge=vmbr1 (内网 - 10.123.123.181)
硬盘1: 40GB (系统盘)
硬盘2: 80GB (数据盘)
# Worker2 节点配置
VM ID: 102
名称: k8s-node2
CPU: 4核心
内存: 10GB (10240MB)
网卡1: virtio,bridge=vmbr0 (外网 - 192.168.199.182)
网卡2: virtio,bridge=vmbr1 (内网 - 10.123.123.182)
硬盘1: 40GB (系统盘)
硬盘2: 80GB (数据盘)
2.2 网卡和硬盘分配说明
网卡配置
- 网卡1 (ens18): 连接外网网桥 vmbr0,用于管理访问和外部通信
- 网卡2 (ens19): 连接内网网桥 vmbr1,用于集群内部通信
硬盘分配
- 系统盘 (40GB): 操作系统、基础软件和系统服务
- 数据盘 (80GB): 容器存储、应用数据和持久化存储
存储分区建议
# 系统盘分区 (40GB) - Kubernetes环境优化
/boot -> 1GB # 引导分区
/ -> 39GB # 根分区(不配置swap分区)
# 数据盘分区 (80GB)
/data -> 全部 # 容器和应用数据
# 注意:Kubernetes要求关闭swap,因此不建议创建swap分区
# 如果系统自动创建了swap,会在系统初始化时关闭
2.3 Ubuntu 系统安装要点
系统版本
- 推荐版本: Ubuntu 22.04.5 LTS (Jammy Jellyfish)
- 下载地址: https://releases.ubuntu.com/22.04.5/
安装配置
- 语言: English
- 键盘: English (US)
- 网络: 配置静态 IP(双网卡)
- 存储: 手动分区或使用整个磁盘
- 用户: 创建 k8s 用户
- SSH: 安装 OpenSSH server
- 软件: 不安装额外软件
双网卡网络配置示例
# /etc/netplan/00-installer-config.yaml
# Master 节点配置示例
network:
version: 2
ethernets:
# 外网网卡 (管理和外部访问)
ens18:
addresses:
- 192.168.199.180/24
gateway4: 192.168.199.1
nameservers:
addresses:
- 8.8.8.8
- 114.114.114.114
# 内网网卡 (集群内部通信)
ens19:
addresses:
- 10.123.123.180/24
# Worker1 节点配置示例
# ens18: 192.168.199.181/24
# ens19: 10.123.123.181/24
# Worker2 节点配置示例
# ens18: 192.168.199.182/24
# ens19: 10.123.123.182/24
应用网络配置
# 应用配置
sudo netplan apply
# 验证网络配置
ip addr show
ping -c 3 192.168.199.1 # 测试外网网关
ping -c 3 10.123.123.181 # 测试内网通信(如果其他节点已配置)
3. 系统初始化
执行节点: 所有节点(Master + Worker)
3.1 更换软件源
# 备份原始源文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
# 更换为中科大镜像源
sudo tee /etc/apt/sources.list <<EOF
# 中科大Ubuntu 22.04 LTS镜像源
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
EOF
# 更新软件包索引
sudo apt update
3.2 安装必要软件
# 安装基础工具
sudo apt install -y curl wget vim net-tools htop tree git
# 安装时间同步工具
sudo apt install -y chrony
3.3 配置主机名和 hosts
# 设置主机名(根据节点类型选择)
# Master 节点执行:
sudo hostnamectl set-hostname k8s-master
# Worker1 节点执行:
# sudo hostnamectl set-hostname k8s-node1
# Worker2 节点执行:
# sudo hostnamectl set-hostname k8s-node2
# 配置 hosts 文件(所有节点都执行)
sudo tee -a /etc/hosts <<EOF
# 外网地址(管理访问)
192.168.199.180 k8s-master-ext
192.168.199.181 k8s-node1-ext
192.168.199.182 k8s-node2-ext
# 内网地址(集群通信)
10.123.123.180 k8s-master k8s-master-int
10.123.123.181 k8s-node1 k8s-node1-int
10.123.123.182 k8s-node2 k8s-node2-int
EOF
3.4 关闭 swap
# 关闭当前 swap
sudo swapoff -a
# 永久禁用 swap(注释 fstab 中的 swap 行)
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# 验证 swap 已关闭
free -h
3.5 加载内核模块
# 创建内核模块配置文件
sudo tee /etc/modules-load.d/k8s.conf <<EOF
overlay
br_netfilter
EOF
# 立即加载模块
sudo modprobe overlay
sudo modprobe br_netfilter
# 验证模块已加载
lsmod | grep overlay
lsmod | grep br_netfilter
3.6 配置内核参数
# 创建内核参数配置文件
sudo tee /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
# 应用内核参数
sudo sysctl --system
# 验证参数已生效
sudo sysctl net.bridge.bridge-nf-call-iptables
sudo sysctl net.bridge.bridge-nf-call-ip6tables
sudo sysctl net.ipv4.ip_forward
3.7 配置时间同步
# 设置时区
sudo timedatectl set-timezone Asia/Shanghai
# 启动并启用 chrony 服务
sudo systemctl enable chrony
sudo systemctl start chrony
# 检查时间同步状态
sudo chrony sources -v
timedatectl status
3.8 配置防火墙
# 关闭防火墙(测试环境)
sudo ufw disable
# 检查防火墙状态
sudo ufw status
3.9 存储配置优化
执行节点: 所有节点(Master + Worker)
# 创建数据目录
sudo mkdir -p /data/{containerd,kubelet,etcd,backup}
sudo mkdir -p /opt/kubesphere
# 配置 containerd 数据目录
sudo mkdir -p /etc/containerd
# 配置 kubelet 数据目录
sudo mkdir -p /data/kubelet
echo 'KUBELET_EXTRA_ARGS="--root-dir=/data/kubelet"' | sudo tee /etc/default/kubelet
# 设置目录权限
sudo chown -R root:root /data
sudo chmod -R 755 /data
# 验证目录创建
ls -la /data/
ls -la /opt/
4. 使用 KubeKey 部署 Kubernetes + KubeSphere
执行节点: Master 节点(部署机)
4.1 安装 KubeKey
# 安装 KubeKey
# 执行节点: Master 节点
# 下载 KubeKey
export KKZONE=cn
export VERSION=v3.1.10
curl -sfL https://get-kk.kubesphere.io | sh -
如果上面下载不了就先下载downloadKubekey.sh之后再手动执行sh
wget https://github.com/kubesphere/kubekey/releases/download/v1.1.0/downloadKubekey.sh
sudo apt install mblaze -y
sh downloadKubekey.sh
# 添加执行权限
chmod +x kk
# 移动到系统路径
sudo mv kk /usr/local/bin/
# 验证安装
kk version
4.2 创建集群配置文件
# 执行节点: Master 节点
# 生成配置文件
kk create config -f k8s-v1331.yaml --with-kubernetes v1.33.1
# 修改配置文件
cat > k8s-v1331.yaml <<EOF
apiVersion: kubekey.kubesphere.io/v1alpha2
kind: Cluster
metadata:
name: sample
spec:
hosts:
- {name: k8s-master, address: 192.168.199.180, internalAddress: 10.123.123.180, user: wengtx, password: "密码"}
- {name: k8s-node1, address: 192.168.199.181, internalAddress: 10.123.123.181, user: wengtx, password: "密码"}
- {name: k8s-node2, address: 192.168.199.182, internalAddress: 10.123.123.182, user: wengtx, password: "密码"}
roleGroups:
etcd:
- k8s-master
control-plane:
- k8s-master
worker:
- k8s-node1
- k8s-node2
controlPlaneEndpoint:
## Internal loadbalancer for apiservers
# internalLoadbalancer: haproxy
domain: lb.kubesphere.local
address: ""
port: 6443
kubernetes:
version: v1.33.1
clusterName: cluster.local
autoRenewCerts: true
containerManager: containerd
etcd:
type: kubekey
network:
plugin: calico
kubePodsCIDR: 10.233.64.0/18
kubeServiceCIDR: 10.233.0.0/18
## multus support. https://github.com/k8snetworkplumbingwg/multus-cni
multusCNI:
enabled: false
registry:
privateRegistry: ""
namespaceOverride: ""
registryMirrors: []
insecureRegistries: []
addons: []
EOF
4.3 部署集群
# 执行节点: 所有节点
sudo apt install socat conntrack ebtables ipset -y
# 执行节点: Master 节点
# 部署集群
kk create cluster -f k8s-v1331.yaml
4.4 验证部署
# 执行节点: Master 节点
# 检查节点
kubectl get nodes -o wide
kubectl get pods -A
5. KubeSphere 访问配置
执行节点: Master 节点
5.1 安装 KubeSphere
curl -k --resolve raw.githubusercontent.com:443:185.199.108.133 https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# 在集群节点,执行以下命令安装 KubeSphere Core。
helm upgrade --install -n kubesphere-system --create-namespace ks-core https://charts.kubesphere.io/main/ks-core-1.1.4.tgz --debug --wait --set global.imageRegistry=swr.cn-southwest-2.myhuaweicloud.com/ks --set extension.imageRegistry=swr.cn-southwest-2.myhuaweicloud.com/ks