前言
不要问我为什么准备windows节点,因为我也很无奈
一、准备工作
Windows系统:window server 2019 (内核版本为1809或以上,windows server 版本信息 )
准备:
1.开启Hyper-v支持
2.开启RARS服务(用于Pod间网络调用)
复制代码
注:使用 VXLAN/覆盖(Overlay)联网设施,则还必须安装 KB4489899
Linux系统:centos7(ubuntu也行,只作为master节点管理,不参与调度),已通过kubeadm init安装成master节点
准备:
1.设置网桥:sysctl net.bridge.bridge-nf-call-iptables=1
2.安装flannel
3.修改flannel清单中的配置文件信息:
net-conf.json: |
{
"Network": "10.244.0.0/16",
"Backend": {
"Type": "vxlan",
"VNI": 4096,
"Port": 4789
}
}
4.选择兼容Windows的kube-proxy镜像(实际使用中对应)
复制代码
kubernetes版本:v1.21.0
docker版本:20.10.5
windows节点参考文档
windows节点工具
二、安装节点
1. 安装Docker
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
Install-Package -Name docker -ProviderName DockerMsftProvider
复制代码
重启
Restart-Computer -Force
复制代码
检查
docker -v
复制代码
可选操作:
更新Docker:
Get-Package -Name Docker -ProviderName DockerMsftProvider
# 查找当前版本的Docker
Find-Package -Name Docker -ProviderName DockerMsftProvider
Install-Package -Name Docker -ProviderName DockerMsftProvider -Update -Force
Start-Service Docker 或 Restart-Service Docker
复制代码
2. 下载快速搭建脚本
下载脚本:https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/PrepareNode.ps1
执行脚本:.\PrepareNode.ps1 -KubernetesVersion v1.21.0
复制代码
3. 加入节点
使用主机节点上kubeadm token create --print-join-command
打印出来的kubeadm join ……
命令,即可加入到主机节点
三、部署应用
拉取的镜像需要的os属性需要是windows,且镜像依赖的系统版本需要和物理Windows节点兼容
docker inpsect IMAGESID
复制代码
四、卸载K8s
因为安装过程中有很多步都可能导致安装失败,因此安装失败以后或者不需要以后需要卸载所有安装
- 关闭服务
通过service.msc 查找kubelet服务,确定服务已停止或手动关闭 或者可以直接通过nssm命令执行: nssm stop kubelet nssm remove kubelet 复制代码
- 删除安装目录
删除C盘目录下的k、var、etc、run、opt目录 - 删除防火墙规则
查找防火墙中的kubelet规则,删除
五、问题记录
Q:Linux节点的镜像无法在Windows节点上部署
A:kubernetes在v1.4.0版本以后才支持建立Windows节点,镜像的版本中依赖物理节点的版本,且Windows有严格的兼容问题,所以部署的镜像在1809的节点上是不能用2016的系统的,会报系统不兼容
Q:使用kubeadm加入节点的时候,一直启动不成功,但是又没有具体的错误
A:应该是目录权限的问题,Windows的权限与Linux的权限存在不同,Windows的用户无法直接作为Administrators用户,所以在执行的过程中可能存在权限不足的问题,但是目前使用的都是封装好的工具类,基本无法调试,因此需要确保对默认的几个目录拥有全部的权限,安装的时候,将C盘的权限全部放开给Users,基本顺利安装
Q:Network **** not found
A:大部分文档都是说是docker的network没有创建,但是使用中发现,创建了docker的network也没有任何作用,此处的network是指的是Windows中Hyper-v中的network,可以使用ISE中的Get-HnsNetwork查看是否存在,重启以后,会有一段时间的准备时间,基本都会重建虚拟网络信息
Q:执行PrepareNode.ps1老是失败
A:脚本主要需要安装 wins、kubelet 和 kubeadm,这三个文件可以在编辑视图下的PrepareNode中查看下载地址,放入到c:\k目录下线,然后删除或者注释掉脚本中的下载代码即可,但是注意,如果要安装不同的版本,则需要重新下载对应版本的kubelet和kubeadm
Q:增加了NodePort映射,但是无法访问
A:目前使用的服务器基本都是通过虚拟机验证的,其中连接的网络为公司网络,经过验证发现连接公司网络的物理机会被强制重写resolv.conf
文件。
服务间调用存在网络问题猜测和本次试验使用的是虚拟机以及选择的CNI插件有关,但是没有其他资源进行验证,但是作为折中方案,可以通过节点Ip:NodePort形式访问容器服务
Q:kube-proxy一直无法启动
A:初步怀疑是版本的问题,因为安装的kubernetes使用的是v1.21.0版本,相对应的kube-proxy也是v1.21.0,但是通过验证,猜测可能是升级后的版本存在windows版本的兼容问题,将其降至v1.20.0版本后,正常启动
Q:在windows10上能够正常启动的Docker镜像,在k8s中启动报错“系统不兼容”
A:这就是windows容器化的兼容性问题,通过docker inspect IMAGEID和winver获取镜像和物理机节点的windows版本,然后参照上面的官方文档,确认是否兼容,或者将windows系统进行更新,安装最新的补丁程序后,再运行镜像,理论上会向下兼容,但是如果基础大版本不一致,可能导致镜像内部分功能不正常