petitviolet blog

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

    2018-03-17

    Qiitakubernetesminikube

    タイトル通り。 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 経由でアクセスするあたりは以下を参照。

    ダッシュボードを見る

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

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

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

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

    from: https://qiita.com/petitviolet/items/1b91559e8c7b3dd6f737