7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

今更ですが Docker Desktop から WSL2 Ubuntu Docker kind に変更してみました(その1)

Last updated at Posted at 2022-05-23

2023/07/13 Docker、Kubernetes、Kind、kubectl の導入コマンドを最新内容に更新

Docker Desktop を使っていましたが。。

Docker Desktop の有償化後、漸く会社の Windows パソコンがリフレッシュされる事になり、開発テスト環境を Docker Desktop から WSL2 に変更したので、WSL2 での Ubuntu および Kubernetes 環境の構築手順(インストール・設定、バックアップ・レストア など)をまとめました。
本稿の内容は Ubuntu と Docker、およびコンテナオーケストレーションは kind(https://kind.sigs.k8s.io/ )を使用した構成になります。kind (Kubernetes in Docker) は名前の通り Kubernetes の各ノードをコンテナで実現する軽量なコンテナオーケストレーション環境であり、開発時の単体テストなどに適したツールです。

WSL の前提は Windows 10 バージョン 2004 以降 (ビルド 19041 以降) または Windows 11 となっています。
今回検証した Windows と Ubuntu のバージョンは、Windows 10 バージョン 21H2(OSビルド 19044.1645)および Ubuntu 20.04.4 LTS です。

Windows の事前準備

「コントロールパネル - プログラムと機能 - Windows の機能の有効化または無効化」で(コントロール パネルの表示はファイルエクスプローラーに、コントロール パネル と入力)、「仮想マシン プラットフォーム」および「Linux 用 Windows サブシステム」にチェックを入れ OS の指示に従い必要に応じて再起動を行います。
クリップボード01_2.jpg
※ Hyper-V は特に必要ありません。 私は VMware Workstation Player も使用しているため、Hyper-V は使用しないのと同時に以下の点に注意しています。
・WSL を起動にする前に VMware Workstation Player のゲストOS の電源を切る
・上記の逆で、VMware を起動する前には WSL をシャットダウンする
・VMware Workstation Player の設定で「Intel VT-x/EPTまたはAMD-V/RVIを仮想化」のチェックを外す

Ubuntu のインストールとWSL の設定

Microsoft Store で Ubuntu を検索して入手します。インストール完了後もまだ開始しないでください!
※ 2022年5月現在で Ubuntu のバージョンは 18.04.5、20.04.4、22.04 が選択可能です。
クリップボード02.jpg

次に Windows PowerShell を管理者で起動して WSL の更新、および Ubuntu が動作する WSL のバージョンを変更します。

PS C:\> wsl --update
PS C:\> wsl --shutdown
PS C:\> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Stopped         1

この時点では WSL のバージョンは 1 になっているので、WSL のバージョンを 2 に変更します。

PS C:\> wsl --set-version Ubuntu-20.04 2

再度 WSL の状態・バージョンを表示して変更された事を確認します。

PS C:\> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Stopped         2

これで WSL2 で Ubuntu を起動する準備が整いました。Windows のメニューに Ubuntu が追加されているので起動して root 以外のユーザー、パスワードを設定します。

Docker のインストール

起動した Ubuntu に Docker 公式ドキュメント(https://docs.docker.com/engine/install/ubuntu/ )の手順で Docker をインストールします。

まずは更新
$ sudo apt update
インストールに必要なパッケージ
$ sudo apt-get install ca-certificates curl gnupg
Docker の公式 GPG キー
$ sudo install -m 0755 -d /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ sudo chmod a+r /etc/apt/keyrings/docker.gpg
Docker のパッケージリポジトリを追加
$ echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
最新版 Docker のインストール( Docker Compose は省略 )
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io

Docker サービスを起動します。

$ sudo service docker start

HelloWorld コンテナを run してみます。

$ sudo docker run --rm hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
・・・<省略>・・・
Hello from Docker!
This message shows that your installation appears to be working correctly.
・・・<省略>・・・

以降 sudo なしで docker コマンドを使用するために Ubuntu 実行ユーザーを docker グループに追加します。

$ sudo usermod -aG docker $USER

設定を有効にするため一旦 Ubuntu を exit
$ exit

Ubuntu 再起動後は Docker の起動も忘れずに

ここまでの手順で Docker を利用する環境が整いました。続いて kind (Kubernetes in Docker) のインストールを行います。

kind (Kubernetes in Docker) のインストール

kind に関するコマンドは基本的にこのドキュメント(https://kind.sigs.k8s.io/ )を参照しています。
kind の前に kubectl を入れておきます。

$ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
$ sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

kind のインストール

$ [ $(uname -m) = x86_64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
$ chmod +x ./kind
$ sudo mv ./kind /usr/local/bin/kind

kind クラスター生成

以下 1つのコマンドで(簡単なテスト環境であれば単純な設定YAMLファイルで)クラスター生成が可能です。
以下の例ではコントロールプレーン マスターノードと 1つのワーカーノードが作成されます。

YAMLファイルの例:mycluster.yml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
$ kind create cluster --config mycluster.yml

クラスターが作成されたら node や pod を確認してみます。

$ kubectl get node -o wide
$ kubectl get pods --all-namespaces -o wide

動作確認

ここまでの手順で簡易検証用のコンテナオーケストレーション環境が出来た筈なので例によって nginx を動かしてみます。

$ kubectl create deployment --image nginx mynginx

kind を入れただけではロードバランサーが使えないのでとりあえず NodePort を作成し、アサインされたポートを確認します(この例では 30005 )。
ロードバランサー( MetalLB )については後続の記事で・・

$ kubectl expose deployment mynginx --port 80 --type=NodePort
$ kubectl get service
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        56m
mynginx      NodePort    10.96.145.251   <none>        80:30005/TCP   39m

ワーカーノードの IPアドレスを確認します。(この例では 172.18.0.2 )

$ kubectl get node -o wide
NAME                 STATUS   ROLES                  AGE   VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE       KERNEL-VERSION                       CONTAINER-RUNTIME
kind-control-plane   Ready    control-plane,master   49m   v1.23.4   172.18.0.3    <none>        Ubuntu 21.10   5.10.102.1-microsoft-standard-WSL2   containerd://1.5.10
kind-worker          Ready    <none>                 49m   v1.23.4   172.18.0.2    <none>        Ubuntu 21.10   5.10.102.1-microsoft-standard-WSL2   containerd://1.5.10

curl コマンドで nginx の動作を確認します。

$ curl -I 172.18.0.2:30005
HTTP/1.1 200 OK
Server: nginx/1.21.6
・・・<省略>・・・

まとめ

Docker Desktop も WSL2 環境からはかなり軽量化されていましたが、本手順で構成した環境はそれよりも更に軽く動作する印象です。kind は開発時などの検証用という位置付けのツールですが、会社のオフィス PC が Windows で私のような「なんちゃって開発者」にとっては、WSL2 Ubuntu 環境は PC を圧迫しない有難い環境と言えそうです。
本稿では書ききれなかった kind 環境でのロードバランサーや、WSL2 のバックアップ・レストア、その他 Hint&tips などの内容は後続の記事にまとめていく予定です。

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?