专栏首页云原生技术社区K8s集群中的Windows节点,这样搭建快速搞定!

K8s集群中的Windows节点,这样搭建快速搞定!

前言:

K8s 1.14版增加了对windows节点的生产级支持,从1.9就有了对windows的实验性支持,灵雀云在多个客户环境有过实践,去除平台相关的内容后整理成文档,分享给大家。

Docker在windows上可以选择Linux模式和Windows模式,两者不能兼容共存:选择linux模式时,pull windows类型镜像会提示平台不兼容,反过来也一样(仓库端是可以同时存放两种镜像的)。

一、环境要求

1.服务器要求:Windows server2016 datacenter版,内核版本10.0.14393.1944,(或者更高版本,如:windows server 1709系统)要求开启服务器的Hyper-v功能,需要两块网卡,两块网口连接相同的vlan下(在相同的局域网下);

2.Docker版本:docker-17-06-2-ee-7(ee和ce都可以,ee可以自行google下载)

3.K8s集群版本:我们这里使用1.9.8版本,网络用flannel(host-gw),CIDR为10.2.0.0/16,master节点分配的地址池为10.2.0.0/24。github上下载相应的windows客户端包,

https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.9.md#windows

解压后windows的可执行文件在node/bin下面,共有4个文件,我们只需要kubelet.exe和kube-proxy.exe即可。

二、服务器基础环境配置

1.开启Hyper-v和RRAS功能,要求服务器启动硬件虚拟化功能,如Intel的VT,否则docker无法安装,注意:大部分云主机不支持这个功能,云主机是虚拟机,这里要求虚拟机开启硬件虚拟化。可按照此文档开启Windows server 2016的RRAS功能http://youritsource.org/msft/how-to-install-and-configure-rras-routing-and-remote-access-V**-in-windows-server-2012-and-2016/,注意下面这项必须勾选,不勾选会导致pod跨主机无法通信(routing)。

如果在部署的时候提示下面的错误信息:

按住win+r键,输入gpedit.msc:

修改左侧菜单路径 计算机配置>管理模板>windows组件>windows远程shell>允许远程shell访问,设置为启用:

再次执行上面的步骤即可添加RRAS成功。

Hyper-v功能开启方法类似。

2.确认Hyper-v和RRAS服务已启动

如何确认服务的Hyper-v开启成功,在powershell或者cmd窗口执行systeminfo:

确认RRAS服务已经启动,在powershell窗口或者按住win+R中输入services.msc:

在服务窗口中确认RRAS服务状态为运行中,如果是其它状态点击“启动”按钮,将启动类型设置为“自动”。

三、安装docker并将节点加入k8s集群

1.安装docker ee

将docker包上传到服务器上,将docker安装包解压到c:\ProgramFiles目录下,在环境变量PATH下增加c:\ProgramFiles\Docker,将dockerd服务设置为系统自启动服务,启动docker即可。

或者使用下图的命令来完成上面的步骤,注意这边docker安装包放在桌面的k8s目录下:

在c:\ProgramData\docker\config\daemon.json(如果没有这个文件请添加)中增加insecure-registrys,重启docker,在powershell中执行restart-service docker:

2.将节点以node角色添加到k8s平台中

首先将第一目第3条中获取的 kubelet.exe 和 kube-proxy.exe 上传到C:\Windows\路径下,(也可以修改系统PATH,添加kube* 所在文件夹,但需要重启,这样我们不需要绝对路径就可以在cmd里执行kube*)然后从 master 节点复制 /etc/kubernetes/kubelet.conf 文件到C:\Users\Administrator

在Powershell中执行

docker network create -dtransparent --gateway 10.2.1.1 --subnet 10.2.1.0/24 alaudanet

创建一个docker的透明网络,名称为alaudanet,地址池设置为windows节点的地址池10.2.1.0/24,网关为10.2.1.1;

这时windows会创建一个Hyper-v的外部虚拟交换机,名称为Layerd_xxx,其中xxx是物理网卡的名称,这边是Ethernet0;

同时会增加一个虚拟网口,名称为HNSTransparent:

同时我们发现XXX网卡(这边是Ethernet0网卡)的网络配置传递给HNSTransparent网卡,且使用ifconfig看不到那块网卡信息了,查看这块网卡信息如下:

