【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 updateDockerパッケージのインストール
ここまで準備できたらDocker関連のパッケージをインストールします。
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -yDocker動作確認
ここまでの手順が正しければ、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 NAMESDockerのバージョンも確認しておきましょう。
$ 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の最新のドキュメントに従ってインストールします。以下はこの記事の執筆時点での手順になります。
この記事を執筆時点でのCKAやCKADで使われている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 clusterTIP
kindを使ってマルチノードクラスターを作るのもの簡単ですが、ここまでで十分手順が長くなってしまったので割愛します。作成方法はkindのドキュメントを参照してください。
kindのkindコマンドを使ってkindという名前のクラスターができていることを確認します。
$ kind get clusters
kind
$ kind get nodes
kind-control-planekKubectlのインストール
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.listKubectlパッケージのインストール
準備ができたらkubernetesパッケージのインストールをします。
sudo apt-get update
sudo apt-get install -y kubectlKubectlの動作確認
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.2TIP
以下のようなエラーがでたら、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 ~/.bashrcaliasが使えることを確認しましょう。
$ k get node
NAME STATUS ROLES AGE VERSION
kind-control-plane Ready control-plane 77s v1.32.2Helmのインストール
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 helmHelmの動作確認
簡単な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-worldWindows 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を調べるにあたり、主に以下のブログを参考にしました。
