見出し画像

【CKAD対策】Windows WSL2にKubernetesを構築して、すきま時間に試験勉強ができるようにする


はじめに

Certified Kubernetes Application Developer (CKAD)の練習環境としてWindows 11上でWSL2環境にKubernetesクラスターとCLIコマンドを構築する手順をまとめます。

この記事では、bash上でvimやkubectlを使ってアプリケーションをデプロイすることを想定して、以下のソフトウェアをインストールします。

  • OS:Ubuntu

  • コンテナーエンジン:Docker

  • Kubernetesクラスター構築:Kind

  • Kubernetes CLI: Kubectl

  • Kubernetesパッケージマネージャー:Helm

KubernetesはCKADが使っているのと同じv1.32をインストールします。

多くの受験者はUdemyやKodeKloud、Killer Shellのラボ環境を使ってCKADの準備をすると思いますが、それとは別に、いつでも触れる自分専用の演習環境があると便利です。

Windows WSL2上にKubernetes環境を作っておけば、ちょっとした空き時間にvimやkubectlを使ったデプロイやトラブルシュートの練習をすることができます。WSL2 Ubuntuはとても動作が軽くて快適です。

構築環境

筆者のPCは以下のような構成になっています。

  • ThinkPad P16s Gen 3

  • CPU: Intel Core Ultra 9 185H 2.30 GHz

  • Memory: 64.0 GB

  • OS: Windows 11 Home 24H2

インストールの前提

WSL2には複数のディストリビューションをインストールすることが可能ですが、この記事では手順を簡単にするため、WSL2には何もインストールされていない状態で、Ubuntuを一つだけインストールすることにします(すでにWSL2を使いこなしている方はUbuntuの追加は容易に対応できると思いますので)。

インストール手順について

基本的にほとんどコピペだけでインストール作業は完結しますが、インストール中に出力されたログにエラーが含まれていないか必ず確認するようにしてください。

エラーメッセージを見ても対処できない場合は、記事の最後に「WSL2アンインストール」をまとめておきましたので、WSL2環境をリセットしてから再度試してみてください。

Ubuntuのインストール

Linux 用 Windows サブシステムの有効化

[コントロールパネル] > [プログラム] > [Windowsの機能の有効化または無効化] を開き、[Linux 用 Windows サブシステム] にチェックを入れます。

Ubuntuのインストール

Windows PowerShellを起動します。
wsl --install -d Ubuntuを実行するとUbuntuがインストールされます。

PS C:\Users\xxxxx> wsl --install -d Ubuntu
ダウンロード中: Ubuntu
インストール中: Ubuntu
ディストリビューションが正常にインストールされました。'wsl.exe -d Ubuntu' を使用して起動できます

wsl -d Ubuntuを実行するとUbuntuが起動します。最初の方でデフォルトユーザーアカウント名とパスワードをきかれるので入力します(ここでは例として、ユーザー名student、パスワードstudentとします)。

PS C:\Users\xxxxx> wsl -d Ubuntu
Provisioning the new WSL instance Ubuntu
This might take a while...
Create a default Unix user account: student
New password:
Retype new password:
passwd: password updated successfully
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Welcome to Ubuntu 24.04.2 LTS (GNU/Linux 5.15.167.4-microsoft-standard-WSL2 x86_64)
<略>
This message is shown once a day. To disable it please create the
/home/student/.hushlogin file.
student@eva05:/mnt/c/Users/xxxxx$

Ubuntuの起動が完了するとBashのプロンプトが表示されます。

student@eva05:/mnt/c/Users/xxxxx$ whoami
student

student@eva05:/mnt/c/Users/xxxxx$ echo $SHELL
/bin/bash


注意

bashのプロンプトを見ると、student@eva05:/mnt/c/Users/xxxxx$のように表示されています (eva05は筆者のPCのホスト名です)。この時点でカレントディレクトリはWindowsユーザーのホームディレクトリが設定されています。

Ubuntuを起動したときの開始ディレクトリがWindowsのディレクトリなのは気持ち悪いので、この手順の後半でUbuntuのプロファイル設定を修正します。今はとりあえず cd ~ を叩いてUbuntuのホームディレクトリに変更しておいてください。

student@eva05:/mnt/c/Users/xxxxx$ cd ~
student@eva05:~$ pwd
/home/student

以後の説明ではUbuntuのプロンプトは$と省略します。

Ubuntuのアップデート

Ubuntuのアップデートをします。sudoを使って一時的にroot権限でコマンドを実行しますので、最初にパスワードの入力が求められます。先ほど作成したユーザーのパスワードを入力して先に進んでください。

sudo apt update
sudo apt upgrade -y

