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を動かす方法