y’s blog

勉強したことのメモなどを書きます

Kubernetesのチュートリアルをやってみる

Kubernetesチュートリアルをやった時のメモです。
チュートリアルページをみると色々な選択肢がありますが、今回は「Kubernetesの基本を学ぶ」というチュートリアルをやりました。
Kubernetesの基本を学ぶ - Kubernetes

使用OSはMacです

HyperVisorをインストールする

VirtualBoxなど、Kubernetesを動作させるためのVMツールをインストールします。
VirtualBoxはhomebrew-caskでインストールできます。(VirtualBoxカーネル拡張機能を含むためシステム環境設定から許可が必要になります)

$ brew cask install virtualbix

もしDockerの入ったLinux環境を使用しているのであれば、下記のオプションを指定VMではなくホスト上で直接Minikubeを動作させることができるそうです。(Minikubeがローカル環境用であることを考えると使用機会はあまりなさそうですが)

--vm-driver=none

Minikubeをインストールする

Minikubeはローカルでの開発に最適化された軽量なKubernetes環境を提供するツールです。
ローカルマシン上にVMを作成し(ここでHyperVisorが必要)、1つのNodeのみを含むKubernetesクラスタをデプロイできます。
macの場合、homebrew-caskでインストールします。

$ brew cask install minikube

起動する

下記のコマンドで(VMが未作成の場合は)VMが作成され、VM上でminikubeが起動します。
この段階ではNode上ではまだ何も起動していません。

$ minikube start

Nodoにpodを配置します。
チュートリアルの例ではgoogle private resistry(gcr)からイメージを取得しています

$ kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.10 --port=8080
deployment.apps "hello-minikube" created

先ほどと同様のコマンドでpodが起動していることが確認できます

$ kubectl get pod
NAME                              READY     STATUS    RESTARTS   AGE
hello-minikube-56cdb79778-zzfl2   1/1       Running   0          1m

クラスタの状態確認

$ kubectl cluster-info
Kubernetes master is running at https://192.168.99.100:8443
KubeDNS is running at https://192.168.99.100:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

この段階ではpod内のコンテナと通信することはできません。
exposeコマンドで外側と通信できるようにします。

$ kubectl expose deployment hello-minikube --type=NodePort
service "hello-minikube" exposed

これでコンテナと通信できるようになりました。

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


Hostname: hello-minikube-56cdb79778-zzfl2

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:32252
    user-agent=curl/7.54.0

Request Body:
    -no body in request-

コンテナを終了するにはdeleteコマンドを使用します

$ kubectl delete services hello-minikube
service "hello-minikube" deleted

$ kubectl delete deployment hello-minikube
deployment.extensions "hello-minikube" deleted

所感

minikubeを使ったチュートリアルを試しましたが、ローカルに最適化されているだけあってとっつきやすかったです。
その反面チュートリアルだけでは実際の運用との間にかなりの乖離があるとも感じました。
下記のようなことを引き続き試していきたいと思います。 - 自前で用意したDockerイメージを利用するにはどうすれば良いか - Pod上で複数のコンテナを動かす方法 - Node上で複数のPodを動かす方法