kubectlコマンドをWindows 10にインストールしてみた

# はじめに
[以前の記事](https://qiita.com/fukunagt/items/f7994f8fb32a9b758c6a)で構築したK3sに、Windowsからkubectlで操作できるようにしてみました。

# 参考にサイト
- Windows上でのkubectlのインストールおよびセットアップ
  - https://kubernetes.io/ja/docs/tasks/tools/install-kubectl-windows/
- configファイルの作成
  - https://www.guide2wsl.com/k3s/

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

# kubectl.exeのインストール
1. 以下のページを参考に、kubectl.exeファイルを任意の場所に保存してください。
   - https://kubernetes.io/ja/docs/tasks/tools/install-kubectl-windows/
1. 以下のコマンドを実行し、環境変数`Path`にkubectl.exeコマンドを保存したディレクトリを追加してください。
   ```ps
   Set-Item Env:Path $Env:Path";<kubectl.exeを保存したディレクトリ>"
   ```
# configファイルの作成
1. Windowsのユーザのホームディレクトリに移動してください。
   ```ps
   cd $Env:HOMEPATH
   ```
1. `.kube`ディレクトリを作成してください。
   ```ps
   mkdir .kube
   ```
1. `.kube`ディレクトリに移動してください。
   ```ps
   cd .kube
   ```
1. configファイルを作成してください。
   ```ps
   New-Item config -type file
   ```
1. K3sを動かしているLinuxにログインし、以下のコマンドを実行してください。
   ```bash
   sudo k3s kubectl config view --raw
   ```
1. Visual Studio Codeなどでconfigファイルを開き、`sudo k3s kubectl config view --raw`の実行結果を貼り付けてください。
   ```yaml
   apiVersion: v1
   clusters:
   - cluster:
       certificate-authority-data: (snip)
       server: https://127.0.0.1:6443
     name: default
   contexts:
   - context:
       cluster: default
       user: default
     name: default
   current-context: default
   kind: Config
   preferences: {}
   users:
   - name: default
     user:
       client-certificate-data: (snip)
       client-key-data: (snip)   
   ```
1. IPアドレスが、127.0.0.1となっている個所を、LinuxのIPアドレス (私の環境では172.23.210.56でした) に変更してください。

# kubectlコマンドの実行
1. 任意のディレクトリに移動し、kubectl.exeを実行してください。
   ```
   PS C:\> kubectl.exe get node
   NAME                   STATUS   ROLES                  AGE   VERSION
   node/desktop-1be4jse   Ready    control-plane,master   33h   v1.30.0+k3s1
   ```

# Podの作成
- Windowsからkubectl.exeを実行し、NGINXのPodが起動できるか試しました。
  - 本当はMariaDBのPodでも起動しようかと思ったのですが、ちょっと長くなりそうだったので、[以前の記事](https://qiita.com/fukunagt/items/ea5cdb5ff0361f783c55)と同じくNGINXにしました。
1. Windowsの任意のディレクトリ (e.g., C:\Users\foo\k3s) に、nginx.yamlファイルを作成してください。
   ```ps
   New-Item nginx.yaml -type file
   ```
1. Visual Studio Codeなどで、nginx.yamlを開き、以下のように編集してください。
   ```yaml
   apiVersion: v1
   kind: Pod
   metadata:
     name: nginx
     labels:
       app: nginx
   spec:
     containers:
       - name: nginx
         image: nginx
         ports:
         - containerPort: 80
   ---
   apiVersion: v1
   kind: Service
   metadata:
     name: nginx
   spec:
     type: NodePort
     ports:
       - name: nginx
         protocol: TCP
         port: 80
         targetPort: 80
         nodePort: 30080
     selector:
       app: nginx
   ```
1. kubectl.exeで、NGINXのPodと、ポートフォワードのためのServiceを作成してください。
   ```ps
   kubectl.exe apply -f nginx.yaml
   ```
1. Podが作成されていることを確認してください。
   ```
   PS C:\> kubectl.exe get pod     
   NAME    READY   STATUS    RESTARTS   AGE
   nginx   1/1     Running   0          52m
   ```
1. curlコマンドで、NIGNXにアクセスできることを確認してください。
   ```ps
   curl 172.23.210.56:30080
   ```
   - 実行結果
     ```
     <!DOCTYPE html>
     <html>
     (snip)
     <body>
     <h1>Welcome to nginx!</h1>
     (snip)
     ```

# さいごに
これで、Windowsからもkubectl.exeで、K3sを操作できること確認できました。次はいつになるか分かりませんが、NGINX以外のPodも試してみようと思います。