Edited at

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

kubectl get svc

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
metabase ClusterIP None <none> 55555/TCP 7m
metabase-published LoadBalancer 10.98.218.223 localhost 3000:31878/TCP 7m

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

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


削除

$ docker stack rm metabase

Removing stack: metabase

$ docker stack ls
NAME SERVICES


参考