dockerとkubectl とminikube をWSL2で用意
以前、こちらの記事で書いた WSL (Wdinwos Subsystem Linux2) の続き。
以下をインストールして、動作確認した。
- docker
- docker hub (Docker registry)
- kubectl
- minikube (Kubernetes cluster)
docker と kubectl をインストールしたのでメモ。kubectl だけでは使えなくて、minikube, dockerhubも必要だと分かったのでそれも追加。^^;)
Docker
ここに書いてあることをそのまま実行しただけ。
なのだが、読んでいると、docker repository の用意、GPGキーの登録、などがあり、実は今まで意識していなかったrepository のシステムも勉強せねばあかんという気にもなりました。
古いものは削除。私の環境では何もインストールされていない状態でした。
sudo apt-get remove docker docker-engine docker.io containerd runc
repository を作る必要があるので、必要なライブラリをインストールして、Dockerのoffcial なGPGキーを登録する。だれがだれを認証するのか?
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
素直に書かれている通り、hello-world を実行してみる。このimage はlocalにインストールされているらしい。
$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b8dfde127a29: Pull complete
Digest: sha256:f2266cbfc127c960fd30e76b7c792dc23b588c0db76233517e1891a4e357d519
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
最初、docker daemonが動いていない、と言われた。service をstart させたら事なきを得たことをメモ。
$ sudo docker run hello-world
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.
$ sudo service docker stop
* Docker already stopped - file /var/run/docker-ssd.pid not found.
$ sudo service docker start
* Starting Docker: docker
docker hub
docker hub については docker-docs-ja に解説ページがあります。特に、docker hub にimage を保存するのは下記に書かれていて、これを参考にしました。
- docker hub にアカウントを作成します。
- ターミナルでdocker login します。これはdocker hub にログインするコマンドです。
$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: xxxyyyzzz
Password:
WARNING! Your password will be stored unencrypted in /home/xxxyyyzzz/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
確かに認証情報がファイルに書かれていました。
$ cat ~/.docker/config.json
{
"auths": {
"https://index.docker.io/v1/": {
"auth": "eHRrZDc3OnRha2VkYTIwSUd="
}
}
}
- 先程のhello-world のイメージがあるとして、これにdocker hubにpushするためのタグをつけます。 ここに書かれているようにimage IDのあとには、 /: というtagにします。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 8 weeks ago 13.3kB
$ docker tag d1165f221234 user77/helloworld:v0
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 8 weeks ago 13.3kB
user77/helloworld v0 d1165f221234 8 weeks ago 13.3kB
で、push します。
$ docker push user77/helloworld:v0
The push refers to repository [docker.io/user77/helloworld]
f22b99068db9: Mounted from library/hello-world
v0: digest: sha256:1b26826f602946860c279fce658f31050cff2c596583af237d971f4629b57792 size: 525
kubectl
続いて、kubernetes を扱いたいので、kubectl をインストールした。
素直に従えばできた。バイナリとってくるだけ。
$ curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
$ chmod +x kubectl
$ sudo mv ./kubectl /usr/local/bin/
$ kubectl version --client
Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.0", GitCommit:"cb303e613a121a29364f75cc67d3d580833a7479", GitTreeState:"clean", BuildDate:"2021-04-08T16:31:21Z", GoVersion:"go1.16.1", Compiler:"gc", Platform:"linux/amd64"}
で、これだけでは実は使い物にならない。何も設定されていない状態でした。
$ kubectl get pods
The connection to the server localhost:8080 was refused - did you specify the right host or port?
$ kubectl config view
apiVersion: v1
clusters: null
contexts: null
current-context: ""
kind: Config
preferences: {}
users: null
解説読んでいたら、
For example, if you are intending to run a Kubernetes cluster on your laptop (locally), you will need a tool like Minikube to be installed first and then re-run the commands stated above.
と書いてありました。 minikube を入れる。
minikube
minikube を入れる。これも公式ページを参考にしました。
https://minikube.sigs.k8s.io/docs/start/
minikube インストール
これもバイナリを入れるだけ。簡単。
$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
$ sudo install minikube-linux-amd64 /usr/local/bin/minikube
動かしてみる
いざ、minikube start
でcluster? を動かすのだが、実は、driver としてdocker を指定しなければならなかった。でもエラーが出る。
$ minikube start --driver=docker
😄 minikube v1.19.0 on Ubuntu 20.04
✨ Using the docker driver based on user configuration
💣 Exiting due to PROVIDER_DOCKER_NEWGRP: "docker version --format -" exit status 1: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.24/version: dial unix /var/run/docker.sock: connect: permission denied
💡 Suggestion: Add your user to the 'docker' group: 'sudo usermod -aG docker $USER && newgrp docker'
📘 Documentation: https://docs.docker.com/engine/install/linux-postinstall/
docker コマンドが普通のユーザで使えない、という典型的な問題に遭遇。
親切にアドバイスを書かれてあるが、その通り。docker グループの登録させる。
(https://www7390uo.sakura.ne.jp/wordpress/archives/631)
$ sudo usermod -aG docker $USER && newgrp docker
その結果、無事に動いた。
$ minikube start --driver=docker
😄 minikube v1.19.0 on Ubuntu 20.04
✨ Using the docker driver based on user configuration
👍 Starting control plane node minikube in cluster minikube
🚜 Pulling base image ...
💾 Downloading Kubernetes v1.20.2 preload ...
> gcr.io/k8s-minikube/kicbase...: 357.67 MiB / 357.67 MiB 100.00% 1.99 MiB
> preloaded-images-k8s-v10-v1...: 491.71 MiB / 491.71 MiB 100.00% 2.55 MiB
🔥 Creating docker container (CPUs=2, Memory=3100MB) ...
❗ This container is having trouble accessing https://k8s.gcr.io
💡 To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/
🐳 Preparing Kubernetes v1.20.2 on Docker 20.10.5 ...
▪ Generating certificates and keys ...
▪ Booting up control plane ...
▪ Configuring RBAC rules ...
🔎 Verifying Kubernetes components...
▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🌟 Enabled addons: storage-provisioner, default-storageclass
🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
動いている感じがする。^^)
$ kubectl cluster-info
Kubernetes control plane is running at https://127.0.0.1:49154
KubeDNS is running at https://127.0.0.1:49154/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
$ kubectl get po -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-74ff55c5b-f2sb9 1/1 Running 0 6m29s
kube-system etcd-minikube 1/1 Running 0 6m36s
kube-system kube-apiserver-minikube 1/1 Running 0 6m36s
kube-system kube-controller-manager-minikube 1/1 Running 0 6m36s
kube-system kube-proxy-9zvzc 1/1 Running 0 6m29s
kube-system kube-scheduler-minikube 1/1 Running 0 6m36s
kube-system storage-provisioner 1/1 Running 0 6m43s
- deployとLoadBalancer の設定をチュートリアルに従って行う。既存のimage をdeploy して service でload balancer を設定してアクセス可能にするというもの。
kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4
kubectl expose deployment hello-minikube --type=NodePort --port=8080
- ここLoadBalancer を expose しても EXTERNAL-IP が のままでしばらくはまりました。解決方法は、別ターミナルで
minikube tunnel
を実行しておく、でした。その結果、EXTERNAL-IPが与えられました。
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-minikube1 LoadBalancer 10.104.80.113 127.0.0.1 8080:31984/TCP 32m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 77m
- きちんと読めてないけれどメモ。
https://kubernetes.io/docs/tutorials/hello-minikube/
https://minikube.sigs.k8s.io/docs/start/
- 動いている minikube のAdd-On が見れました。
$ minikube addons list
- 最後にとりあえずcluster を delete しておいた。
$ minikube delete
🔥 Deleting "minikube" in docker ...
🔥 Deleting container "minikube" ...
🔥 Removing /home/xtkd/.minikube/machines/minikube ...
💀 Removed all traces of the "minikube" cluster.
まとめ
最低限、dockerとKubernetes がWSL2で動くようになった気がする。だが、kubernetesはminikube を導入したが、Google Cloud Platform で使っていたのとは違い、LoadBalancer が簡単には動かなかった。
もっとドキュメントをしっかり読まなければならない。
- https://minikube.sigs.k8s.io/docs/drivers/docker/
kubectl の設定。補完の設定方法とか書いてある。
https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/もう一度心を落ち着けて動かしてみたい。
https://kubernetes.io/ja/docs/tutorials/hello-minikube/
今日は遅いので、もう寝ます。おじさんにはつらい。(2021.04.28 01:53)
編集メモ
- docker hub についてのメモを追加 (2021/05/03)
Author And Source
この問題について(dockerとkubectl とminikube をWSL2で用意), 我々は、より多くの情報をここで見つけました https://qiita.com/XPT60/items/ef9fbe82127b5b559b44著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .