在Windows Server2019快速搭建HPC环境

一个小 Handbook,避免每次找文档。教你如何从一台全新的只装有远程桌面的 windows server 开始,快速搭建 k8s windows node。

文章还没写完,研究的时候出了问题。。。请不要浏览安装containerD后的内容。

安装 SSH Server

当启动了一台全新的 windows server,第一件事是安装 SSH Server
https://learn.microsoft.com/en-us/windows-server/administration/openssh/openssh_install_firstuse?tabs=powershell

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

# 开启服务
Start-Service sshd

# 可选项,设置开机启动
Set-Service -Name sshd -StartupType 'Automatic'

# 设置防火墙
if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) {
Write-Output "Firewall Rule 'OpenSSH-Server-In-TCP' does not exist, creating it..."
New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
} else {
Write-Output "Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists."
}

# 设置默认shell,否则最初的shell是cmd很抽象
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force

好了,现在可以用 ssh 连接了。使用本地 SSH 工具登陆成功后,记得退出远程桌面,以免影响后面的脚本执行。

安装 containerd

Microsoft 官方文档两条命令(一条是下载脚本,一条是执行)安装完基于进程隔离的 containerd 和 cni:https://learn.microsoft.com/en-us/virtualization/windowscontainers/quick-start/set-up-environment?tabs=containerd

1
2
Invoke-WebRequest -UseBasicParsing "https://raw.githubusercontent.com/microsoft/Windows-Containers/Main/helpful_tools/Install-ContainerdRuntime/install-containerd-runtime.ps1" -o install-containerd-runtime.ps1
.\install-containerd-runtime.ps1

安装的最后一步会重启电脑,重启后,使用 ssh 连接,执行 ctr version,如果能看到版本号,说明安装成功。部分设备自动重启后执行不了此命令,很奇怪,但是经过测试,再执行一下.\install-containerd-runtime.ps1就好了

下面拉个镜像试试:

后面的 2019 根据自己的主机版本决定,如果你是 windows server2019,就不要妄想能拉 2022 的镜像了

1
ctr image pull mcr.microsoft.com/windows/nanoserver:ltsc2019

不出意外的话不会出意外,顺利拉取镜像。

安装 k8s node 必备组件

安装 kubectl

https://kubernetes.io/docs/tasks/tools/install-kubectl-windows/

这里的版本请对齐 master,否则可能会出现版本不匹配的问题。

1
curl.exe -LO "https://dl.k8s.io/release/v1.27.4/bin/windows/amd64/kubectl.exe"

由于这个可执行程序需要放到 PATH 下,我懒的去找 PATH,就直接放到了 C:\Program Files\containerd\bin 下,这就是安装 containerd 的脚本默认的安装目录,已经被加入了 PATH。

测试一下:

1
kubectl version --client

安装 kubelet 和 kubeadm

k8s 官方文档并没有给出 windows 的安装方法,不过看看 kubelet 的下载地址,推倒一下:

1
2
curl.exe -LO "https://dl.k8s.io/release/v1.27.4/bin/windows/amd64/kubeadm.exe"
curl.exe -LO "https://dl.k8s.io/release/v1.27.4/bin/windows/amd64/kubelet.exe"

同样是下载到 C:\Program Files\containerd\bin 下。

目前出现的问题

windows 成功加入 master 节点,flannel 和 kubeproxy 的 windows sig 版本成功调度到 windows node 上,似乎 kubelet 有一点问题,容器陷入 CrashLoop ,目前还在研究中。。。

windows 的 containerd 需要修改沙箱 https://github.com/kubernetes-sigs/sig-windows-tools/issues/76

windows 官方 containerd 安装脚本 https://github.com/microsoft/Windows-Containers/blob/Main/helpful_tools/Install-ContainerdRuntime/install-containerd-runtime.ps1

k8s sig windows 配置一把梭脚本 https://github.com/kubernetes-sigs/sig-windows-tools

相同报错 Issue,但解决方案不适用 https://github.com/kubernetes-sigs/sig-windows-tools/issues/337

k8s Windows Node Guide https://kubernetes.io/docs/concepts/windows/intro/#kubelet-compatibility

在旧版本 k8s 上需要特殊配 coredns 仓库地址 https://groups.google.com/a/kubernetes.io/g/dev/c/DYZYNQ_A6_c/m/oD9_Q8Q9AAAJ?pli=1

安装指定版本 kube* https://blog.csdn.net/roxxo/article/details/103146865


在Windows Server2019快速搭建HPC环境
https://wujunyi792.github.io/2023/08/01/在windows-server快速搭建容器环境/
作者
Wujunyi
发布于
2023年8月1日
许可协议