Windows server 2019 安装k8s node
# **Windows server 2019 安装k8s node**
目录
[一、K8s集群配置Flannel ](#_Toc31758 )
[二、Windows节点安装docker ](#_Toc22652 )
[三、Windows节点加入k8s集群 ](#_Toc22916 )
[四、加入集群后的验证 ](#_Toc22057 )
[五、新服务器加入监控 ](#_Toc22769 )
[FAQ常见问题总结 ](#_Toc16032 )
## 一、**K8s集群配置Flannel**
1.1 配置Iptables规则
【所有linux节点】执行
echo "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.conf && sysctl -p
【所有linux节点】验证
sysctl -a |grep net.bridge.bridge-nf-call-iptables
1.2 下载并配置 Linux 版本的 Flannel 【Master节点】
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl edit cm -n kube-system kube-flannel-cfg
net-conf.json: |
{
"Network": "10.245.64.0/18",
"Backend": {
"Type": "vxlan",
"VNI": 4096,
"Port": 4789
}
}

1.3 确保Flannel正常运行【Master节点】
kubectl apply -f kube-flannel.yml
kubectl get pods -n kube-system
1.4 添加 Windows Flannel 和 kube-proxy DaemonSet 【Master节点】
\#注意替换版本号为当前k8s集群版本
curl -L https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/kube-proxy.yml | sed 's/VERSION/v1.20.4/g' | kubectl apply -f -
kubectl apply -f https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/flannel-overlay.yml
最终结果如下

## 二、**Windows节点安装docker**
***\*!!!在以下三种方法选择其中一种安装即可!!!\****
***\*docker完装毕后,服务器需要重启生效,不然服务无法启动\****
***\*方法一:\****手动传包安装
2.1 下载离线包 (此处版本指定20.10.8,尽量跟集群内其他节点一致)
[h](https://dockermsft.azureedge.net/dockercontainer/docker-20-10-8.zip)ttps://dockermsft.azureedge.net/dockercontainer/docker-20-10-8.zip
2.2 解压到C:\Program Files 下

2.3 增加环境变量
C:\Program Files\docker\

2.4 以管理员身份powershell运行,注册docker为服务

cd 'C:\Program Files\docker\'
dockerd --register-service
2.5 启动docker (此处启动会失败,需要重启后才行)
Start-Service docker
2.6 重启服务器 && 验证
!!注意,重启时一定确认时新加入的windows节点!!


***\*方法二:自定义版本安装\****
(注意此方法需要Nuget环境,最好可以联网)
2.1 配置安装源
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
2.2 指定版本安装Docker
Install-Package -Name docker -ProviderName DockerMsftProvider -Force -RequiredVersion 20.10.8
2.3 重启服务器 -> 配置环境变量 -> 启动服务(参考方法一)
***\*方法三:最新版本安装\****
2.1 以管理员身份运行
Install-WindowsFeature -Name Containers
2.2 重启服务器 -> 配置环境变量 -> 启动服务(参考方法一)
**修改docker镜像存储路径**
1)增加daemon.json
C:\ProgramData\docker\config\daemon.json
```powershell
{
"registry-mirrors": [],
"insecure-registries": ["harbor.betawm.com"],
"graph": "D:\\Docker"
}
2)重启docker服务 & 验证
docker info

三、Windows节点加入k8s集群
3.1 将准备的k.zip安装包解压至C:\k目录下
*!!!注意k.zip安装包内默认k8s组件版本为v1.21.5 !!!*
*预生产k8s集群为v1.20.4,与包内的版本不一致, 所以需要手动下载替换*
下载地址(仅替换这4个即可):
https://dl.k8s.io/v1.20.4/bin/windows/amd64/kubeadm.exe
https://dl.k8s.io/v1.20.4/bin/windows/amd64/kubectl.exe
https://dl.k8s.io/v1.20.4/bin/windows/amd64/kubelet.exe
https://dl.k8s.io/v1.20.4/bin/windows/amd64/kube-proxy.exe

3.2 nssm外网可能下载不到导致卡住,所以直接将nssm这几行注释掉

1)创建目录,NssmInstallDirectory -> 从上边的变量找到是在
C:\Program Files\nssm
2)下载zip包 https://k8stestinfrabinaries.blob.core.windows.net/nssm-mirror/nssm-2.24.zip
3)解压到C:\Program Files\nssm(此目录根据PrepareNode.ps1脚本发现)

4)配置环境变量 C:\Program Files\nssm\win64
3.3 以管理员身份运行powershell 进入C:\k
cd C:\k
.\PrepareNode.ps1 -KubernetesVersion v1.20.4
3.4 创建永不过期的token【Master节点】
kubeadm token create --print-join-command --ttl 0
3.5 加入集群 【新Windows 节点】
kubeadm join xxxxxxx(刚生成的token串)
3.6 此处能看到新Windows节点已加入集群,但正在拉镜像起pod所以状态为NotReady
kubectl get nodes -o wide
可以手动将这些镜像在windows节点pull下来加快速度,kube-proxy-windows这个pod起来就为Ready了


因新加入的为Windows节点较为特殊很多daemonsets的Pod无法同样适用,所以需要手动将其删除(此处暂时不做展示)


四、加入集群后的验证
现在来跑一个服务验证是否正常
beta-message-web
步骤如下:
开发站镜像同步到主站、部署Yaml、Apollo、VirtualService
4.1 harbor中镜像同步到主站


4.2 部署Yaml (注意此nameservers改成此地址)

4.3 Apollo (需按照各环境实际地址来变)
4.4 VirtualService (可直接照搬,需要确认路由前缀)
五、新服务器加入监控
5.1 加入Grafana
【192.168.45.1操作】
cd /opt/prometheus/prometheus-2.28.1/
cp prometheus.yml prometheus.yml.date "+%Y%m%d_%H%M.bak"
vim prometheus.yml
增加红线部分

systemctl restart prometheus

【新Windows节点】
部署windows_exporter


5.2 加入Zabbix (根据环境来定)
1)在windows机器上双击zabbix_agent2工具包下一步安装即可
(包名:zabbix_agent2-5.0.15-windows-amd64-openssl.msi)
2)更改zabbix_agent2.conf配置,只需要把hostname改为本机ip即可
Hostname=172.16.0.22
默认安装路径C:\Program Files\Zabbix Agent 2
FAQ
*问题1、Docker无法启动*
*解决办法:*重启服务器,首次安装Docker需要重启服务器才可生效
1)fatal: open D:\Docker\panic.log: Access is denied.

2)fatal: failed to start daemon: failed to load vmcompute.dll, ensure that the Containers feature is installed

*问题2、windows加入k8s集群卡住*
*解决办法:*nssm外网可能下载不到导致卡住,所以直接将nssm这几行注释掉,手动执行

1)创建目录 (从脚本中找关键字NssmInstallDirectory找到)
C:\Program Files\nssm
2)下载zip包 https://k8stestinfrabinaries.blob.core.windows.net/nssm-mirror/nssm-2.24.zip
3)解压到C:\Program Files\nssm(此目录根据PrepareNode.ps1脚本发现)

4)配置环境变量 C:\Program Files\nssm\win64

*问题3、windows节点加入集群的时候失败,kubelet无法启动*
*解决方法:*手动替换k目录里kubelet和kube-proxy版本,与刚开始定义的版本保持一致
kubelet无法启动截图

调试时,发现kubelet的真正原因

kubelet真正的启动命令,调试时可以使用
C:\k\kubelet.exe \(global:KubeletArgs --cert-dir=\)env:SYSTEMDRIVE\var\lib\kubelet\pki --config=/var/lib/kubelet/config.yaml --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --hostname-override=$(hostname) --pod-infra-container-image="mcr.microsoft.com/oss/kubernetes/pause:1.4.1" --enable-debugging-handlers --cgroups-per-qos=false --enforce-node-allocatable="" --network-plugin=cni --resolv-conf="" --log-dir=/var/log/kubelet --logtostderr=false --image-pull-progress-deadline=20m
*问题4、*新Windows节点处于NotReady状态,很可能是因为系统仍在下载 Flannel镜像
*解决办法:*可以手动pull镜像或者镜像打包传到新Windows节点
kubectl -n kube-system get pods -l app=flannel

浙公网安备 33010602011771号