5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MinikubeをHyber_v上のUbuntuのDockerで動かす

Last updated at Posted at 2019-04-05

Kubernetesのお試し環境であるminikubeを動かしてみたくなって、Windows PC(Surface PRO LTE Advanced)のHyper_vにUbuntuを入れて、Ubuntuホスト(Windowsから見たらゲストですが)上のDockerでminikubeを動かしてみました。

Hyper_vの上でUbuntuを入れなくても、minikubeをインストールできます。この場合はHyper_v上にminikubeの仮想マシンが自動的に構築されます。ただ、この方式ですと、kubectlなどの操作をDOSプロンプト、ないしはPowerShellから実行しなければなりません。Linuxの操作に慣れているので、今回はUbuntuを入れて、その中でDocker上にminikubeを導入する方法を選択しました。

#環境
PC OS : Windows10 Enterprise Edition
PC Hypervisor : Windows10に同梱されているHyper_v
Guest OS : Ubuntu 18.04.1 LTS(Hyper_vのクイック作成でメニューに出てくるイメージ)

#手順

##Hyper_vの導入

マイクロソフト社のオフィシャルサイトの手順に沿って、Hyper_vを有効化します。
https://docs.microsoft.com/ja-jp/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v

##Ubuntu仮想マシンの作成

同じく、以下のサイトの手順に沿って、Ubuntu仮想マシンを作成します。
https://docs.microsoft.com/ja-jp/virtualization/hyper-v-on-windows/quick-start/quick-create-virtual-machine

##kubectlの導入

Ubuntu仮想マシンを起動し、コンソールにログインします。
以下の手順はすべて、Ubuntu仮想マシン上での操作です。

kubernetesクラスタを操作するためにCLIである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 -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl

##Dockerの導入

パッケージリポジトリを更新します。

sudo apt-get update

HTTPSでリポジトリにアクセスできるよう必要なパッケージを導入します。

sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

Dockerの公式GPGキーをリポジトリに登録します。

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

安定版であるstableパッケージを取得するよう設定します。

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu   $(lsb_release -cs) stable"

リポジトリを更新します。

sudo apt-get update

Dockerを導入します。

sudo apt-get install docker-ce docker-ce-cli containerd.io

Dockerが正しく導入されたかどうかを確認するためにhello-worldイメージを実行します。

sudo docker run hello-world

##minikubeの導入

curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64

導入はこれで終わり、あっさりです。カレントディレクトリ上にminikubeというファイルができているはずです。
次の手順で実行可能にしてどこからでもパスが取る状態にしておきます。

chmod +x minikube
sudo cp minikube /usr/local/bin
rm minikube

##minikubeの実行

コンテナ上で実行するので、--vm-driver=noneを指定して、minikubeを実行します。

sudo minikube start --vm-driver=none

sudoを付けてroot権限で実行しないとpermissionエラーで止まってしまうのでご注意ください。
--vm-driver=noneを付けないで実行すると、VirtualBox(デフォルト)に対してminikubeを導入しようとするため、失敗します。

kubectlを一般ユーザで実行したいので、次のコマンドで関係ファイルのオーナーを変更しておきます。

sudo chown -R $USER:$GROUP ~/.kube
sudo chown -R $USER:$GROUP ~/.minikube

minikubeの稼働状況を確認します。

> sudo minikube status
host: Running
kubelet: Running
apiserver: Running
kubectl: Correctly Configured: pointing to minikube-vm at 192.168.225.5

kubectlコマンドを実行してみます。

kubectl get nodes

マスターノードが作動していることがわかります。

NAME       STATUS   ROLES    AGE     VERSION
minikube   Ready    master   5m41s   v1.14.0

#トラブルシューティング

Unable to load cached images: loading cached images: loading image /home/matsuo/.minikube/cache/images/k8s.gcr.io/pause_3.1: Docker load /tmp/pause_3.1: running command: docker load -i /tmp/pause_3.1: exit status 1
Failed to update cluster: downloading binaries: copy: error creating file at /usr/bin/kubeadm: open /usr/bin/kubeadm: permission denied

sudoを付けずにminikubeを実行すると上記のエラーが出ます。

こちらのブログを参照しました。

Waiting for pods: apiserver proxy
Error restarting cluster: wait: waiting for k8s-app=kube-proxy: timed out waiting for the condition

Sorry that minikube crashed. If this was unexpected, we would love to hear from you:
  https://github.com/kubernetes/minikube/issues/new
  Problems detected in "kube-addon-manager":
   error: unable to recognize "STDIN": Get https://localhost:8443/api?timeout=32s: dial tcp 127.0.0.1:8443: connect: connection refused
    error: no objects passed to apply
    error: no objects passed to apply

こんなエラーや、

Waiting for pods: apiserver proxy
 Error restarting cluster: wait: waiting for k8s-app=kube-proxy: timed out waiting for the condition

 Sorry that minikube crashed. If this was unexpected, we would love to hear from you:
 https://github.com/kubernetes/minikube/issues/new
 Problems detected in "kube-addon-manager":
 error: no objects passed to apply
 error: no objects passed to apply
 error: no objects passed to apply

こんなエラーが出たら、始めからやり直した方が無難です。

2019/04/03 18:23:23 Unable to read "/home/matsuo/.docker/config.json": open /home/matsuo/.docker/config.json: no such file or directory
2019/04/03 18:23:23 No matching credentials were found, falling back on anonymous

このエラーは気にしなくてもいいみたいです。

> sudo minikube status
NAME       STATUS   ROLES    AGE   VERSION
minikube   Ready    <none>   70m   v1.14.0

上記のようにROLESが<none>の場合は起動に失敗している可能性が高いです。やり直した方が良いでしょう。

#minikube起動に失敗した場合

minikube起動に失敗した場合は、一度リセットするとよいです。

sudo minikube stop
sudo minikube delete
sudo rm -rm ~/.minikube
sudo rm -rm ~/.kube
sudo minikube start --vm-driver=none

起動が成功すると下記のようなメッセージが出ます。これ以外のエラーが出る場合は、一度リセットしてから、再度minikube実行をしてみましょう。

  "minikube" IP address is 192.168.225.5
  Configuring Docker as the container runtime ...
  Version of container runtime is 18.09.4
⌛  Waiting for image downloads to complete ...
✨  Preparing Kubernetes environment ...
  Downloading kubeadm v1.14.0
  Downloading kubelet v1.14.0
  Pulling images required by Kubernetes v1.14.0 ...
  Launching Kubernetes v1.14.0 using kubeadm ... 
⌛  Waiting for pods: apiserver proxy etcd scheduler controller dns
  Configuring cluster permissions ...
樂  Verifying component health .....
魯  Configuring local host environment ...

⚠️  The 'none' driver provides limited isolation and may reduce system security and reliability.
⚠️  For more information, see:
  https://github.com/kubernetes/minikube/blob/master/docs/vmdriver-none.md

⚠️  kubectl and minikube configuration will be stored in /home/matsuo
⚠️  To use kubectl or minikube commands as your own user, you may
⚠️  need to relocate them. For example, to overwrite your own settings:

    ▪ sudo mv /home/matsuo/.kube /home/matsuo/.minikube $HOME
    ▪ sudo chown -R $USER $HOME/.kube $HOME/.minikube

  This can also be done automatically by setting the env var CHANGE_MINIKUBE_NONE_USER=true
  kubectl is now configured to use "minikube"
  Done! Thank you for using minikube!
5
6
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
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?