因为创建docker网络是随机选择一块物理网卡,因此有可能这块网卡就是设置ipv4地址的网卡,如果存在这种情况,请自行将ipv4地址设置到另一块网卡上(设置方法不在本文档讨论范围内),将HNSTransparent网卡地址设置为10.2.1.1,掩码设置为255.255.255.0,即将HNSTransparent网卡当成alaudanet网络的网关,负责pod中路由转发。

在master节点增加路由:

ip route add 10.2.1.0/24 via<windows节点IP>

在windows节点增加路由:

route add 10.2.0.0 mask255.255.255.0 10.2.0.1 if <设置IP地址的物理网卡接口ID> -p

获取网卡的接口ID,可以在powershell中执行route print|more。

增加一个环境变量CONTAINER_NETWORK,值为alaudanet。

准备pause镜像(Windows的镜像都特别特别大)

docker pull microsoft/windowsservercore

docker pull apprenda/pause

在powershell中执行,此处master节点IP为168.63.124.71,windows节点的ip为168.63.124.72,注意根据实际环境替换相应的值:

kubelet.exe --hostname-override=168.63.124.72--pod-infra-container-image="apprenda/pause"--resolv-conf="" --kubeconfig=.\kubelet.conf

kube-proxy.exe --v=3 --proxy-mode=userspace--hostname-override=168.63.124.72 --master=168.63.124.71:6443--bind-address=168.63.124.72

这时在k8s集群中就能看到该节点,部署Windows的应用时需要通过标签选择Win主机。

四、参考文档

1、官方文档:

https://k8smeetup.github.io/docs/getting-started-guides/windows/

2、最新的网络方案文档:

https://docs.microsoft.com/en-us/virtualization/windowscontainers/kubernetes/getting-started-kubernetes-windows(以后会使用)

3、容器网络参考文档(如果需要深入学习windows网络,请参考该文档):

https://docs.microsoft.com/en-us/virtualization/windowscontainers/container-networking/architecture

本文分享自微信公众号 - 云原生技术社区(cloudnative_pro),作者:郭靖&刘小旭

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • K8s多租户场景下的多层级namespace规则解析

    在单个 Kubernetes 集群上安全托管大量用户一直是一个棘手问题,其中最大的麻烦就是 不同的组织以不同的方式使用 Kubernetes,很难找到一种租户模...

    灵雀云
  • Helm 毕业了!它是从CNCF毕业的第10个项目

    4月30日--CNCF宣布Helm是第十个毕业的项目。从孵化的成熟度级别过渡到毕业阶段,项目必须表现出良好的采用、开放的治理过程,以及对社区、可持续性和包容性的...

    灵雀云
  • Jenkins源码阅读指北,一文看懂Jenkins用到的java技术点

    Jenkins是一个基于Java开发的,用于持续集成的工具。Jenkins的前身是Sun 公司的Hudson,第一个版本于2005年发布,在2010年11月期间...

    灵雀云
  • 使用windows 10的8大理由

    相对于在不情愿的情况下被微软强制将系统升级为windows 10和现在还在着使用windows 7的电脑同学,我是windows 10系统的积极拥护者。当win...

    用户1608022
  • Docker管理工具-Swarm部署记录

    介绍另一个管理工具Swarm的用法,Swarm是Docker原生的集群管理软件,与Kubernetes比起来比较简单。

    洗尽了浮华
  • MyCat数据库的基础配置及使用

    随着计算机和信息技术的迅猛发展,行业应用系统的规模迅速扩大,行业应用所产生的数据量呈爆炸式增长,动辄达到数百TB甚至数百PB的规模,已远远超出传统计算技术和信息...

    宜信技术学院
  • set用法小结

    set本质上是一棵红黑树,用法也就那么几个,插入删除lowerbound,再就是跌倒器之类的

    attack
  • 玩转 Angular 环境变量

    对于 “程序猿” 来说,在日常开发过程中,我们经常要与不同的开发环境打交道。在实际的项目的开发过程中,一般至少会有两个环境:开发环境和线上环境,这是很简单的情形...

    阿宝哥
  • bat脚本常用命令

    我相信这不是我一个人的经历:傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去...

    小闫同学啊
  • 探索 React 内核:深入 Fiber 架构和协调算法

    深入研究 React 称为 Fiber 的新架构,了解新 reconciliation 算法的两个主要阶段。

    童欧巴

扫码关注云+社区

领取腾讯云代金券