Debian 12 on WSL2にK3sをインストールしてみた

# はじめに
前々から気になっていたK3sを、Windows 10がインストールされている自宅のPCで動かしてみました。

# 参考にしたサイト
- WSL2へのアップデート
  - https://qiita.com/kekenonono/items/14b725ce3d00cd5281ec
    - `wsl --update`がなかなか完了しなかったため、上記の記事にある手順 (`wsl_update_x64.msi`の実行) でアップデートを行いました。
- K3sのインストール
  - https://www.guide2wsl.com/k3s/

# 構成図
```
+-------------------+
| +---------------+ |
| | +-----------+ | |
| | | +-----+   | | |
| | | | K3s |   | | |
| | | +-----+   | | |
| | | Debian 12 | | |
| | +-----------+ | |
| | WSL2          | |
| +---------------+ |
| Windows 10        |
+-------------------+
```

# 各ソフトウェアのバージョン
## Windows 10
```
C:\> systeminfo
OS 名:                  Microsoft Windows 10 Home
OS バージョン:          10.0.19045 N/A ビルド 19045
(snip)
プロセッサ:             1 プロセッサインストール済みです。
                        [01]: Intel64 Family 6 Model 78 Stepping 3 GenuineIntel ~2400 Mhz
(snip)
物理メモリの合計:       8,106 MB
(snip)
```

## WSL2
```
C:\>wsl --version
WSL バージョン: 2.1.5.0
カーネル バージョン: 5.15.146.1-2
WSLg バージョン: 1.0.60
MSRDC バージョン: 1.2.5105
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows バージョン: 10.0.19045.4291
```

## Debian 12
```
$ cat /etc/*release
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
```

## K3s
```
$ sudo k3s --version 
k3s version v1.30.0+k3s1 (14549535)
go version go1.22.2
```

## kubectl
```
$ sudo k3s kubectl version 
Client Version: v1.30.0+k3s1
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version: v1.30.0+k3s1
```

# WSL2へのアップデート
- 元々、WSLを入れたままほったらかしにしていました。本記事を書くにあたり、以下の記事を参考に、WSL2へのアップデートを行いました。
  - https://qiita.com/kekenonono/items/14b725ce3d00cd5281ec

1. Debianをインストールしてください。
   ```ps
   wsl --install -d Debian
   ```
1. 以下の記事を参考に、`wsl_update_x64.msi`を実行してください。
   - https://qiita.com/kekenonono/items/14b725ce3d00cd5281ec
1. 既定のバージョンをWSL2に変更してください。
   ```ps
   wsl --set-default-version 2
   ```
1. DebianがWSL2で動作するようにしてください。
   ```ps
   wsl --set-version Debian 2
   ```
   ```ps
   PS C:\> wsl -l -v
     NAME      STATE           VERSION
   * Debian    Stopped         2
   ```

# K3sのインストール
1. Debianを起動してください。
   ```ps
   wsl
   ```
   - 初回起動時に、ユーザ名 (e.g., user) とパスワードの設定を行ってください。
1. wgetをインストールしてください。
   ```sh
   sudo apt install -y wget
   ```
1. ホームディレクトリに移動してください。
   ```sh
   cd 
   ```
1. install-k3s.shファイルを作成し、実行権限を付与してください。
   ```sh
   touch install-k3s.sh
   ```
   ```sh
   chmod +x install-k3s.sh
   ```
1. viコマンドなどで、install-k3s.shを以下のように編集してください。
   ```
   K3S_VERSION="v1.30.0+k3s1"
   
   archSuffix=""
   if test "$(uname -m)" = "aarch64"
   then
       archSuffix="-arm64"
   fi
   wget -q "https://github.com/k3s-io/k3s/releases/download/${K3S_VERSION}/k3s${archSuffix}" -O ./k3s
   chmod u+x k3s
   ```
   - `K3S_VERSION`に指定するK3sのバージョンは、以下で確認してください。
     - https://github.com/k3s-io/k3s/releases
1. install-k3s.shを実行してください。
   ```sh
   ./install-k3s.sh
   ```
1. k3sファイルを、/usr/local/sbinにコピーにしてください。
   ```sh
   sudo cp k3s /usr/local/sbin
   ```
1. K3sを起動してください。
   ```sh
   sudo k3s server
   ```
1. 別のターミナルを起動し、K3sが起動していることを確認してください。
   ```
   $ sudo k3s kubectl get node 
   NAME              STATUS   ROLES                  AGE   VERSION
   desktop-1be4jse   Ready    control-plane,master   12h   v1.30.0+k3s1
   ```

# さいごに
WSL2でDebian 12を動かし、K3sをインストールしてみました。本記事ではK3sの起動まで行いました。Podの作成などは、[別の記事](https://qiita.com/fukunagt/items/ea5cdb5ff0361f783c55)にまとめました。

# 補足
- K3s起動後、以下のPodが展開されていました。
  ```sh
  $ sudo k3s kubectl get pod --all-namespaces
  NAMESPACE     NAME                                      READY   STATUS      RESTARTS   AGE
  kube-system   local-path-provisioner-75bb9ff978-stwcn   1/1     Running     0          45m
  kube-system   coredns-576bfc4dc7-whfzg                  1/1     Running     0          45m
  kube-system   metrics-server-557ff575fb-pxv7d           1/1     Running     0          45m
  kube-system   helm-install-traefik-crd-65xs9            0/1     Completed   0          45m
  kube-system   helm-install-traefik-w47qd                0/1     Completed   2          45m
  kube-system   svclb-traefik-78416e1b-9ccjx              2/2     Running     0          43m
  kube-system   traefik-5fb479b77-frm65                   1/1     Running     0          43m
  ```
- metrics-serverが起動しているので、`kubectl top`が使えます。
  ```sh
  $ sudo k3s kubectl top node 
  NAME              CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
  desktop-1be4jse   406m         10%    1422Mi          36%
  ```