windows使用VMware搭建Kubernetes v1.34集群

一. 准备工作

  • VMware Pro 17 免费, 官网可下载
  • Ubuntu 24.04.3 LTS server版,官网可下载
  • Windows宿主机科学上网(梯子), 随便什么,推荐clash系列

二、环境拓扑

hostnameipmac地址
ci192.168.2.10800:0C:29:39:6B:54
db192.168.2.10900:0C:29:8E:CF:4F
mater192.168.2.10100:0C:29:01:F7:E7
register192.168.2.10200-0C-29-F4-D3-62
worker1192.168.2.10400-0C-29-0F-F7-92
worker2192.168.2.10600-0C-29-1F-6E-99

创建6台虚拟机, 固定mac地址, 网络设置为桥接模式, 路由器网关可以设置为192.168.2.1,给mac地址设置ip, 或者使用自动生成ip, 后面全部映射替换为自动生成的ip

三、所有节点的基础初始化(先做这个)

1. 更新系统

sudo apt update -y && sudo apt upgrade -y

2.关闭 swap

sudo swapoff -a
sudo sed -i '/swap/d' /etc/fstab

3.设置主机名(示例)

sudo hostnamectl set-hostname master   # 其他节点改成各自的名字

4.编辑 hosts 文件

sudo tee /etc/hosts <<EOF
192.168.2.101 master
192.168.2.104 worker1
192.168.2.106 worker2
192.168.2.108 ci
192.168.2.102 register
192.168.2.109 db
EOF

5.启动网桥 和IPv4 数据包转发

# 设置开机自动加载内核模块 (持久化)
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# 设置 Sysctl 参数 (持久化,系统开机会自动读取这个文件)
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

6. 修改最大文件描述符

sudo tee -a /etc/security/limits.conf <<'EOF'
* soft nofile 65535
* hard nofile 65535
EOF
sudo sed -i 's/^#\?DefaultLimitNOFILE=.*/DefaultLimitNOFILE=65535/' /etc/systemd/system.conf || echo 'DefaultLimitNOFILE=65535' | sudo tee -a /etc/systemd/system.conf && sudo systemctl daemon-reexec

四、代理配置

1. 终端设置代理(安装之前必须执行),192.168.2.107替换为宿主机ip, 宿主机需开启科学上网代理。其他节点ip若有改变也需要替换

export http_proxy=http://192.168.2.107:7897
export https_proxy=http://192.168.2.107:7897
export HTTP_PROXY=http://192.168.2.107:7897
export HTTPS_PROXY=http://192.168.2.107:7897
export no_proxy=127.0.0.1,localhost,192.168.2.101,192.168.2.102,192.168.2.104,192.168.2.106,192.168.2.108,192.168.2.109

2.虚拟机扩展磁盘,vmware 上增加虚拟机磁盘后,执行以下命令是扩展磁盘在虚拟机里生效

## 虚拟机扩展磁盘后
# 1️⃣ 打印当前分区表,确认 sda3 起始扇区
sudo fdisk -l /dev/sda

# 2️⃣ 删除并重新创建 sda3 分区,占满剩余空间
sudo bash -c '
(
echo d   # 删除分区
echo 3   # 选择分区3
echo n   # 新建分区
echo p   # 主分区
echo 3   # 分区号3
echo   # 起始扇区 默认保持原位(非常关键!)
echo   # 结束扇区 默认占满
echo t   # 设置类型
echo 3   # 分区3
echo 8e  # Linux LVM
echo w   # 写入并退出
) | fdisk /dev/sda
'

# 3️⃣ 扫描内核分区变化(不重启)
sudo partprobe /dev/sda

# 4️⃣ 扩展物理卷 PV
sudo pvresize /dev/sda3

# 5️⃣ 扩展逻辑卷 LV 占满 PV
sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv

# 6️⃣ 扩展文件系统
sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

# 7️⃣ 验证
lsblk
df -h /

五、安装docker(需终端设置代理)

1.运行以下命令卸载所有冲突的软件包

sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc | cut -f1) -y

2.使用apt存储库进行安装,在新主机上首次安装 Docker Engine 之前,需要先设置 Dockerapt仓库。之后,就可以从该仓库安装和更新 Docker 了。

# Add Docker's official GPG key:
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update

3.安装 Docker 软件包,要安装最新版本,请运行:

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

4.配置 containerd 使用代理,192.168.2.107替换为宿主机ip, 宿主机需开启科学上网代理。其他节点ip若有改变也需要替换

# 创建 systemd 覆盖配置:
sudo mkdir -p /etc/systemd/system/containerd.service.d
sudo tee /etc/systemd/system/containerd.service.d/http-proxy.conf <<EOF
[Service]
Environment="HTTP_PROXY=http://192.168.2.107:7897"
Environment="HTTPS_PROXY=http://192.168.2.107:7897"
Environment="NO_PROXY=127.0.0.1,localhost,192.168.2.101,192.168.2.102,192.168.2.104,192.168.2.106,192.168.2.108,192.168.2.109"
EOF
# 重新加载 systemd 并重启 containerd:
sudo systemctl daemon-reexec
sudo systemctl restart containerd

5.配置 containerd使用 systemd cgroup 驱动, 安装k8s需要, 以下文件需要使用vi 编辑器替换,不能命令执行

