docker for mac に同梱されている kubernetes を使ってみる

昨日、こちら でminikubeを使ったローカル環境の構築を行いましたが、どうやら docker for mackubernetes が同梱されているようなので、使ってみます。

インストールする

右上の dockerのマークをクリックし、 Preference を選択

f:id:takapi86:20190503192003p:plain

Kubernetes -> Enable Kubernetes にチェックを入れて、Apply をクリックすればインストールされ使えるようになります。

f:id:takapi86:20190503190942p:plain

早速デプロイしてみる

先日、こちらで、minikubeにデプロイしたアプリケーションを使います。また、今回はkomposeコマンドは使わずにyamlファイルを作成し、kubectlコマンドでデプロイするようにします。(ただ、yamlファイルはkomposeで生成したものをベースにし修正しました。)

こちらのyamlファイルを用意し、 (まだ、雰囲気で書いている段階なので冗長な箇所などがあるかも)

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: rails
spec:
  replicas: 1
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        group: rails
    spec:
      containers:
      - args:
        - bash
        - -c
        - rm -rf /usr/src/app/tmp/pids/server.pid && bundle exec rake db:migrate && bundle
          exec rails s -b 0.0.0.0
        image: localhost:5000/takapi/app_rails:v1
        name: rails
        ports:
        - containerPort: 3000
        resources: {}
status: {}
apiVersion: v1
kind: Service
metadata:
  name: rails
spec:
  ports:
  - name: "3000"
    port: 3000
    targetPort: 3000
  selector:
    group: rails
  type: NodePort
status:
  loadBalancer: {}

以下のコマンドでデプロイ

kubectl create -f rails-service.yaml
kubectl create -f rails-deployment.yaml

どうやらうまく行った感じがします。

kubectl get service
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
rails        NodePort    10.99.111.229   <none>        3000:31378/TCP   4m
kubectl get deployment
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
rails     1         1         1            1           4m
kubectl get pods
NAME                     READY     STATUS    RESTARTS   AGE
rails-558944b847-4vbgv   1/1       Running   0          4m
kubectl logs rails-558944b847-4vbgv
INFO  WEBrick 1.4.2
INFO  ruby 2.6.1 (2019-01-30) [x86_64-linux]
INFO  WEBrick::HTTPServer#start: pid=1 port=3000

そして、localhost:31378 にアクセスすると、アプリケーションのページが表示されるようになりました!

ソースファイルをマウントしてみる

minikubeと違い、ホストはmacなので(もちろん、dockerを動かすためのVMはいますが)普通にVolumeマウントができます。

ということで、 rails-deployment.yaml に以下に追記し、

         ports:
         - containerPort: 3000
         resources: {}
+        volumeMounts:
+          - name: app-src
+            mountPath: /usr/src/app
+      restartPolicy: Always
+      volumes:
+        - name: app-src
+          hostPath:
+            path: /Users/takapi/app
+            type: Directory
 status: {}

再デプロイします。

kubectl delete deployment rails
deployment.extensions "rails" deleted
kubectl create -f rails-deployment.yaml
deployment.extensions "rails" created

ファイルを編集するとリアルタイムで変わったので、マウント成功!

まとめ

現時点でやってみた感じでは、minikubeもdocker for macもどちらも大きく操作が異なるという訳ではありませんした。 なので、実際開発環境として使う際は、mac を使っている人は、docker for mac で良いのではないかなぁ。多分。と思う今日の頃。

minikubeの場合、ホスト側のファイルをマウントしたいときは、PC <-> minikube <-> コンテナ といった感じにマウントしなくてはならないため、PC <-> minikube のファイル共有設定に一手間必要そうです。

ちょっとだけ、Kubernetesの雰囲気が掴めてきたかもしれない。 

今日のところはこんな感じで。