Help us understand the problem. What is going on with this article?

Minikube On Ubuntu 18.04

More than 1 year has passed since last update.

Minikubeの重要性について

まずは何故こんな記事を書くことになったかというところからお話ししたい。皆はKubernetesにApplicationをDeployする時にどのような工程を踏んでいるだろうか。もし、Dockerで動作しているものがそのままKubernetesでも簡単に動くものだと考えている方がいるなら、残念ながら私と同様大きな失敗をしてしまうことだろう。Komposeなるものが世の中に存在しているくらいだからDockerからのKubernetesへの移行はそれほど高くないものだと思っていた。しかし、KubernetesはKubernetesの考えに基づいてDeployされるものだからDocker Imageだけあれば何とかなるななどという簡単な話ではないのだ。この変換部分について今のところMinikubeが一番利用価値の高いものだと思ったのでここに記載しておくことにする。

環境

仮想環境上に立てることをお勧めする。MAC UserはきっとLocalで立てておけばそれほど困らないだろうが、チーム内で共通の環境を利用するためにも。Minikube事態をサーバとして提供できることが望ましいだろう。
ということで以下の環境で試してみた…

  • Ubuntu Desktop 18.04 LTS
  • docker 17.12.1-ce
  • vSphere 6.5
  • 4 vCPU, 16 GB Memory
  • VNC(後述するがMinikubeは外からアクセスできないので必要)

Install

1 VM作成

今回はvSphere上でUbuntu Linux 64 bitで作成。基本的に2018/6/1日時点では仮想のバックエンドと連携するのは難しいと考えた方がよいだろう。頑張ってISOからインストールしよう。インストール方法は特に記載しない。欲しければコメントをいただきたい。Desktopの場合デフォルトでSSH Serverが入っていないので要注意。

2 Docker & kubectl Setup

Installing kubeadm
まずはDockerのセットアップを行う。特に方法は問わないが上記のものが参考になる。Ubuntu環境なので以下のコマンドでセットアップを行う。

apt-get update
apt-get install -y docker.io

or install Docker CE 17.03 from Docker’s repositories for Ubuntu or Debian:

apt-get update
apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
add-apt-repository "deb https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") $(lsb_release -cs) stable"
apt-get update && apt-get install -y docker-ce=$(apt-cache madison docker-ce | grep 17.03 | head -1 | awk '{print $3}')

Kubectlをインストールする。kubeletやkubeadmは必要ない気がするが、動いたのでそのまま転記しておく。

apt-get update && apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl

3 Minikube Setup

Minikube

そのまま転記するが以下のコマンドでMinikubeをセットアップ

curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube
curl -Lo kubectl 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

export MINIKUBE_WANTUPDATENOTIFICATION=false
export MINIKUBE_WANTREPORTERRORPROMPT=false
export MINIKUBE_HOME=$HOME
export CHANGE_MINIKUBE_NONE_USER=true
mkdir -p $HOME/.kube
touch $HOME/.kube/config

export KUBECONFIG=$HOME/.kube/config
sudo -E ./minikube start --vm-driver=none

# this for loop waits until kubectl can access the api server that Minikube has created
for i in {1..150}; do # timeout for 5 minutes
   ./kubectl get po &> /dev/null
   if [ $? -ne 1 ]; then
      break
  fi
  sleep 2
done

# kubectl commands are now able to interact with Minikube cluster

4 Minikube Start & Verify

これもそのまま転記する。

$ minikube start
Starting local Kubernetes v1.7.5 cluster...
Starting VM...
SSH-ing files into VM...
Setting up certs...
Starting cluster components...
Connecting to cluster...
Setting up kubeconfig...
Kubectl is now configured to use the cluster.

$ kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.4 --port=8080
deployment "hello-minikube" created
$ kubectl expose deployment hello-minikube --type=NodePort
service "hello-minikube" exposed

# We have now launched an echoserver pod but we have to wait until the pod is up before curling/accessing it
# via the exposed service.
# To check whether the pod is up and running we can use the following:
$ kubectl get pod
NAME                              READY     STATUS              RESTARTS   AGE
hello-minikube-3383150820-vctvh   1/1       ContainerCreating   0          3s
# We can see that the pod is still being created from the ContainerCreating status
$ kubectl get pod
NAME                              READY     STATUS    RESTARTS   AGE
hello-minikube-3383150820-vctvh   1/1       Running   0          13s
# We can see that the pod is now Running and we will now be able to curl it:
$ curl $(minikube service hello-minikube --url)
CLIENT VALUES:
client_address=192.168.99.1
command=GET
real path=/
...
$ kubectl delete service hello-minikube
service "hello-minikube" deleted
$ kubectl delete deployment hello-minikube
deployment "hello-minikube" deleted
$ minikube stop
Stopping local Kubernetes cluster...
Machine stopped.

4 VNC

冒頭に記載させていただいているが、Minikubeは外からのアクセスができないのでLocal上で動作確認をする以外ない。そのためLocal上でアクセスするDesktop環境が必要になるのだ。仮想の場合仮想コンソールをそのまま利用してもよいが、使い勝手が悪いのでVNCでアクセスできるようにしておくことをお勧めする。

Ubuntu VNC

上記リンクを参考にDesktop Shareを有効にする。
Settings --> Sharing --> Screen Sharing
ON, Allow Connections to control the screen, Require a password, Wired Connection
上記のものにそれぞれチェックをして閉じる。

user01@user01-virtual-machine:~$ gsettings set org.gnome.Vino require-encryption false

上記コマンドをコンソールのユーザとして発行。sudo しない。暗号化オプションに関する設定だが現状Clientとの相性が悪いのでOffにしておくことをお勧めする。

root@user01-virtual-machine:~# minikube dashboard
Opening kubernetes dashboard in default browser...
/usr/bin/xdg-open: 851: /usr/bin/xdg-open: www-browser: not found
/usr/bin/xdg-open: 851: /usr/bin/xdg-open: links2: not found
/usr/bin/xdg-open: 851: /usr/bin/xdg-open: elinks: not found
/usr/bin/xdg-open: 851: /usr/bin/xdg-open: links: not found
/usr/bin/xdg-open: 851: /usr/bin/xdg-open: lynx: not found
/usr/bin/xdg-open: 851: /usr/bin/xdg-open: w3m: not found
xdg-open: no method available for opening 'http://"IP Address":30000'

上記を実行して動作確認を行う。これはkubectlが実行できるユーザでやる必要があるので注意。普通はroot。うまく立ち上がればVNC上のブラウザで以下のURLにアクセスする。IPやPortは環境に合わせて変更されるべし。
http://"IP Address":30000

感想

Minikube自体をServer提供することに疑問を持たれる方も多いかもしれませんが、きっとあとから何かと役に立つ(実際ないとこまった、別途記載)と思うので是非Kubernetesを始めるときはここから挑戦してみてください。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away