先週、Minikubeを使ってローカル開発環境を作ったが、Docker for Macにはk8が同梱されているようなので試してみました。

実行環境

Mac OS High Sierra(10.13.6)
Docker: 18.06.1
Kubernetes: 1.10.3

設定

Preferencesを開くとKubernetsタブがあります。
Enable KubernetesにチェックしてApplyを押します

インストールするようなので、しばらく待ちます…結構待ちました

無事起動しました。右下にKubernetes is runningと表示されてます

kubernetes-cliは消しておこう

後から気づいたのですが、kubectlコマンドがインストールされるはずなのに、Homebrewでインストールされるとそれが残ってしまうようです。

$ ll  $(which kubectl)
lrwxr-xr-x  1 user  admin    43B  9 23 21:22 /usr/local/bin/kubectl -> ../Cellar/kubernetes-cli/1.11.3/bin/kubectl

バージョン1.11が入ってました。

$ /usr/local/bin/kubectl version
Client Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.3", GitCommit:"a4529464e4629c21224b3d52edfe0ea91b072862", GitTreeState:"clean", BuildDate:"2018-09-10T11:44:36Z", GoVersion:"go1.11", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.3", GitCommit:"2bba0127d85d5a46ab4b778548be28623b32d0b0", GitTreeState:"clean", BuildDate:"2018-05-21T09:05:37Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}

こっちがDocker同梱のコマンド。1.10でした。

/Applications/Docker.app/Contents/Resources/bin/kubectl version
Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.3", GitCommit:"2bba0127d85d5a46ab4b778548be28623b32d0b0", GitTreeState:"clean", BuildDate:"2018-05-21T09:17:39Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.3", GitCommit:"2bba0127d85d5a46ab4b778548be28623b32d0b0", GitTreeState:"clean", BuildDate:"2018-05-21T09:05:37Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}

シンボリックリンクを貼り直せば済むと思われるが、Enable KubernetesをOFF -> ONでKubernetsを入れ直したところ事なきを得ました。

$ ll $(which kubectl)
lrwxr-xr-x  1 user  staff    55B  9 30 22:36 /usr/local/bin/kubectl -> /Applications/Docker.app/Contents/Resources/bin/kubectl

Minikube Tutorialのアプリを動かしてみる

docker-for-desktopというcontextが増えているので切り替えます。

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

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

cluster-infoを見てみると、localhostでmasterとKubeDNSで動いているようで、Minikubeの時は192.168.64.2だったので微妙な違いがありました。

$ kubectl cluster-info
Kubernetes master is running at https://localhost:6443
KubeDNS is running at https://localhost:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

前回作ったサンプルアプリを起動してexposeします。

$ kubectl run hello-node --image=hello-node:v1 --port=8080 --image-pull-policy=Never
deployment.apps/hello-node created

$ kubectl expose deployment hello-node --type=LoadBalancer
service/hello-node exposed

Minikubeのときは minikube service hello-node でブラウザを開きました。 どうするんだろうと一瞬悩みましたが、直接http://localhost:8080/で何事もなく開けました。

所感

  • Minikubeとの使い分けが分かってないが、MacかWindowsで開発することが多いので気軽に使えて良さそう
    • 使いたいaddonが出てきたらMinkube使いたくなるのかな…
  • 使っているDockerに対応したバージョンのk8sがダウンロードされるので、バージョン違いによる変なハマり方をしなくて済みそう
  • docker stackでKubernetesと連携できるみたいなので今度試してみよう

<参考>
https://docs.docker.com/docker-for-mac/#kubernetes
https://blog.alexellis.io/docker-for-mac-with-kubernetes/