使用 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 安装程序将自动启动。

在物理机上安装 🔗︎

如果您使用的是物理机,则可以挂载 ISO,将文件复制到 FAT32 格式的 USB 磁盘,然后从该磁盘启动。确保机器配置为使用 UEFI(而不是传统 BIOS)启动,并且为管理程序启用了 Intel VT 或 AMD-V。

安装期间的提示 🔗︎

设置 WSL2 🔗︎

如果您需要完整的详细信息,请参阅 WSL2 安装说明。这是 TL;DR 版本。

Windows 机器准备就绪后,您需要执行几个步骤来设置 WSL2

  1. 以管理员身份打开 PowerShell 窗口,然后运行

    Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform, Microsoft-Windows-Subsystem-Linux
  2. 出现提示时重新启动。

  3. 重新启动后,将 WSL 设置为默认使用 WSL2。打开管理员 PowerShell 窗口并运行

    wsl --set-default-version 2

  4. 现在,您可以通过搜索 Windows 应用商店来安装您选择的 Linux 发行版。如果您不想使用 Windows 应用商店,请按照 WSL 文档中的步骤进行 手动安装

  5. 使用添加到开始菜单的快捷方式启动您的发行版

使用 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 服务 🔗︎

  1. 使用导出的节点端口准备集群配置

    # cluster-config.yml
    kind: Cluster
    apiVersion: kind.x-k8s.io/v1alpha4
    nodes:
    - role: control-plane
      extraPortMappings:
      - containerPort: 30000
        hostPort: 30000
        protocol: TCP

  2. 创建集群 kind create cluster --config=cluster-config.yml

  3. 创建部署 kubectl create deployment nginx --image=nginx --port=80

  4. 创建服务 kubectl create service nodeport nginx --tcp=80:80 --node-port=30000

  5. 访问服务 curl localhost:30000

或者,请参阅 WSL2 的有用提示

具有会话亲和性的 Kubernetes 服务 🔗︎

如果您想创建具有 sessionAffinity: ClientIP 的 Kubernetes 服务,则无法访问它(之后创建的任何服务也无法访问)。WSL2 内核缺少 xt_recent 内核模块,该模块由 Kube Proxy 用于实现会话亲和性。您需要编译自定义内核才能启用此功能。

  1. 构建启用了 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 .

  2. 配置 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 的有用提示 🔗︎