uni farm

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

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

kubernetesを内蔵したDocker for Macがリリースされたらしいので、試してみた

kubectlコマンドでkubernetes-dashboardのデプロイ、docker stackコマンドで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が削除されるので注意

download docker for mac

赤く囲った部分”Get Docker CE for Mac(Edge)“をクリック

kubernetesを有効にする

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

enable k8s

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/ にアクセスすると表示される

k8s dashboard

削除

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を立ち上げてみる

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画面が表示される

metabase

削除

docker stack rm metabase
Removing stack: metabase

docker stack ls
NAME                SERVICES

参考

2023, Built with Gatsby. This site uses Google Analytics.