Posted at

Macでminikubeを使ってkubernetesクラスタを動かす

More than 1 year has passed since last update.

タイトル通り。

minikubeでローカルにkubenetesクラスタを構築してみる。


インストール

Homebrew-Caskで簡単にインストール出来る。

$ brew cask install minikube


事前準備

$ minikube start

してminikubeを起動する。

そして、kubectlで認識されることを確認する。



$ kubectl config current-context

minikube

minikubeがdockerを内包している形になっているので、環境変数もろもろを書き換える。

$ eval $(minikube docker-env)


ローカルのdockerとminikubeでDockerイメージを共有する

minikubeがdockerを内包している形になっているため


  • docker images

  • (eval $(minikube docker-env) && docker images)

では結果が異なる。

回避するには、eval $(minikube docker-env)してからdocker buildするなどして、minikube環境下Dockerイメージを作って登録するのが手っ取り早い。

あるいは、

docker save <repository>/<image>:<tag> | (eval $(minikube docker-env) && docker load)

とする方が後からでも出来るので手軽かもしれない。

何をやっているかというと、ローカル側のDockerイメージをdocker saveで文字列として書き出して、minikube側で標準入力として受け取ってdocker loadしてDockerイメージとして保存している。

さらに別の方法として少し面倒だが、ローカルにdocker registryを立ててそのregistryにdocker pushしておき、そのregistry上のDockerイメージとして使う、というのもある。

minikubeでinsecure docker registryを使う - Qiita


kubenetesを動かす

何でも良いので適当に作る。

今回はnginxを動かしてみる。

$ kubectl run --image=nginx --port=80 nginx

deployment "nginx" created

$ kubectl expose deployment nginx --port=80 --type=NodePort
service "nginx" exposed

$ kubectl get svc nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx NodePort 10.104.96.71 <none> 80:31485/TCP 1m

これでnginxにアクセスできる...というわけではない。

$ curl '10.104.96.71' -I

curl: (7) Failed to connect to 10.104.96.71 port 80: Operation timed out

minikubeの機能を使ってアクセス出来る。

$ minikube service nginx --url

http://192.168.99.100:31485

このURLに対してリクエストを送ればnginxからレスポンスが返ってくる。


ちなみに--urlつけなければ勝手にブラウザで開かれる。

$ curl $(minikube service nginx --url) -I

HTTP/1.1 200 OK
Server: nginx/1.13.9
Date: Thu, 08 Mar 2018 10:12:23 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 20 Feb 2018 12:21:20 GMT
Connection: keep-alive
ETag: "5a8c12c0-264"
Accept-Ranges: bytes

minikube経由でアクセスするあたりは以下を参照。

ローカルでkubernetesを動かせるminikubeを試す - 年中アイス


ダッシュボードを見る

minikubeを使っていなければkubectl proxyしてlocalhost:8001/uiで見れるアレ。


minikube dashboardで見ることが出来る。

ちなみにGrafanaでモニタリング用のダッシュボードも見ることが出来る。

minikube service --namespace=kube-system monitoring-grafana

どういったものがminikubeで見れるかはminikube service listすると一覧で表示されるようになっている。