使用 WSL2
种类可以在 Windows 10 2020 年 5 月更新(版本 19041)上使用 Windows Subsystem for Linux 2 (WSL2) 运行。
构建或运行种类所需的所有工具都在 WSL2 中,但需要一些额外的步骤才能切换到 WSL2。本页简要介绍了这些步骤,但也链接到官方文档,如果您需要更多详细信息。
获取 Windows 10 🔗︎
从 https://www.microsoft.com/en-us/software-download/windows10ISO 下载最新的 ISO。选择“Windows 10 2020 年 5 月更新”。如果有更新的更新,也可以使用。
在虚拟机上安装 🔗︎
所需设置
- 支持的处理器和操作系统,请参阅 启用嵌套虚拟化 指南以获取 Windows
- 英特尔处理器需要 Windows 10/Windows Server 2016 或更高版本,并且处理器必须支持 VT-x 和扩展页表(也称为 二级地址转换)
- AMD 处理器需要 Windows 11/Windows Server 2022 或更高版本,并且处理器代数必须为 AMD EPYC 或 Ryzen 或更新版本
- 至少 8GB 内存
- 最好使用静态内存分配,而不是动态分配。虚拟机将在内部自动使用分页,因此您不希望它在虚拟机主机上分页。
- 启用嵌套虚拟化支持。在 Hyper-V 上,您需要从管理员 PowerShell 提示符运行 -
Set-VMProcessor -VMName ... -ExposeVirtualizationExtensions $true
- 将 ISO 附加到虚拟 DVD 驱动器
- 创建一个至少 80GB 空间的虚拟磁盘
现在,启动虚拟机。仔细观察“按任意键继续安装...”屏幕,以免错过。Windows 安装程序将自动启动。
在物理机上安装 🔗︎
如果您使用的是物理机,则可以挂载 ISO,将文件复制到 FAT32 格式的 USB 磁盘,然后从该磁盘启动。确保机器配置为使用 UEFI(而不是传统 BIOS)启动,并且为管理程序启用了 Intel VT 或 AMD-V。
安装期间的提示 🔗︎
- 您可以跳过产品密钥页面
- 在“使用 Microsoft 帐户登录”屏幕上,查找“脱机帐户”按钮。
设置 WSL2 🔗︎
如果您需要完整的详细信息,请参阅 WSL2 安装说明。这是 TL;DR 版本。
Windows 机器准备就绪后,您需要执行几个步骤来设置 WSL2
-
以管理员身份打开 PowerShell 窗口,然后运行
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform, Microsoft-Windows-Subsystem-Linux
-
出现提示时重新启动。
-
重新启动后,将 WSL 设置为默认使用 WSL2。打开管理员 PowerShell 窗口并运行
wsl --set-default-version 2
-
现在,您可以通过搜索 Windows 应用商店来安装您选择的 Linux 发行版。如果您不想使用 Windows 应用商店,请按照 WSL 文档中的步骤进行 手动安装。
-
使用添加到开始菜单的快捷方式启动您的发行版
使用 Docker Desktop 在 WSL2 中设置 Docker 🔗︎
在此安装使用 WSL2 后端的 Docker:https://docs.docker.net.cn/docker-for-windows/wsl/
在没有 Docker Desktop 的情况下在 WSL2 中设置 Docker 🔗︎
或者,可以在不使用 Docker Desktop 的情况下在 WSL2 中安装 docker。例如,请参阅:https://dev.to/bowmanjd/install-docker-on-windows-wsl-without-docker-desktop-34m9
现在,继续使用 快速入门 使用种类设置您的集群。
访问在 WSL2 中运行的 Kubernetes 服务 🔗︎
-
使用导出的节点端口准备集群配置
# cluster-config.yml kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane extraPortMappings: - containerPort: 30000 hostPort: 30000 protocol: TCP
-
创建集群
kind create cluster --config=cluster-config.yml
-
创建部署
kubectl create deployment nginx --image=nginx --port=80
-
创建服务
kubectl create service nodeport nginx --tcp=80:80 --node-port=30000
-
访问服务
curl localhost:30000
或者,请参阅 WSL2 的有用提示
具有会话亲和性的 Kubernetes 服务 🔗︎
如果您想创建具有 sessionAffinity: ClientIP
的 Kubernetes 服务,则无法访问它(之后创建的任何服务也无法访问)。WSL2 内核缺少 xt_recent
内核模块,该模块由 Kube Proxy 用于实现会话亲和性。您需要编译自定义内核才能启用此功能。
-
构建启用了
xt_recent
内核模块的内核docker run --name wsl-kernel-builder --rm -it ubuntu:latest bash WSL_COMMIT_REF=linux-msft-wsl-5.15.146.1 # change this line to the version you want to build # Install dependencies apt update apt install -y git build-essential flex bison libssl-dev libelf-dev bc dwarves python3 # Checkout WSL2 Kernel repo mkdir src cd src git init git remote add origin https://github.com/microsoft/WSL2-Linux-Kernel.git git config --local gc.auto 0 git -c protocol.version=2 fetch --no-tags --prune --progress --no-recurse-submodules --depth=1 origin +${WSL_COMMIT_REF}:refs/remotes/origin/build/linux-msft-wsl-5.15.y git checkout --progress --force -B build/linux-msft-wsl-5.15.y refs/remotes/origin/build/linux-msft-wsl-5.15.y # Enable xt_recent kernel module sed -i 's/# CONFIG_NETFILTER_XT_MATCH_RECENT is not set/CONFIG_NETFILTER_XT_MATCH_RECENT=y/' Microsoft/config-wsl # Compile the kernel make -j2 KCONFIG_CONFIG=Microsoft/config-wsl # From the host terminal copy the newly built kernel docker cp wsl-kernel-builder:/src/arch/x86/boot/bzImage .
-
配置 WSL 以使用新构建的内核:https://docs.microsoft.com/en-us/windows/wsl/wsl-config#configure-global-options-with-wslconfig
在
C:\Users\<your-user-name>\
中创建一个.wslconfig
文件[wsl2] kernel=c:\\path\\to\\your\\kernel\\bzImage
WSL2 的有用提示 🔗︎
- 如果您想终止 WSL2 实例以节省内存或“重新启动”,请打开管理员 PowerShell 提示符并运行
wsl --terminate <distro>
。关闭 WSL2 窗口不会自动关闭它。 - 您可以使用
wsl --list --verbose
检查所有已安装发行版的状态。 - 如果您使用 WSL1 安装了发行版,则可以使用
wsl --set-version <distro> 2
将其转换为 WSL2 - 使用 访问在 WSL2 中运行的 Kubernetes 服务 或 设置入口控制器 访问工作负载的替代方法是使用
kubectl port-forward --address=0.0.0.0
。