在Kubernetes中对Windows容器进行集群化管理 – Windows节点构建部分
这篇文章是对《云时代的系统管理》这篇文章的转载。
在过去的两篇文章中,我们进行了环境设置和在Linux上构建Kubernetes主节点的步骤。现在我们将进行集群化的Windows节点的构建。
0. 确认环境配置并参考相关网站。
我們現在要解釋的步驟是關於整個環境中Worker Node部分的建立步驟,如下圖所示。

以下的步骤是根据Microsoft Docs上的这个网站的指南进行构建的。然而,由于Kubernetes不断发布新版本,因此请注意可能会使步骤失效。此外,虽然存在日本语版的文档,但由于未更新内容或修复错误,建议在上述英语版链接中确认要执行的命令和步骤。
0-1. 在完成写作后到新闻发布之前的时间段内添加补充说明。
目前,我正在参加Microsoft总部举办的MVP全球峰会。在2018年2月中旬进行验证的阶段,以下的步骤是正确的。然而,在与编写参考文档和进行Windows的Kubernetes兼容开发的团队的讨论和交流几个小时之后,Github上的脚本和工具更新迅速,可能会导致这些步骤不再正确。最新的内容将在本文后续的”使用flannel进行网络结构自动化”之类的文章中进行撰写。
在Windows Server 1709上配置Docker。
将NIC的名称更改为英文名称。
在2-1的后半部分,将下载一个用于配置Kubernetes的PowerShell脚本,但是由于其内容基于英文版Windows进行设定,所以需要事先将与Kubernetes Master通信的网卡名称更改为”Ethernet”。由于日文版Windows默认名称为”イーサネット”,如果不更改,配置脚本将无法正常运行(看似是正常运行了,但实际上并非如此…)。
要更改NIC的名称,需要在Windows节点的控制台连接或RDP连接后,通过PowerShell执行以下命令。下面的示例中还执行了确认命令。
C:\> powershell
PS C:\> Get-NetAdapter
Name InterfaceDescription ifIndex Status MacAddress LinkSpeed
---- -------------------- ------- ------ ---------- ---------
イーサネット Microsoft Hyper-V Network Adapter 2 Up 00-15-5D-01-0B-0E 1 Gbps
PS C:\> Rename-NetAdapter -Name "イーサネット" -NewName "Ethernet"
PS C:\> Get-NetAdapter
Name InterfaceDescription ifIndex Status MacAddress LinkSpeed
---- -------------------- ------- ------ ---------- ---------
Ethernet Microsoft Hyper-V Network Adapter 2 Up 00-15-5D-01-0B-0E 1 Gbps
1-2. 安装Docker
过去的文章中已经写过,安装Windows上的Docker可以在PowerShell中执行以下操作。此外,在Windows Server版本1709中,若不进行两次操作系统重新启动,Docker服务将无法自动启动。
PS C:\> Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
PS C:\> Install-Package -Name Docker -ProviderName DockerMsftProvider
(Yes/Noを聞かれたら「Y」と明示的に入力する)
PS C:\> Restart-Computer -Force
【2回OS再起動する】
2. Kubernetes的安装和配置
2-1. 引入Kubernetes配置腳本
我们首先从Microsoft在Github上公开的SDN存储库中获取所需的脚本和程序。在这里,我将从我在2018年2月7日进行操作验证的提交中下载文件。如果要更改为最新版本等,请更改第一行的URL。同时,还要根据需要更改最后一行的要删除的文件夹名称。
PS C:\> wget https://github.com/Microsoft/SDN/archive/908983aa5ad5814a521fe57c7d7720950ac1ec25.zip -o master.zip
PS C:\> Expand-Archive master.zip -DestinationPath master
PS C:\> mkdir C:\k\
PS C:\> mv master\SDN-master\Kubernetes\windows\* C:\k\
PS C:\> rm -recurse -force master,master.zip
当脚本下载完成后,执行PowerShell以允许执行已下载的脚本。
PS C:\> Unblock-File C:\k\*
创建用于运行Kubernetes的暂停镜像容器
为了以后使用,创建容器的Paused镜像。首先,下载Windows Server的镜像,并将下载的版本标记为最新。
PS C:\> docker pull microsoft/windowsservercore:1709
PS C:\> docker tag microsoft/windowsservercore:1709 Microsoft/windowsservercore:latest
接下来,使用刚刚下载的脚本中的Dockerfile来创建暂停镜像。
PS C:\> cd C:\k\
PS C:\k\> docker build -t kubeletwin/pause . ←最後のピリオドを忘れない
2-3. 进行Kubernetes的安装
Kubernetes的二进制文件以tar.gz格式分发,因此在Linux服务器上下载并解压。
$ wget https://storage.googleapis.com/kubernetes-release/release/v1.9.2/kubernetes-node-windows-amd64.tar.gz
$ tar zxf kubernetes-node-windows-amd64.tar.gz
展开后,通过SCP等工具提取包含kube开头的文件(如kubelet.exe、kube-proxy.exe)并部署到Windows节点。可以使用共享文件夹等方式进行文件传输到Windows节点。在PowerShell中,可以直接使用cp命令从共享文件夹复制文件,非常方便(在命令提示符中需要先将其作为网络驱动器挂载)。
PS C:\> mkdir C:\k\
PS C:\> cd C:\k\
PS C:\k\> cp \\(共有ファイルサーバーのIP)\(フォルダのパス)\kube*.exe .\
2-4. Kubernetes配置和加入Kubernetes集群。
为了能够在Kubernetes主节点上执行管理操作,我们需要创建一个认证文件。请显示认证配置文件的内容并将其复制。
$ cat ~/.kube/config
(出力結果をすべてコピー)
将复制的结果写入到在Windows节点上创建的文本文件中。另外,使用SCP直接带来认证文件也是可以的。
PS C:\> cd C:\k\
PS C:\k\> notepad
接下来,我们将设置Kubernetes节点代理所需的环境变量。
PS C:\k\> [Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\k", [EnvironmentVariableTarget]::Machine)
PS C:\k\> [Environment]::SetEnvironmentVariable("KUBECONFIG", "C:\k\config", [EnvironmentVariableTarget]::Machine)
3. 确定Kubernetes已经启动并加入集群。
3-1. Kubernetes的启动
因为Kubernetes的Windows Node Agent启动准备已经完成,所以现在进行启动。在这里,我们将以前台程序而不是服务的形式进行启动。正因为前台启动会产生大量的输出信息,所以请另起一个PowerShell执行窗口来启动Kubernetes的kubeleet.exe。
PS C:\k\> Start-Process powershell
(別ウィンドウで以下を実行。念のため環境変数を再度設定)
PS C:\k\> $env:Path += ";C:\k"
PS C:\k\> $env:KUBECONFIG="C:\k\config"
PS C:\k\> ./start-kubelet.ps1 -ClusterCidr 172.16.0.0/16
接下来启动kube-proxy.exe。
PS C:\k\> Start-Process powershell
(別ウィンドウで以下を実行。念のため環境変数を再度設定。)
PS C:\k\> $env:Path += ";C:\k"
PS C:\k\> $env:KUBECONFIG="C:\k\config"
PS C:\k\> ./start-kubeproxy.ps1
3-2. 动作测试
通过在WinWorker01、WinWorker02和WinWorker03这三台服务器上进行Windows Node的构建工作,来创建一个由这三台服务器组成的集群节点。在这三台服务器上都启动Kubernetes进程后,确认它们都被Kubernetes Master节点识别到。
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
kube-master Ready <none> 15d v1.9.2
winworker01 Ready <none> 15d v1.9.2
winworker02 Ready <none> 14d v1.9.2
winworker03 Ready <none> 14d v1.9.2
我們已經完成了啟動容器的Node和管理Worker,但由於尚未設定容器之間的路由,因此無法讓容器彼此通信。
下一篇將介紹有關容器間網絡設定方法和未來的內容。