# 生成默认配置
containerd config default > ~/config.toml
sudo mv ~/config.toml /etc/containerd/config.toml
# 然后根据需要修改,确保:
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
  # 确保使用 systemd cgroup 驱动
  SystemdCgroup = true

# 覆盖沙盒(暂停)图像 您可以在containerd 配置中通过设置以下配置来覆盖沙箱镜像:
[plugins."io.containerd.grpc.v1.cri"]
  sandbox_image = "registry.k8s.io/pause:3.10"

# 然后重启 containerd:
sudo systemctl restart containerd
# 检查 containerd 是否正常运行:
sudo systemctl status containerd

六、安装Kubernetes v1.34

1.安装kubeadm 及相关工具,这些说明适用于 Kubernetes v1.34,更新apt软件包索引并安装使用 Kubernetesapt存储库所需的软件包:

sudo apt-get update -y
# apt-transport-https may be a dummy package; if so, you can skip that package
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
# 下载 Kubernetes 软件包仓库的公钥。所有仓库都使用同一个签名密钥,因此您可以忽略 URL 中的版本号:

# If the directory `/etc/apt/keyrings` does not exist, it should be created before the curl command, read the note below.
# sudo mkdir -p -m 755 /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.34/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

# 添加相应的 Kubernetesapt仓库。请注意,此仓库仅包含 Kubernetes 1.34 的软件包;对于其他 Kubernetes 次要版本,您需要将 URL 中的 Kubernetes 次要版本更改为您所需的次要版本(您还应该检查您是否正在阅读计划安装的 Kubernetes 版本的文档)。

# This overwrites any existing configuration in /etc/apt/sources.list.d/kubernetes.list
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.34/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

# 更新apt软件包索引,安装 kubelet、kubeadm 和 kubectl,并锁定它们的版本:
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

# 可选)在运行 kubeadm 之前启用 kubelet 服务:
sudo systemctl enable --now kubelet

2.使用kubeadm安装初始化控制平面节点,apiserver-advertise-address为控制节点ip(仅控制节点执行)

sudo kubeadm init \
--kubernetes-version=v1.34.2 \
--pod-network-cidr=10.244.0.0/16 \
--apiserver-advertise-address=192.168.2.101 \
--cri-socket=unix:///var/run/containerd/containerd.sock \
--ignore-preflight-errors=all

3.要让 kubectl 以非 root 用户身份运行,请运行以下命令(这些命令也包含在kubeadm init输出中), 其他节点使用kubectl , 可以使用scp把admin.conf copy到本地节点

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
或者,如果您是root用户,您可以运行:

export KUBECONFIG=/etc/kubernetes/admin.conf

4. 部署 CNI 网络插件(仅控制节点执行)

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

5. 可选配置

5.1控制平面节点隔离,默认情况下,出于安全考虑,您的集群不会将 Pod 调度到控制平面节点上。如果您希望能够将 Pod 调度到控制平面节点上(例如,对于单机 Kubernetes 集群),请运行:

kubectl taint nodes --all node-role.kubernetes.io/control-plane-

5.2提高单节点 Pod 上限(推荐)默认110

# 修改 kubelet 配置
sudo vi /var/lib/kubelet/config.yaml
找到或添加:
maxPods: 250
# 重启 kubelet
sudo systemctl daemon-reexec
sudo systemctl restart kubelet
# 验证
kubectl describe node | grep -i pod
你应该看到:
pods: 250

七、添加工作节点

要向集群添加新的 Linux 工作节点,请对每台机器执行以下操作:使用 SSH 或其他方法连接到机器。运行输出的命令kubeadm init。例如:

sudo kubeadm join --token <token> <control-plane-host>:<control-plane-port> --discovery-token-ca-cert-hash sha256:<hash>

有关 kubeadm join 的附加信息,如果您没有令牌,可以通过在控制平面节点上运行以下命令来获取:

# Run this on a control plane node

sudo kubeadm token list

默认情况下,节点加入令牌会在 24 小时后过期。如果当前令牌已过期,则需要将节点加入集群,您可以在控制平面节点上运行以下命令来创建新令牌:

# Run this on a control plane node

sudo kubeadm token create

输出结果类似于这样:

5didvk.d09sbcov8ph2amjw

要打印 kubeadm join 命令并同时生成新令牌,可以使用以下命令:

sudo kubeadm token create --print-join-command

如果您没有该值–discovery-token-ca-cert-hash,可以通过在控制平面节点上运行以下命令来获取它:

# Run this on a control plane node

sudo cat /etc/kubernetes/pki/ca.crt | openssl x509 -pubkey  | openssl rsa -pubin -outform der 2>/dev/null | \

   openssl dgst -sha256 -hex | sed 's/^.* //'

输出结果类似于:

8cb2de97839780a412b93877f8507ad6c94f73add17d5d7058e91741c9d5ec78

该命令的输出结果kubeadm join应该类似于:

[preflight] Running pre-flight checks

... (log output of join workflow) ...

Node join complete:

* Certificate signing request sent to control-plane and response

  received.

* Kubelet informed of new secure connection details.

Run 'kubectl get nodes' on control-plane to see this machine join.

几秒钟后,您应该会在输出中看到这个节点kubectl get nodes。(例如,kubectl在控制平面节点上运行)。

zerry

《windows使用VMware搭建Kubernetes v1.34集群》有一个想法

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注