k8s windows节点
k8s windows节点
特性状态
你可以使用 Kubernetes 来混合运行 Linux 和 Windows 节点,这样你就可以 混合使用运行于 Linux 上的 Pod 和运行于 Windows 上的 Pod。 本页面展示如何将 Windows 节点注册到你的集群。
准备开始
该文档是以k8s 1.24.0 和 windowserver 2019 示例
windowserver2019前期配置:
1:开启的应用:
Hyper-V、远程访问
2:系统更新到最新版本
3:修改计算机名称
配置 Flannel
注:以下内容是在 k8s-master节点进行配置
为 Flannel 准备 Kubernetes 的控制面
在我们的集群中,建议对 Kubernetes 的控制面进行少许准备处理。 建议在使用 Flannel 时为 iptables 链启用桥接方式的 IPv4 流处理, 必须在所有 Linux 节点上执行如下命令:
sudo sysctl net.bridge.bridge-nf-call-iptables=1
下载并配置 Linux 版本的 Flannel
下载最新的 Flannel 清单文件:
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
修改 Flannel 清单中的 net-conf.json 部分,将 VNI 设置为 4096,并将 Port 设置为 4789。 结果看起来像下面这样:
net-conf.json: |
{
"Network": "10.244.0.0/16",
"Backend": {
"Type": "vxlan",
"VNI": 4096,
"Port": 4789
}
}
说明: 在 Linux 节点上 VNI 必须设置为 4096,端口必须设置为 4789,这样才能令其与 Windows 上的 Flannel 互操作。关于这些字段的详细说明,请参见 VXLAN 文档。
说明: 如要使用 L2Bridge/Host-gateway 模式,则可将 Type 值设置为 “host-gw”,并忽略 VNI 和 Port 的设置。
应用 Flannel 清单并验证
首先应用 Flannel 配置:
kubectl apply -f kube-flannel.yml
几分钟之后,如果 Flannel Pod 网络被正确部署,你应该会看到所有 Pods 都处于运行中状态。
kubectl get pods -n kube-system
输出中应该包含处于运行中状态的 Linux Flannel DaemonSet:
NAMESPACE NAME READY STATUS RESTARTS AGE
...
kube-system kube-flannel-ds-54954 1/1 Running 0 1m
添加 Windows Flannel 和 kube-proxy DaemonSet
现在你可以添加 Windows 兼容版本的 Flannel 和 kube-proxy。为了确保你能获得兼容 版本的 kube-proxy,你需要替换镜像中的标签。 下面的例子中展示的是针对 Kubernetes v1.24.0 版本的用法, 不过你应该根据你自己的集群部署调整其中的版本号。
curl -L https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/kube-proxy.yml | sed 's/VERSION/v1.24.0/g' | kubectl apply -f -
kubectl apply -f https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/flannel-overlay.yml
说明: 如果你在使用 host-gateway 模式,则应该使用 https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/flannel-host-gw.yml 这一清单。
说明:
如果你在 Windows 节点上使用的不是以太网(即,”Ethernet0 2”)接口,你需要 修改
flannel-host-gw.yml 或 flannel-overlay.yml 文件中的下面这行:
wins cli process run --path /k/flannel/setup.exe --args "--mode=overlay --interface=Ethernet"
注:通过 widnows PowerShell 命令查看网络适配器
ipconfig
在其中根据情况设置要使用的网络接口。
# Example
curl -L https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/flannel-overlay.yml | sed 's/Ethernet/Ethernet0/g' | kubectl apply -f -
2:加入 Windows 工作节点
安装 containerD
下载脚本
curl.exe -LO https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/Install-Containerd.ps1
执行脚本
# 自定containerd的版本以及 网路名称
.\Install-Containerd.ps1 -ContainerDVersion 1.6.8 netAdapterName "Ethernet0"
注:网络名称可通过ipconfig获取
配置 containerD
安装完Containerd后需要手动配置
文件路径:C:\Program Files\containerd\config
1:修改sandbox_image
sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6"
2: 修改registry.mirrors
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://docker.mirrors.ustc.edu.cn"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]
endpoint = ["https://registry.cn-hangzhou.aliyuncs.com/google_containers"]
如图所示:
3:重启containerd服务
restart-service -name containerd
安装 crictl
从 cri-tools 项目安装 crtctl。 crictl 是必需的,kubeadm 使用它与 CRI 端点通信。
安装 wins、kubelet 和 kubeadm
#下载安装脚本
curl.exe -LO https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/kubeadm/scripts/PrepareNode.ps1
#执行安装
.\PrepareNode.ps1 -KubernetesVersion v1.24.0 -ContainerRuntime containerD
运行 kubeadm 添加节点
使用当你在控制面主机上运行 kubeadm init 时得到的命令。 如果你找不到这个命令,或者命令中对应的令牌已经过期,你可以(在一个控制面主机上)运行 kubeadm token create --print-join-command 来生成新的令牌和 join 命令。
示例:
kubeadm join xxxx:6443 --token xxxxx --discovery-token-ca-cert-hash sha256:xxxxxxxx--cri-socket "npipe:./pipe/containerd-containerd"
注:因为是通过containerd进行安装的,添加节点的时候需要配置参数
--cri-socket "npipe:./pipe/containerd-containerd"
主节点查看window节点状态
加入节点后遇到的一些问题
1:节点的 kube-flannel-ds-windows-amd64 pod创建不了
原因:可能是网络没有创建出来
解决方法:在window节点手动执行一下命令创建网络
Import-Module "c:\k\hns.psm1"
New-HnsNetwork -Type NAT -Name nat
2: window 节点执行 crictl ps 报一下错误
level=error msg="unable to determine image API version: rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing open //./pipe/dockershim: The system cannot find the file specified.\""
可通过执行以下两个命令来处理:
crictl config runtime-endpoint npipe:./pipe/containerd-containerd
crictl config image-endpoint npipe:./pipe/containerd-containerd
更多推荐
所有评论(0)