WindowsOS上でのDocker、Kubernetes(kind)の環境構築備忘録

# 作成の背景
* 環境構築する際の備忘録


# 利用想定環境
* wsl2インストール済みのWindows OS(10または11)上に環境構築することを想定して記載

# インストールが必要なもの
1. wsl2(導入済み前提、ここでは省略)
2. Docker Desktop
3. kubectl
4. kind

# Docker環境の構築

## Docker Desktopのインストール

1. Dockerのページにアクセス、「Download Docker Desktop」を押下
![dockerインストール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4029294/1f2c7762-f2a5-472c-87e1-90edeb61058e.png)
2. ダウンロードしたインストーラーを起動
3. Configuratiuon画面で2つともチェックボックス入った状態でOK押下
    * wsl2でのdocker利用を想定しているため、Hyper-Vでdocker利用したい場合はチェックボックス外す

    ![dockerインストール2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4029294/d467bca7-5b28-4ac9-ae81-5e304c49d376.png)
4. Docker Desktopのインストールが始まる
![dockerインストール3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4029294/8c45dc6b-bcfa-4845-9754-bced372480d2.png)
5. インストールが完了すると「Close and restart」と出てくるので、押下してPCの再起動を行う
![dockerインストール4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4029294/c6feaad3-6983-4e53-aa6e-fae3ab64ff4c.png)
6. PC再起動後、自動でDocker Desktopが起動する、Acceptを押下
![dockerインストール5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4029294/bd559f07-2227-4baa-9589-2dd8842285f7.png)
7. Welcome to Dockerの画面が出てくる、個人利用なのでPersonalを押下、Dockerアカウントのログインを促されるが、ログインの必要ないのでSkipを押下
![dockerインストール6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4029294/6f804270-1fdb-40fb-82ed-aacf63db5ceb.png)
8. アンケートの画面が出てくる、適当なものを押下
![dockerインストール7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4029294/f82df50a-cc82-46d7-a856-e883d901aa89.png)
9. こちらの画面が出ればDocker Desktopを利用可能になる
![dockerインストール8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4029294/b8b6eadd-0460-4911-ba56-7b9b143c293a.png)
10. Windows PowerShellを起動、Dockerコマンドを試し打ち
    * バージョン確認、hello-worldコンテナの起動が正常にできているのでDocker環境の構築は完了。
    ```
    # Dockerのバージョンを確認
    docker --version
    # hello-worldコンテナの実行
    docker container run hello-world
    ```
    ![dockerインストール9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4029294/2fb62b95-de29-4a8c-a764-a7c8a7a1a7b7.png)

# Kubernetes環境の構築

## kubectlのインストール
* 詳細はKubernetesのインストールページを参照(https://kubernetes.io/ja/docs/tasks/tools/install-kubectl-windows/)

1. 最新版のkubectlバイナリファイルをインストールする(作成当時の最新版はv1.32.0)
    ```
    curl.exe -LO "https://dl.k8s.io/release/v1.32.0/bin/windows/amd64/kubectl.exe"
    ```
2. バイナリファイルの検証を行う
    ```
    curl.exe -LO "https://dl.k8s.io/v1.32.0/bin/windows/amd64/kubectl.exe.sha256"
    CertUtil -hashfile kubectl.exe SHA256
    $(Get-FileHash -Algorithm SHA256 .\kubectl.exe).Hash -eq $(Get-Content .\kubectl.exe.sha256)
    ```
    ![kubectlインストール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4029294/e2639d89-057e-440d-85e7-b9bf5a41baa6.png)
3. 環境変数の設定、PATH環境変数にkubectl実行ファイルまでのパスを設定する
    * C:\<任意のパス>\kubernetes\binフォルダを作成し、そちらにkubectl.exeを配置した
    * 環境変数PATHにC:\<任意のパス>\kubernetes\binを追加し、パスを通しておく
    * C:\Program Files\Docker\Docker\resources\bin内にもkubectlが存在し、こちらのkubectlはバージョンが古い(確認したところv1.31.4とかだった)ため、先ほど追加したkubernetesが上になるように環境変数を設定

    ![kubectlインストール2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4029294/d8b8adb4-312b-4b5d-a961-4c35fbe58558.png)
4. kubectlのバージョンを確認
    ```
    kubectl version --client
    ```
    ![kubectlインストール3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4029294/c98cc247-d757-4d60-874e-59399ee08960.png)

## ローカルクラスタの環境構築
* 今回はkindでローカル環境の構築を行う

## kindとは
* ローカル環境でクラスタ構築が可能なツール。マルチノードクラスタを作成できる。

## kindのインストール
詳細はkindのインストールページを参照(https://kind.sigs.k8s.io/docs/user/quick-start/)

1. kind実行ファイルのインストール
    * 下記コマンドを実行し、バイナリファイルをインストール
    ```
    # kind-windows-amd64.exeのインストール
    curl.exe -Lo kind-windows-amd64.exe https://kind.sigs.k8s.io/dl/v0.27.0/kind-windows-amd64
    ```
2. インストールしたkind-windows-amd64.exeをkind.exeにリネーム、kubectlインストール時に通したパス配下に配置
    * kindもパスを通さないと使えない
    ```
    # インストールしたkind-windows-amd64.exeを実行可能なファイル名(kind.exe)としてリネーム配置
    Move-Item .\kind-windows-amd64.exe C:\<任意のパス>\kubernetes\bin\kind.exe
    ```
    **上記のやり方だとダメな時**
    * wingetコマンドを使ってパッケージのインストール
    ```
    winget install Kubernetes.kind
    ```
3. kindでkubernetesクラスタの作成を行う
    ```
    kind create cluster
    ```
    * 下記画面のように表示が出ていれば完了

    ![kind環境構築3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4029294/b5d36ed6-16ce-48c7-9e54-50f1b4ff7ed5.png)
4. kubectlを利用してクラスタと接続できることを確認
    ```
    kubectl cluster-info --contect kind-kind
    ```
    * 下記画面のような表示が出ていればkindで作成したクラスタと接続できている
    * これでKubernetesのローカル実行環境が作成できた

    ![kind環境構築4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4029294/e6d1af1e-2780-4ec8-9c0b-1b9883bb218e.png)
5. クラスタの削除
* クラスタが必要でない場合は削除する
    ```
    kind delete cluster
    ```

# 所感
* これまで「パスを通す」が分からなかったけどなんとなくわかったのでたぶん成長した