/etc/os-releaseの内容を見てUbuntuのバージョンを確認します。ログからUbuntu 24.04.2 LTSがインストールされたことがわかります。

$ cat /etc/os-release | head -1
PRETTY_NAME="Ubuntu 24.04.2 LTS"

Dockerのインストール

Dockerのインストール方法は、最新版のドキュメントを参考にしてください。以下はこの記事の執筆時点での手順になります。

Dockerインストール前の準備

まず、DockerのオフィシャルGPGキーのインストールをします。

sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

次にApt sourcesへのリポジトリの追加設定です。

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

Dockerパッケージのインストール
ここまで準備できたらDocker関連のパッケージをインストールします。

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

Docker動作確認

ここまでの手順が正しければ、rootになってdockerコマンドを実行すると成功するはずです。

$ sudo docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

ところがsudoをつけずにstudentユーザーで実行するとpermission deniedエラーになります。

$ docker ps
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.48/containers/json": dial unix /var/run/docker.sock: connect: permission denied

一般ユーザーがDockerデーモンにアクセスするための設定

ここまでの設定ではrootしかDockerデーモンにアクセスできません。一般ユーザーがDockerデーモンにアクセスできるように、ユーザーの補助グループとしてdockerグループを追加します。

sudo usermod -aG docker $USER

この設定を反映させるにはUbuntuを再起動させる必要があります。

Ubuntuの再起動

UbuntuのシェルからCtrl-Dで抜けて、PowerShellからUbuntuの再起動を実行します。rebootコマンドは機能しません。Ubuntu内の単一コマンドで再起動する方法はないようです。

(1) Ubuntu停止手順

  • wsl -l -vコマンドでUbuntuがRunningであることを確認します。

  • wsl --shutdownコマンドでUbuntuをシャットダウンします。

  • wsl -l -vコマンドコマンドでUbuntuがStoppedであることを確認します。

$ <Ctrl-D>
logout

PS C:\Users\xxxxx> wsl -l -v
  NAME      STATE           VERSION
* Ubuntu    Running         2

PS C:\Users\xxxxx> wsl --shutdown

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

(2) Ubuntu起動手順
wsl
コマンド でUbuntuが起動します。起動後に一般ユーザーでdocker psが動作することを確認します。

PS C:\Users\xxxx> wsl
student@eva05:/mnt/c/Users/xxxxx$

student@eva05:/mnt/c/Users/xxxxx$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

Dockerのバージョンも確認しておきましょう。

$ docker version
Client: Docker Engine - Community
 Version:           28.0.1
 API version:       1.48
 Go version:        go1.23.6
 Git commit:        068a01e
 Built:             Wed Feb 26 10:41:12 2025
 OS/Arch:           linux/amd64
 Context:           default
<略>

Kindのインストール

kindの最新のドキュメントに従ってインストールします。以下はこの記事の執筆時点での手順になります。

この記事を執筆時点でのCKACKADで使われているKubernetesのバージョンはv1.32です。以下の手順ではkind v0.27.0をインストールすることでKubernetes v1.32がインストールされるます。古いバージョンをインストールしたい場合はkindの過去リリースを探してください。

Kindコマンドのインストール

kind v0.27.0をインストールします。

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

インストールしたkindのバージョンを確認します。

 $ kind version
kind v0.27.0 go1.23.6 linux/amd64

単一ノードクラスターの作成

kind crate clusterコマンドでKubernetesクラスターを作成します。

kind create cluster

TIP
kindを使ってマルチノードクラスターを作るのもの簡単ですが、ここまでで十分手順が長くなってしまったので割愛します。作成方法はkindのドキュメントを参照してください。

kindのkindコマンドを使ってkindという名前のクラスターができていることを確認します。

$ kind get clusters
kind

$ kind get nodes
kind-control-planek

Kubectlのインストール

kubectlのインストール方法は、最新版のドキュメントを参考にしてください。以下はこの記事の執筆時点での手順になります。

Kubectlのインストール準備

GPGキーのインストールとApt sourcesへのリポジトリの追加をします。

sudo apt-get install -y apt-transport-https ca-certificates curl gnupg

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
sudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg

echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo chmod 644 /etc/apt/sources.list.d/kubernetes.list

Kubectlパッケージのインストール

準備ができたらkubernetesパッケージのインストールをします。

sudo apt-get update
sudo apt-get install -y kubectl

Kubectlの動作確認

kubectlのバージョンを確認します。

$ kubectl version
Client Version: v1.32.2
Kustomize Version: v5.5.0
Server Version: v1.32.2

簡単なkubectlのコマンドが実行できるか試してみましょう。

$ kubectl get node
NAME                 STATUS   ROLES           AGE     VERSION
kind-control-plane   Ready    control-plane   5m43s   v1.32.2

