在Kubernetes中对Windows容器进行集群化管理 – Windows节点构建部分

这篇文章是对《云时代的系统管理》这篇文章的转载。

在过去的两篇文章中,我们进行了环境设置和在Linux上构建Kubernetes主节点的步骤。现在我们将进行集群化的Windows节点的构建。

0. 确认环境配置并参考相关网站。

我們現在要解釋的步驟是關於整個環境中Worker Node部分的建立步驟,如下圖所示。

Windows 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
2OS再起動する】

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,但由於尚未設定容器之間的路由,因此無法讓容器彼此通信。
下一篇將介紹有關容器間網絡設定方法和未來的內容。

广告
将在 10 秒后关闭
bannerAds