LoginSignup
1
1

More than 3 years have passed since last update.

DockerDesktop(Kubernetes) + WSL環境構築

Posted at

ローカルPCにDcokerDesktopとWSLをインストールし、
Kubernetesをローカル環境で使ってみよう!

■環境

ローカルPCのOS:Windows 10 Pro(Edition:1909)
Docker Desktopバージョン:2.4.0.0(Kubernetes1.18.8)
WSL種別:Ubuntu 18.04 LTS

環境構築のため、Docker DesktopとWSLをインストールする必要があるが、
先にローカルPCにて以下の設定をしないといけない。

●Hyper-V有効化、Linux用Windowsサブシステム有効化

ローカルPCにてスタートボタンをクリックし、設定画面を開いて以下に移動する
「アプリ」⇒「プログラムと機能」⇒「Windowsの機能の有効化または無効化」
リストからHyper-VとLinux用Windowsサブシステムを有効化する。
(再起動を求められるので、再起動しましょ)
local_setting.png

●vmcompute.exeのCFG設定

ローカルPCにてスタートボタンをクリックし、設定画面を開いて以下に移動する
「更新とセキュリティ」⇒「Windowsセキュリティ」⇒「アプリとブラウザの制御」⇒「Exploit protection の設定」⇒「プログラム設定」
vmcompute.exeの編集画面から「制御フローガード(CFG)」⇒「厳密なCFGを使用する」のチェックを外す。
cfg.png
(再起動を求められるので、再起動しましょ)

ここまで出来たら、次にDocker DesktopとWSLをインストールする。

●Docker Desktopインストール

今回はKubernetes1.18を使いたいので、1.18が対応されているDocker Desktop 2.4.0.0をダウンロードしてインストールしよう
ダウンロード:Docker Desktop2.4.0.0
インストールの時やインストール後、バージョンアップ画面が出たら、Skipをする。
Docker Desktopバージョンによって対応されているkubernetesのバージョンが異なるので、アップデートしたらダメ!
dockerdesktop_no_update.png

インストール時に以下の画面が出たら、「Install required Windows compomnets for WSL 2」を外してインストールする。
そもそもWindows 10 Pro(Edition:1909)でWSL2は使えない。
WSL2を使うためにはbuild editionが2004以上のものにアップデートしないといけないし、
WSL2を使ってみたけど、なんか怪しい気がするのでここでWSL2は使わない。
dockerdesktop_install_start.png

次の画面が出たら、インストール完了~
dockerdesktop_install_end.png

インストール完了後、勝手にDocker Desktopが起動されるはずだが、
じゃない場合はデスクトップからDocker Desktopアイコンをクリックして起動させる。
kubernetes使用のため、次の画面でSettingsボタンをクリックして諸々設定を行う。
dockerdesktop_setting.png

General画面で以下の項目のチェックを外す。
●automatically check for updates
●Use the WSL 2 based engine
dockerdesktop_setting_general.png

Kubernetes画面で以下の項目のチェックを入れる。
●Enable Kubernetes
dockerdesktop_setting_kubernetes.png
「Apply & Restart」をクリックして、以下の画面が出たら、installをクリックしてkubernetesをインストールする。
dockerdesktop_setting_kubernetes_install.png

Kubernetes初期化のため、Docker Desktopが色々頑張っているので、終わるまで待つ!
dockerdesktop_setting_kubernetes_install2.png

以下の画面のように「Start a Kubernetes single-node cluster when starting Docker Desktop.」が表示されたら、終わり~
dockerdesktop_setting_kubernetes_install3.png

●WSLインストール

WSLをローカルPCに入れなくても実はWindowsのcliでDocker Desktopで設置したkubernetesの操作はできるが、
Windows野郎のcliではできないことが多すぎて個人的には使い勝手が悪すぎる:pensive:
なので、Linux様のcliが使えるwslをインストールするぞ!

デスクトップの検索バーにてstoreを検索してMicrosoft Storeを実行する。
Store画面にて検索バーから「wsl」を検索する。
wsl_search.png
ここではUbuntu 18.04 LTSを使うので、該当画面をクリックしよ
wsl_install.png
インストールボタンをクリックしてインストールする。
Mircrosoftのログイン画面が表示されるけど、ログインしなくてもいいので、ログイン画面は閉じる。
インストールが終わったら、次の画面で「起動」ボタンをクリックしてWSLを起動する。
wsl_run.png
起動後、しばらく待つとユーザー作成画面が表示されるので、好みのユーザー名でユーザーを作成する
wsl_createuser.png
ユーザー作成が終わって、以下の画面みたいに表示されたら、WSL使用が可能になる。
wsl_createuserend.png

●Kubernetesの初期設定

ここからの作業はすべて設置したWSLにてroot権限で行う

#root権限に変更
sudo su -

# 一応、最新に更新
root@wsl:~# apt-get update

# cliでjqが使いたいので、jqインストール
root@wsl:~# apt-get -y install jq

