少しずつ、Kubernetesまわりの勉強を始めてみようかなということで。
Ubuntu Linux 16.04 LTSに、Minikubeをインストールして動かしてみます。
Minikubeというのは、Kubernetesをローカルで動かすためのソフトウェアですね。自分の手元のような環境だと、こういうのがありがたいです。
Minikube自体も前からあったのですが、Minikubeを使うためのソフトウェアがVirtualBoxなどで少し敬遠していたものの、
実はDockerでも動かすことができると聞いて、やってみようかなと。
では、進めていってみましょう。
環境
タイトルにも書いていますが、環境はUbuntu Linux 16.04 LTSで行っています。
$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=16.04 DISTRIB_CODENAME=xenial DISTRIB_DESCRIPTION="Ubuntu 16.04.4 LTS"
インストール
GitHubのREADME.mdを見ながら、インストール。
現時点での最新版はv0.26.1なのですが、うちの環境だと異様にCPUを使う、また2回目以降の挙動がどうにも変で、バージョンを下げて0.25.2を
使ってみることにします。幸い、このバージョンなら動くので。
Unable to start minikube v0.26 #2703
BUG - Minikube 0.26.0 - Ubuntu 17.10 - Unable to restart without error #2707
Minikubeのインストール。
$ curl -Lo minikube https://github.com/kubernetes/minikube/releases/download/v0.25.2/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
確認。
$ minikube version minikube version: v0.25.2
kubectlのインストール。
$ sudo apt-get update && sudo apt-get install -y apt-transport-https $ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - $ sudo sh -c 'cat <<EOF >/etc/apt/sources.list.d/kubernetes.list deb http://apt.kubernetes.io/ kubernetes-xenial main EOF' $ sudo apt-get update $ sudo apt-get install -y kubectl
確認。
$ kubectl version Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.2", GitCommit:"81753b10df112992bf51bbc2c2f85208aad78335", GitTreeState:"clean", BuildDate:"2018-04-27T09:22:21Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"} Unable to connect to the server: net/http: TLS handshake timeout
起動
では、Minikubeを起動してみます。
こちらに沿って。
Linux Continuous Integration without VM Support
「minikube start」で、オプションに「--vm-driver=none」を使うことで、ドライバをDockerとして起動できます。
$ sudo minikube start --vm-driver=none There is a newer version of minikube available (v0.26.1). Download it here: https://github.com/kubernetes/minikube/releases/tag/v0.26.1 To disable this notification, run the following: minikube config set WantUpdateNotification false Starting local Kubernetes v1.9.4 cluster... Starting VM... Getting VM IP address... Moving files into cluster... Downloading localkube binary 163.02 MB / 163.02 MB [============================================] 100.00% 0s 0 B / 65 B [----------------------------------------------------------] 0.00% 65 B / 65 B [======================================================] 100.00% 0sSetting up certs... Connecting to cluster... Setting up kubeconfig... Starting cluster components... Kubectl is now configured to use the cluster. =================== WARNING: IT IS RECOMMENDED NOT TO RUN THE NONE DRIVER ON PERSONAL WORKSTATIONS The 'none' driver will run an insecure kubernetes apiserver as root that may leave the host vulnerable to CSRF attacks When using the none driver, the kubectl config and credentials generated will be root owned and will appear in the root home directory. You will need to move the files to the appropriate location and then set the correct permissions. An example of this is below: sudo mv /root/.kube $HOME/.kube # this will write over any previous configuration sudo chown -R $USER $HOME/.kube sudo chgrp -R $USER $HOME/.kube sudo mv /root/.minikube $HOME/.minikube # this will write over any previous configuration sudo chown -R $USER $HOME/.minikube sudo chgrp -R $USER $HOME/.minikube This can also be done automatically by setting the env var CHANGE_MINIKUBE_NONE_USER=true Loading cached images from config file.
「minikube start」後に、次に実行すべきコマンドが表示されるので、ここはこれにしたがっておきます。
$ sudo chown -R $USER.$USER $HOME/.kube $ sudo chown -R $USER.$USER $HOME/.minikube
DeploymentとServiceの作成。
$ kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.4 --port=8080 deployment.apps "hello-minikube" created $ kubectl expose deployment hello-minikube --type=NodePort service "hello-minikube" exposed
Podの状態を確認してみます。
$ kubectl get pod NAME READY STATUS RESTARTS AGE hello-minikube-c6c6764d-nvr9f 1/1 Running 0 13s
curlで動作確認。
$ curl $(minikube service hello-minikube --url) CLIENT VALUES: client_address=172.17.0.1 command=GET real path=/ query=nil request_version=1.1 request_uri=http://192.168.254.128:8080/ SERVER VALUES: server_version=nginx: 1.10.0 - lua: 10001 HEADERS RECEIVED: accept=*/* host=192.168.254.128:31572 user-agent=curl/7.47.0 BODY: -no body in request-
また、この時に動作しているDockerコンテナは、こんな感じです。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3fe390c8654b k8s.gcr.io/echoserver "nginx -g 'daemon of…" 31 seconds ago Up 30 seconds k8s_hello-minikube_hello-minikube-c6c6764d-8824q_default_b2a3da22-5538-11e8-908f-000c29471a6e_0 ac01183254be gcr.io/google_containers/pause-amd64:3.0 "/pause" 31 seconds ago Up 31 seconds k8s_POD_hello-minikube-c6c6764d-8824q_default_b2a3da22-5538-11e8-908f-000c29471a6e_0 2cee91fc6848 k8s.gcr.io/k8s-dns-sidecar-amd64 "/sidecar --v=2 --lo…" About a minute ago Up About a minute k8s_sidecar_kube-dns-54cccfbdf8-m572j_kube-system_9c815b99-5538-11e8-908f-000c29471a6e_0 403a57ae5136 k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64 "/dnsmasq-nanny -v=2…" About a minute ago Up About a minute k8s_dnsmasq_kube-dns-54cccfbdf8-m572j_kube-system_9c815b99-5538-11e8-908f-000c29471a6e_0 a50ca1f382b4 k8s.gcr.io/k8s-dns-kube-dns-amd64 "/kube-dns --domain=…" About a minute ago Up About a minute k8s_kubedns_kube-dns-54cccfbdf8-m572j_kube-system_9c815b99-5538-11e8-908f-000c29471a6e_0 dfeb724bc721 e94d2f21bc0c "/dashboard --insecu…" About a minute ago Up About a minute k8s_kubernetes-dashboard_kubernetes-dashboard-77d8b98585-wxljr_kube-system_9c5d4ee4-5538-11e8-908f-000c29471a6e_0 6b753de7c34c gcr.io/google_containers/pause-amd64:3.0 "/pause" About a minute ago Up About a minute k8s_POD_kube-dns-54cccfbdf8-m572j_kube-system_9c815b99-5538-11e8-908f-000c29471a6e_0 299bcb3aab05 gcr.io/google_containers/pause-amd64:3.0 "/pause" About a minute ago Up About a minute k8s_POD_kubernetes-dashboard-77d8b98585-wxljr_kube-system_9c5d4ee4-5538-11e8-908f-000c29471a6e_0 4dc66c85f911 gcr.io/k8s-minikube/storage-provisioner "/storage-provisioner" About a minute ago Up About a minute k8s_storage-provisioner_storage-provisioner_kube-system_9bdd26ec-5538-11e8-908f-000c29471a6e_0 be231b0a8af7 gcr.io/google_containers/pause-amd64:3.0 "/pause" About a minute ago Up About a minute k8s_POD_storage-provisioner_kube-system_9bdd26ec-5538-11e8-908f-000c29471a6e_0 1a3b22ed8c70 gcr.io/google-containers/kube-addon-manager "/opt/kube-addons.sh" About a minute ago Up About a minute k8s_kube-addon-manager_kube-addon-manager-ikaruga-ubuntu_kube-system_c4c3188325a93a2d7fb1714e1abf1259_1 c5d0c624aefc gcr.io/google_containers/pause-amd64:3.0 "/pause" About a minute ago Up About a minute k8s_POD_kube-addon-manager-ikaruga-ubuntu_kube-system_c4c3188325a93a2d7fb1714e1abf1259_0
Dockerコンテナだけかと思いきや、ホスト側にもいろいろいたり。
$ ps -ef | grep kube | grep -v 'grep' root 46637 1 25 01:37 ? 00:00:24 /usr/local/bin/localkube --dns-domain=cluster.local --node-ip=192.168.254.128 --generate-certs=false --logtostderr=true --enable-dns=false root 46788 46772 0 01:37 ? 00:00:00 /bin/bash /opt/kube-addons.sh root 47396 47360 0 01:38 ? 00:00:00 /kube-dns --domain=cluster.local. --dns-port=10053 --config-map=kube-dns --v=2 nobody 47602 47577 0 01:38 ? 00:00:00 /sidecar --v=2 --logtostderr --probe=kubedns,127.0.0.1:10053,kubernetes.default.svc.cluster.local.,5,A --probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.cluster.local.,5,A
削除
使い終わったら、ServiceとDeploymentを削除。
$ kubectl delete service hello-minikube service "hello-minikube" deleted $ kubectl delete deployment hello-minikube deployment.extensions "hello-minikube" deleted
Minikubeも停止…
$ sudo minikube stop Stopping local Kubernetes cluster... Machine stopped.
なのですが、なぜか止まりません…。
最終的には、「minikube stop」を飛ばして削除です…。
$ sudo minikube delete
とりあえず、最低限は動かせた気はしますが、いろいろ怪しいです…。
これから、ちょっとずつ慣れて…いけるでしょうか?
ちなみに、minikubeのアンインストールはこちら。
0.26.1は、なにがダメだった?
うちだと、ログにこんな感じに出力されるうえ、CPUリソースを大量に消費します。
[preflight] Running pre-flight checks. [WARNING SystemVerification]: docker version is greater than the most recently validated version. Docker version: 17.12.1-ce. Max validated version: 17.03 [WARNING Swap]: running with swap on is not supported. Please disable swap [WARNING FileExisting-ebtables]: ebtables not found in system path [WARNING FileExisting-ethtool]: ethtool not found in system path [WARNING FileExisting-socat]: socat not found in system path [WARNING FileExisting-crictl]: crictl not found in system path Suggestion: go get github.com/kubernetes-incubator/cri-tools/cmd/crictl Flag --admission-control has been deprecated, Use --enable-admission-plugins or --disable-admission-plugins instead. Will be removed in a future version. [preflight] Some fatal errors occurred: [ERROR Port-10250]: Port 10250 is in use [preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...` : running command: sudo /usr/bin/kubeadm init --config /var/lib/kubeadm.yaml --ignore-preflight-errors=DirAvailable--etc-kubernetes-manifests --ignore-preflight-errors=DirAvailable--data --ignore-preflight-errors=FileAvailable--etc-kubernetes-manifests-kube-scheduler.yaml --ignore-preflight-errors=FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml --ignore-preflight-errors=FileAvailable--etc-kubernetes-manifests-kube-controller-manager.yaml --ignore-preflight-errors=FileAvailable--etc-kubernetes-manifests-etcd.yaml --ignore-preflight-errors=Swap --ignore-preflight-errors=CRI .: exit status 2`
これがどうしても抜けられずに、0.25に下げたらいいよ、みたいなIssueを見かけたので、バージョンを下げたら確かに
起動しました。代わりに、「minikube stop」はなんか止められないのですが…。