docker
kubernetes
Metabase

Docker for MacでKubernetes インストールからデプロイまで

kubernetesを内蔵したDocker for Macがリリースされたらしいので、試してみた
kubectlコマンドでkubernetes-dashboardのデプロイ、docker stackコマンドでmetabaseをデプロイしてみた

2018/01/21追記 docker stackコマンドの例としてopenfassをデプロイしていましたが、動作しない(関数作成できない)のを確認したので、metabaseの例に差し替えました。

環境

macOS 10.13.2
docker 17.12.0-ce(edge)

準備

Docker for Macでkubernetesを起動させる

dockerのedgeバージョンインストール

https://store.docker.com/editions/community/docker-ce-desktop-mac
のページから、edgeバージョンをインストール

既存のDocker.appをedgeバージョンのDocker.appで上書きすると以前のimage、containerが削除されるので注意

store_docker.png
赤く囲った部分"Get Docker CE for Mac(Edge)"をクリック

kubernetesを有効にする

dockerアプリからpreferencesを開き、kubernetesを有効にする

docker_app_kubernetes.png

Enable Kubernetesにチェックを入れてapplyをクリック(起動にしばらくかかる)

起動確認 context切り替え

Docker for Macで起動しているkubernetesの一覧から、NAMEdocker-for-desktopが存在しているのを確認して、

$ kubectl config get-contexts
CURRENT   NAME                 CLUSTER                      AUTHINFO             NAMESPACE
*         minikube             minikube                     minikube             
          docker-for-desktop   docker-for-desktop-cluster   docker-for-desktop   

使用するクラスタをdocker-for-desktopに切り替える

$ kubectl config use-context docker-for-desktop
Switched to context "docker-for-desktop".

master(Docker for Macが起動しているPC)が1台起動している

$ kubectl get nodes
NAME                 STATUS    ROLES     AGE       VERSION
docker-for-desktop   Ready     master    10m       v1.8.2

起動した段階で動作しているpodを確認してみる

$ kubectl get po --all-namespaces
NAMESPACE     NAME                                            READY     STATUS    RESTARTS   AGE
docker        po/compose-75f8bb4779-l4gxg                     1/1       Running   0          6m
kube-system   po/etcd-docker-for-desktop                      1/1       Running   0          6m
kube-system   po/kube-apiserver-docker-for-desktop            1/1       Running   0          6m
kube-system   po/kube-controller-manager-docker-for-desktop   1/1       Running   0          7m
kube-system   po/kube-dns-545bc4bfd4-qslcx                    3/3       Running   0          7m
kube-system   po/kube-proxy-lc6tl                             1/1       Running   0          7m
kube-system   po/kube-scheduler-docker-for-desktop            1/1       Running   0          6m

デプロイしてみる

kubernetesへのデプロイは、kubernetesのコンフィグ(ymlファイル)でも、docker-compose.ymlでもできる
両方試してみた

kubectlコマンドでkubernetes-dashboardのデプロイ

実行

kubernetes clusterの管理ができるdashboardをデプロイしてみる
設定ファイルは以下のものを使用した
https://github.com/kubernetes/dashboard/blob/master/src/deploy/recommended/kubernetes-dashboard.yaml

$ kubectl apply -f kubernetes-dashboard.yaml --record
serviceaccount "kubernetes-dashboard" created
role "kubernetes-dashboard-minimal" created
rolebinding "kubernetes-dashboard-minimal" created
deployment "kubernetes-dashboard" created
service "kubernetes-dashboard" created

起動確認

kubernetes-dashboardがrunningになっているのを確認

$ kubectl get deploy,po,svc -n kube-system
NAME                          DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deploy/kubernetes-dashboard   1         1         1            1           2m

NAME                                            READY     STATUS    RESTARTS   AGE
po/kubernetes-dashboard-7798c48646-4964x        1/1       Running   0          2m

NAME                       TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)         AGE
svc/kubernetes-dashboard   ClusterIP   10.96.53.32   <none>        443/TCP         2m

画面にアクセスしてみる

$ kubectl proxy
Starting to serve on 127.0.0.1:8001

として
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
にアクセスすると表示される

kubernetes_dashboard.png

削除

$ kubectl delete -f kubernetes-dashboard.yaml

docker stackコマンドでmetabaseのデプロイ

dockerにkubernetesが内蔵しているためか、
docker swarmを構築する要領で、kubernetesへコンテナをデプロイすることができる
docker-compose.ymlをkubernetesで使い回せるのはありがたい

具体的には
docker stackコマンドで、kubernetesのdeploymentやserviceを構築できる
この辺の仕組みはkubernetesのCustomResourceDefinitionsというのを使用しているらしい(よくわかってない)

実際、crdを確認してみると、dockerっぽいのが存在している

$ kubectl get crd
NAME                        AGE
stacks.compose.docker.com   15m

デプロイしたらstacksというところで管理されるらしい

$ kubectl get stacks
No resources found.

実行

OSSのBIツールmetabaseを立ち上げてみる

docker-compose.yml
version: '3'
services:
  metabase:
    image: metabase/metabase:latest
    ports:
      - 3000:3000
    volumes:
      - ./tmp:/tmp
    environment:
      MB_DB_FILE: /tmp/metabase.db
$ docker stack deploy metabase --compose-file docker-compose.yml 
Stack metabase was created
Waiting for the stack to be stable and running...
 - Service metabase has one container running
Stack metabase is stable and running

起動確認

$ kubectl get stacks
NAME       AGE
metabase   1m

もしくは

$ docker stack ls
NAME                SERVICES
metabase            1

runningになっているのを確認

$ kubectl get deploy,svc,po
NAME              DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deploy/metabase   1         1         1            1           2m

http://localhost:3000 にアクセスすると、setup画面が表示される

スクリーンショット 2018-01-22 18.01.01.png

削除

$ docker stack rm metabase
Removing stack: metabase

$ docker stack ls
NAME                SERVICES

参考