TIP
以下のようなエラーがでたら、kind-control-planeのコンテナーが停止している可能性がありますので、コンテナーを起動するか、wslコマンドを使って「Ubuntuの再起動」の手順を実施してください。

$ k get node
The connection to the server 127.0.0.1:34711 was refused - did you specify the right host or port?

Kubectlオートコンプリート設定

コマンド入力時にタブ入力補完が有効になるように設定します。さらに、kubectlのaliasとしてkを定義します。この設定は試験対策としては重要ですので、必ず設定しておくことをお勧めします。

cat <<EOF >> ~/.bashrc
source <(kubectl completion bash)
alias k=kubectl
complete -F __start_kubectl k
EOF

source ~/.bashrc

aliasが使えることを確認しましょう。

$ k get node
NAME                 STATUS   ROLES           AGE   VERSION
kind-control-plane   Ready    control-plane   77s   v1.32.2

Helmのインストール

Helmのインストール方法は、最新版のドキュメントを参考にしてください。以下はこの記事の執筆時点での手順になります。

Helmパッケージのインストール

GPGキーのインストールとApt sourcesへのリポジトリの追加をして、helmパッケージをインストールします。

curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
sudo apt-get install apt-transport-https --yes
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm

Helmの動作確認

簡単なhelmコマンドが動作するか試してみましょう。

$ helm repo add examples https://helm.github.io/examples

$ helm install ahoy examples/hello-world

$ k get pod

$ k run test --rm -it --image busybox --restart Never -- wget -O- ahoy-hello-world

Windows Terminalの調整

キーバインドの調整

Ctrl+Vなど、vimのビジュアルモード操作とバッティングするものは削除しておきましょう。CKAD試験環境のTerminalでは、Ctrl+Shift+CとCtrl+Shift+Vを使ってコピペするので、操作に慣れるためにWindows TerminalのキーバインドからCtrl+CとCtrl+Vは削除しておいてもよいかもしれません。

Ubuntuの起動ディレクトリの変更

Ubuntu起動時にbashのホームディレクトリがカレントディレクトリになるように設定します。

[設定]>[プロファイル]>[Ubuntu]を選択して、起動ディレクトリの初期設定を変更します。

注意
プロファイルメニューにUbuntuがなければ、Windows Terminalアプリケーションを閉じて、再度立ち上げてください。

  • [開始ディレクトリ] を変更します。
    %USERPROFILE%  を \wsl$\Ubuntu\home\studentに置き換えます (studentの部分は実際のユーザー名にする)。

  • [親プロセスディレクトリの使用] のチェックをはずします。

  • [保存]を押します。

Ubuntuアプリケーションの実行

WSL2に登録したUbuntuはWindowsアプリケーションとして実行できます。タスクバーにピン留めしておくとよいでしょう。

Ubuntuアプリケーションを起動すると、起動ディレクトリがUbuntuのホームディレクトリになっているはずです。また、kubectlを使ってKubernetesクラスターにアクセスできることも確認しておきましょう。

WSL2アンインストール

インストールの途中でうまくいかなかったらUbuntuをアンインストールして最初から再実行してください。

Ubuntuのアンインストール

Ubuntuをシャットダウンした後で登録解除をします。

PS C:\Uers\xxxxx> wsl -l -v
  NAME      STATE           VERSION
* Ubuntu    Running         2

PS C:\Users\xxxxx> wsl --shutdown 

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

PS C:\Users\xxxxx> wsl --unregister Ubuntu
登録解除。
この操作を正しく終了しました。

PS C:\Users\xxxxx> wsl -l -v
Linux 用 Windows サブシステムにインストールされているディストリビューションはありません。
この問題を解決するには、以下の手順に従ってディストリビューションをインストールしてください:

'wsl.exe --list --online' を使用して利用可能な配布を一覧表示する
および 'wsl.exe --install <Distro>' を使用してインストールしてください。

Ubuntuプロファイルの削除

[設定]>[プロファイル]>[Ubuntu] を選択して、Ubuntuプロファイルを削除します。

さいごに

CKAD受験前の練習台として、今回の手順でWindows WSL2上にKubernetesを構築してみました。実際にCKAD Exercisesを使ってkubectlコマンドの練習ができたので、学習環境として十分使えると思います。

尚、この記事には、以下の項目も含める予定だったのですが、長くなってしまったので割愛しました。余裕のある方はチャレンジしてみてください。

・docker completion 設定
・kind completion 設定
・helm completion 設定
・kindでのマルチノードクラスターの構築

参考リンク

Windows WSLやWindows Terminalを調べるにあたり、主に以下のブログを参考にしました。



いいなと思ったら応援しよう!