跳到主要内容

PVE 环境最小化 Kubernetes + KubeSphere 测试环境搭建指南

目录

  1. 环境规划
  2. 虚拟机配置要求
  3. 系统初始化
  4. 使用 KubeKey 部署 Kubernetes + KubeSphere
  5. KubeSphere 访问配置

1. 环境规划

1.1 推荐资源配置(基于32GB物理内存)

单节点配置(学习测试)

  • CPU: 8 核心
  • 内存: 24GB
  • 存储: 120GB
  • 网络: 2 个网卡(外网 + 内网)

三节点配置(推荐配置)

节点角色主机名外网IP内网IPCPU内存存储
Masterk8s-master192.168.199.18010.123.123.1804C10GB120GB
Worker1k8s-node1192.168.199.18110.123.123.1814C10GB120GB
Worker2k8s-node2192.168.199.18210.123.123.1824C10GB120GB

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 系统安装要点

系统版本

安装配置

  1. 语言: English
  2. 键盘: English (US)
  3. 网络: 配置静态 IP(双网卡)
  4. 存储: 手动分区或使用整个磁盘
  5. 用户: 创建 k8s 用户
  6. SSH: 安装 OpenSSH server
  7. 软件: 不安装额外软件

双网卡网络配置示例

# /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