Server 2019 系统 Kubernetes 集群搭建方法
Windows Server 2019 上部署 Kubernetes 集群的完整实践指南
在混合云与边缘计算场景日益普及的今天,Windows Server 2019 作为企业级稳定操作系统,已原生支持 Kubernetes 容器编排。微软自 Windows Server 2019 起正式引入容器主机增强功能,并通过 kubeadm 工具链与 containerd 运行时实现与 Linux 控制平面的无缝协作。本文将系统性地介绍如何在 Windows Server 2019 环境中搭建一个生产就绪的 Kubernetes 集群——涵盖环境准备、控制平面初始化、Windows 工作节点加入、网络插件配置及基础验证全流程,所有步骤均经实测验证,适用于物理机或虚拟化平台(如 Hyper-V、VMware)。
一、前置条件与环境准备
Kubernetes 在 Windows 上运行需满足特定约束:
- 操作系统版本必须为 Windows Server 2019(Build 17763 或更高),且已安装最新累积更新;
- 所有节点需启用 Hyper-V 与容器功能;
- 控制平面建议使用 Linux(推荐 Ubuntu 20.04 LTS),因 Windows 尚不支持运行 kube-apiserver 等核心组件;
- Windows 工作节点仅支持作为 worker 加入,不可担任 master 角色;
- 所有节点时间需严格同步(NTP 服务启用);
- 防火墙须开放必要端口:6443(API Server)、10250(kubelet)、30000–32767(NodePort)等。
执行以下 PowerShell 命令启用容器支持并重启:
# 启用容器与 Hyper-V 功能(管理员权限)
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V, Containers -All -NoRestart
Restart-Computer -Force
重启后安装 containerd 运行时(Kubernetes 1.24+ 默认运行时):
# 下载并安装 containerd(以 v1.7.18 为例)
Invoke-WebRequest -Uri "https://github.com/containerd/containerd/releases/download/v1.7.18/containerd-1.7.18-windows-amd64.tar.gz" -OutFile "$env:TEMP\containerd.tar.gz"
Expand-Archive -Path "$env:TEMP\containerd.tar.gz" -DestinationPath "$env:TEMP\containerd"
Copy-Item "$env:TEMP\containerd\containerd\*" "C:\Program Files\containerd\" -Recurse -Force
生成 containerd 配置文件:
# C:\Program Files\containerd\config.toml
version = 2
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
runtime_type = "io.containerd.runc.v2"
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://registry-1.docker.io"]
[plugins."io.containerd.grpc.v1.cri".registry.configs."https://registry-1.docker.io".tls]
insecure_skip_verify = true
启动 containerd 服务:
# 注册并启动 containerd
cd "C:\Program Files\containerd"
.\containerd.exe --register-service
Start-Service containerd
二、Linux 控制平面初始化(以 Ubuntu 20.04 为例)
在 Linux 主控节点上安装 kubeadm、kubelet 与 kubectl:
sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/kubernetes-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) 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-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
初始化集群(指定 Pod 网络 CIDR,此处采用 Calico 默认网段):
sudo kubeadm init \
--pod-network-cidr=192.168.0.0/16 \
--service-cidr=10.96.0.0/12 \
--kubernetes-version=v1.27.15
初始化成功后,按提示配置 kubectl 并部署 CNI 插件:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 部署 Calico 网络插件(v3.26)
kubectl apply -f https://docs.projectcalico.org/v3.26/manifests/calico.yaml
三、Windows 工作节点加入集群
确保 Windows 节点已安装 containerd 并正常运行后,获取 join 命令(来自 Linux 主控节点输出):
# 在 Windows 节点执行(替换实际 token 与证书哈希)
kubeadm join 192.168.1.100:6443 \
--token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \
--node-name win-node-01 \
--cri-socket "npipe:////./pipe/containerd-containerd"
若出现证书错误,可在主控节点重新生成 token:
kubeadm token create --print-join-command
加入后,在 Linux 主控节点检查节点状态:
kubectl get nodes -o wide
# 输出应包含 linux-master 和 win-node-01,STATUS 为 Ready
四、配置 Windows 特定参数与标签
为调度 Windows 工作负载,需为节点添加 OS 标签并设置污点容忍:
# 为主控节点添加 label(可选)
kubectl label node linux-master kubernetes.io/os=linux
# 为 Windows 节点添加 OS 与架构标签
kubectl label node win-node-01 kubernetes.io/os=windows kubernetes.io/arch=amd64
# 若需允许 Windows Pod 运行,移除默认污点(谨慎操作)
kubectl taint node win-node-01 node.kubernetes.io/os=windows:NoSchedule-
五、部署首个 Windows 容器应用验证
创建 win-pod.yaml 清单,声明 Windows 兼容性:
apiVersion: v1
kind: Pod
metadata:
name: iis-demo
labels:
app: iis
spec:
containers:
- name: iis
image: mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019
ports:
- containerPort: 80
nodeSelector:
kubernetes.io/os: windows
tolerations:
- key: "node.kubernetes.io/os"
operator: "Equal"
value: "windows"
effect: "NoSchedule"
部署并验证访问:
kubectl apply -f win-pod.yaml
kubectl get pods -o wide
# 等待 STATUS 变为 Running
# 获取 Pod IP 并测试连通性(需在同一网络内)
kubectl get pod iis-demo -o jsonpath='{.status.podIP}'
六、常见问题与调优建议
- 镜像拉取失败:Windows 节点需使用 Windows 兼容镜像(如
mcr.microsoft.com/*),不可混用 Linux 镜像; - 网络不通:确认 Calico Windows 插件已部署(
calico/nodeWindows 镜像需手动拉取并标记); - kubelet 启动异常:检查
C:\var\log\kubelet.err.log,常见原因包括 containerd socket 路径错误或证书过期; - 性能优化:建议关闭 Windows Defender 实时扫描
C:\Program Files\containerd与C:\var\lib\kubelet目录; - 日志集中管理:可部署 Fluent Bit DaemonSet,适配 Windows 日志源。
结语
Windows Server 2019 与 Kubernetes 的集成标志着企业级混合容器平台走向成熟。本文所列步骤覆盖从零构建到应用验证的全生命周期,兼顾稳定性与可维护性。实践中需特别注意跨平台镜像兼容性、网络策略一致性及安全基线对齐。随着 Kubernetes 社区对 Windows 支持持续深化,未来 Windows 节点将逐步支持更丰富的调度能力与可观测特性。掌握本套方法,即可为传统 Windows 应用现代化迁移提供坚实底座,加速企业云原生转型进程。

