You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在AWS的KOPS创建的K8s 1.8集群中添加Windows节点求助

我明白你现在的处境——用kops在AWS搭了K8s 1.8集群,想加Windows节点却卡在了网络选项和节点加入方式上,这确实有点棘手,毕竟kops和kubeadm的集群初始化逻辑完全不一样。下面我一步步给你梳理可行的方案,帮你搞定这个问题:

一、先搞清楚K8s 1.8对Windows节点的核心限制

首先得明确,K8s 1.8的Windows支持还处于Beta阶段,有几个硬限制必须遵守:

  • 仅支持Windows Server 2016/2019作为节点系统
  • 网络插件只能用Flannel(vxlan或host-gw模式),Calico这类插件在1.8版本对Windows的支持还不完善
  • kube-proxy只能用userspace模式,iptables模式不支持Windows
二、不用kubeadm!用kops集群的原生认证方式加节点

kops创建的集群是通过AWS IAM角色+集群CA证书来做节点认证的,和kubeadm的token机制完全不同,所以直接用kubeadm join肯定行不通。得这么做:

1. 从kops管理机获取集群配置文件

在你用来管理kops集群的机器上,执行以下操作:

  • 导出集群的kubeconfig:
    kops export kubecfg --name <你的集群名称> --state <你的state存储路径(比如s3://my-kops-state)>
    
  • 把生成的kubeconfig文件(默认在~/.kube/config)复制到Windows节点的C:\k\config路径下(先手动创建C:\k目录)
  • 同时,获取集群的CA证书:你可以从kubeconfig里提取,或者直接从kops的state存储拉取:
    aws s3 cp s3://<你的state桶>/<集群名>/pki/issued/ca/ca.crt ./ca.crt
    
    然后把这个ca.crt也复制到Windows节点的C:\k目录下

2. 配置并启动Windows节点的kubelet

在Windows节点上,先创建kubelet的配置文件C:\k\kubelet-config.yaml,内容参考下面(注意替换集群DNS的IP):

apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
clusterDomain: cluster.local
clusterDNS:
- 10.0.0.10  # 这里要替换成你kops集群中kube-dns的实际IP,用kubectl get svc kube-dns -n kube-system就能查到
runtimeRequestTimeout: 15m

然后用命令启动kubelet:

kubelet --config=C:\k\kubelet-config.yaml --kubeconfig=C:\k\config --hostname-override=<Windows节点的主机名> --register-node=true --pod-infra-container-image=mcr.microsoft.com/windows/servercore:1809

⚠️ 注意:

  • hostname-override必须和AWS实例的私有主机名一致,不然kops无法正确识别节点
  • pod-infra-container-image要和你的Windows节点系统版本匹配,比如Server 2019就用1809版本的镜像
三、网络插件配置(重点解决你的网络困惑)

K8s 1.8里Windows节点只能用Flannel,步骤如下:

1. 确认集群已用Flannel

先在kops管理机上检查集群的网络插件:

kubectl get pods -n kube-system | grep flannel

如果能看到flannel的Pod在运行,说明没问题;如果用的是其他插件,你可能需要先切换成Flannel(kops创建集群时可以用--networking flannel指定)

2. 在Windows节点部署Flannel

  • 下载对应K8s 1.8版本的Flannel Windows二进制(比如v0.10.0,要和集群的Flannel版本一致)
  • 从集群的Flannel ConfigMap里获取网络配置:
    kubectl get configmap kube-flannel-cfg -n kube-system -o jsonpath='{.data.net-conf.json}'
    
    把输出的内容复制到Windows节点的C:\k\flannel-config.json文件中
  • 启动Flannel:
    flanneld.exe --kubeconfig=C:\k\config --iface=<Windows节点的主网卡名称>
    
    网卡名称可以用ipconfig查看,比如“以太网”

3. 启动kube-proxy

Windows版本的kube-proxy要和K8s 1.8版本对应,下载后用以下命令启动:

kube-proxy.exe --kubeconfig=C:\k\config --proxy-mode=userspace

⚠️ K8s 1.8的Windows kube-proxy只支持userspace模式,别用其他模式!

四、验证节点是否加入成功

回到kops管理机,执行:

kubectl get nodes

如果Windows节点的状态变成Ready,就说明成功了。可以部署一个简单的Windows Pod测试:

apiVersion: v1
kind: Pod
metadata:
  name: windows-test-pod
spec:
  containers:
  - name: iis
    image: mcr.microsoft.com/windows/servercore:1809
    ports:
    - containerPort: 80
  nodeSelector:
    beta.kubernetes.io/os: windows

用kubectl apply -f test-pod.yaml创建后,用kubectl get pods看是否正常运行。

五、关键注意事项
  • 版本匹配:Windows节点的系统版本必须和容器镜像的版本完全一致,否则Pod会启动失败
  • 安全组:确保Windows节点的安全组开放了必要端口:kubelet的10250、Flannel的8472(vxlan)、kube-proxy的相关端口,和Linux节点的安全组配置对齐
  • K8s 1.8的Windows支持是Beta,可能存在一些稳定性问题,比如网络偶尔断连,需要做好测试

内容的提问来源于stack exchange,提问作者user1852104

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:03:08