kubenetes導入顛末記 その1

前置き

コンテナに触れようと思い、kubenetesを導入することにしたので、その記録。
導入先はUbuntu 16.04の物理サーバ1台です。

導入方法の決定

kubenetesの導入方法はいろいろあるようですが、とりあえず動かしたいならminikubeがおすすめと記載があるのでそれに従う。

選び方はこちら

選んだのは、Running Kubernetes Locally via Minikube

Kubenetes導入の前にHypervisor導入

手順を見ていくと最初にHypervisorを入れろとある。ただ、VM上に構築しないという手もあるらしい。
記載順などからVirtual Boxが良さそうなのでVirtualBoxを採用。

ということで、まずはVirtualBoxの導入。以下のURLに従ってaptのsourceを指定してインストール。

https://www.virtualbox.org/wiki/Linux_Downloads

minikube導入の前にkubectl導入

以下の通り、こちらもaptのsourceを設定してinstall。

https://kubernetes.io/docs/tasks/tools/install-kubectl/

ちなみにこの状態で kubectl cluster-infoを実行すると以下の通り。

$ kubectl cluster-info
Kubernetes master is running at http://localhost:8080

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
The connection to the server localhost:8080 was refused - did you specify the right host or port?

kubectlのautocompletion設定

ここも前述のガイドにならって設定する。

echo "source <(kubectl completion bash)" >> ~/.bashrc

minikubeの導入

ここでようやくminikubeの導入。

https://github.com/kubernetes/minikube/releases

まだ開発中なのでバージョン毎の導入手順を参考にする。

今回はMinikube v0.28.2を導入する。

と言っても、ダウンロードするだけ。最後のmv先はご自由に。

curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.28.2/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube

とりあえずここまでで導入はできたみたい。

試しに起動

以下のコマンドを実行すると160MBのISOイメージをダウンロード開始するので要注意。その後の処理も時間が掛かり、15分くらい返ってこなかった。。

$ minikube start
Starting local Kubernetes v1.10.0 cluster...
Starting VM...
Downloading Minikube ISO
 160.27 MB / 160.27 MB [============================================] 100.00% 0s
Getting VM IP address...
Moving files into cluster...
Downloading kubeadm v1.10.0
Downloading kubelet v1.10.0
Finished Downloading kubelet v1.10.0
Finished Downloading kubeadm v1.10.0
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
Loading cached images from config file.

このタイミングでkubectl get podしてもリソース無し。

$ kubectl get pod [26/73]
No resources found.

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

上記コマンド実行後30秒くらいでReadyになった。

$ kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-minikube-7c77b68cff-9zpv8 0/1 ContainerCreating 0 22s
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-minikube-7c77b68cff-9zpv8 0/1 ContainerCreating 0 26s
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-minikube-7c77b68cff-9zpv8 0/1 ContainerCreating 0 28s
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-minikube-7c77b68cff-9zpv8 0/1 ContainerCreating 0 28s
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-minikube-7c77b68cff-9zpv8 0/1 ContainerCreating 0 29s
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-minikube-7c77b68cff-9zpv8 1/1 Running 0 30s

以下のコマンドで動作確認。

$ curl $(minikube service hello-minikube --url)


Hostname: hello-minikube-7c77b68cff-9zpv8

Pod Information:
-no pod information available-

Server values:
server_version=nginx: 1.13.3 - lua: 10008

Request Information:
client_address=172.17.0.1
method=GET
real path=/
query=
request_version=1.1
request_scheme=http
request_uri=http://192.168.99.100:8080/

Request Headers:
accept=*/*
host=192.168.99.100:32678
user-agent=curl/7.47.0

Request Body:
-no body in request-

最後にゴミ掃除して終了。

$ kubectl delete services hello-minikube
service "hello-minikube" deleted
$ kubectl delete deployment hello-minikube
deployment.extensions "hello-minikube" deleted
$ minikube stop
Stopping local Kubernetes cluster...
Machine stopped.

つづき(その2)はこちら。