# kubectlコマンドのリンク作成
# Docker Desktop設置時にkubectlコマンドも設置されるので、windowsのkubectlを使う
root@wsl:~# ln -s /mnt/c/'Program Files'/Docker/Docker/resources/bin/kubectl.exe /usr/local/bin/kubectl

# dockerイメージ作成もしたいので、dockerコマンドのリンク作成
# Docker Desktop設置時にdockerコマンドも設置されるので、windowsのdockerを使う
root@wsl:~# ln -s /mnt/c/'Program Files'/Docker/Docker/resources/docker.exe  /usr/local/bin/docker

# kubectlのバージョン確認
root@wsl:~# kubectl version
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.8", GitCommit:"9f2892aab98fe339f3bd70e3c470144299398ace", GitTreeState:"clean", BuildDate:"2020-08-13T16:12:48Z", GoVersion:"go1.1
3.15", Compiler:"gc", Platform:"windows/amd64"}
Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.8", GitCommit:"9f2892aab98fe339f3bd70e3c470144299398ace", GitTreeState:"clean", BuildDate:"2020-08-13T16:04:18Z", GoVersion:"go1.1
3.15", Compiler:"gc", Platform:"linux/amd64"}

root@wsl:~# kubectl get all -A
NAMESPACE     NAME                                         READY   STATUS    RESTARTS   AGE
kube-system   pod/coredns-66bff467f8-rcb9z                 1/1     Running   1          116m
kube-system   pod/coredns-66bff467f8-xlvmg                 1/1     Running   1          116m
kube-system   pod/etcd-docker-desktop                      1/1     Running   1          115m
kube-system   pod/kube-apiserver-docker-desktop            1/1     Running   1          115m
kube-system   pod/kube-controller-manager-docker-desktop   1/1     Running   1          114m
kube-system   pod/kube-proxy-pzsrk                         1/1     Running   1          116m
kube-system   pod/kube-scheduler-docker-desktop            1/1     Running   1          115m
kube-system   pod/storage-provisioner                      1/1     Running   2          114m
kube-system   pod/vpnkit-controller                        1/1     Running   1          114m

NAMESPACE     NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
default       service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP                  116m
kube-system   service/kube-dns     ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP,9153/TCP   116m

NAMESPACE     NAME                        DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
kube-system   daemonset.apps/kube-proxy   1         1         1       1            1           kubernetes.io/os=linux   116m

NAMESPACE     NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
kube-system   deployment.apps/coredns   2/2     2            2           116m

NAMESPACE     NAME                                 DESIRED   CURRENT   READY   AGE
kube-system   replicaset.apps/coredns-66bff467f8   2         2         2       116m

# nginx ingressを使うため、nginx ingress controller設置
root@wsl:~# kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.34.1/deploy/static/provider/cloud/deploy.yaml
namespace/ingress-nginx created
serviceaccount/ingress-nginx created
configmap/ingress-nginx-controller created
clusterrole.rbac.authorization.k8s.io/ingress-nginx created
clusterrolebinding.rbac.authorization.k8s.io/ingress-nginx created
role.rbac.authorization.k8s.io/ingress-nginx created
rolebinding.rbac.authorization.k8s.io/ingress-nginx created
service/ingress-nginx-controller-admission created
service/ingress-nginx-controller created
deployment.apps/ingress-nginx-controller created
validatingwebhookconfiguration.admissionregistration.k8s.io/ingress-nginx-admission created
clusterrole.rbac.authorization.k8s.io/ingress-nginx-admission created
clusterrolebinding.rbac.authorization.k8s.io/ingress-nginx-admission created
job.batch/ingress-nginx-admission-create created
job.batch/ingress-nginx-admission-patch created
role.rbac.authorization.k8s.io/ingress-nginx-admission created
rolebinding.rbac.authorization.k8s.io/ingress-nginx-admission created
serviceaccount/ingress-nginx-admission created

# nginx ingress controller配置確認
root@wsl:~# kubectl get all -n ingress-nginx
NAME                                           READY   STATUS      RESTARTS   AGE
pod/ingress-nginx-admission-create-97cx2       0/1     Completed   0          80s
pod/ingress-nginx-admission-patch-ccrd4        0/1     Completed   0          80s
pod/ingress-nginx-controller-c96557986-bjkcd   0/1     Running     0          90s

NAME                                         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
service/ingress-nginx-controller             LoadBalancer   10.102.159.223   localhost     80:31924/TCP,443:31964/TCP   90s
service/ingress-nginx-controller-admission   ClusterIP      10.108.94.107    <none>        443/TCP                      90s

NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/ingress-nginx-controller   0/1     1            0           90s

NAME                                                 DESIRED   CURRENT   READY   AGE
replicaset.apps/ingress-nginx-controller-c96557986   1         1         0       90s

NAME                                       COMPLETIONS   DURATION   AGE
job.batch/ingress-nginx-admission-create   1/1           21s        90s
job.batch/ingress-nginx-admission-patch    1/1           26s        90s
root@wsl:~#

これで、環境構築は完了!
デプロイしたいアプリケーションに合わせてDocker Imageやyamlを作成してデプロイしてみよう!

1
1
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
1
1