2018年3月19日月曜日

kompose を使って kubernetes 上で docker-compose してみる

概要

kompose は kubernetes 上で docker-compose.yml を実行するためのツールです
既存の docker-compose.yml を使って動作を確認してみました

環境

  • macOS 10.13.2
  • minikube 0.25.0
  • kubectl 1.9.2
  • VertualBox 5.1.30r118389
  • kompose 1.10.0

インストール

  • brew install kompose

その他のプラットフォームのインストール方法はこちら

ちょっとだけ変更する

  • git clone -b ver_golang_for_vch https://github.com/kakakikikeke/memo.git
  • cd memo
  • vim docker-compose.yml
version: '2'
services:
  web:
    image: kakakikikeke/memo:ver_golang_for_vch
    ports:
      - 80:8080
    links:
      - redis
    environment:
      - REDIS_URL=redis://redis:6379/0
    labels:
      kompose.service.type: LoadBalancer
  redis:
    image: redis:latest

kompose.service.type: LoadBalancer の部分だけ追記してあげます
これをやらないとアプリが外部からアクセスすることができません

コンバートする

  • kompose convert -f docker-compose.yml
INFO Kubernetes file "redis-service.yaml" created 
INFO Kubernetes file "web-service.yaml" created   
INFO Kubernetes file "redis-deployment.yaml" created 
INFO Kubernetes file "web-deployment.yaml" created

こんな感じでファイルが分割されます
中身を見ると kubernetes 形式の YAML フォーマットに変換されています

起動する

  • kompose up -f docker-compose.yml

で OK です
ログは以下の通り

INFO We are going to create Kubernetes Deployments, Services and PersistentVolumeClaims for your Dockerized application. If you need different kind of resources, use the 'kompose convert' and 'kubectl create -f' commands instead. 

INFO Deploying application in "default" namespace 
INFO Successfully created Service: redis          
INFO Successfully created Service: web            
INFO Successfully created Deployment: redis       
INFO Successfully created Deployment: web         

Your application has been deployed to Kubernetes. You can run 'kubectl get deployment,svc,pods,pvc' for details.

指示通り get コマンドで確認してみましょう
コンテナが Running 状態になれば OK です

  • kubectl get deployment,svc,pods,pvc
NAME           DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deploy/redis   1         1         1            1           2m
deploy/web     1         1         1            1           2m

NAME             TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
svc/kubernetes   ClusterIP      10.96.0.1        <none>        443/TCP        7h
svc/redis        ClusterIP      None             <none>        55555/TCP      2m
svc/web          LoadBalancer   10.105.101.184   <pending>     80:30146/TCP   2m

NAME                        READY     STATUS    RESTARTS   AGE
po/redis-69867bff9f-ztdcj   1/1       Running   0          2m
po/web-bdd7555b4-cfplp      1/1       Running   0          2m

動作確認

アプリにアクセスしてみましょう

  • minikube service web

でブラウザが開いてアプリにアクセスできます
もしは今回の場合であれば

  • curl $(minikube ip):30146

でアクセスすることができます

ダウンさせる

  • kompose down

で pods, deployments, services すべて削除してくれます

最後に

kubernetes 上で使える docker-compose 「kompose」を使ってみました
既存の docker-compose.yml をそのまま使えて便利です
コマンドもほぼ docker-compose と同様なので簡単に使えます

stop コマンドはないので kompose コマンド経由で停止する場合は down させるしかなさそうです
基本は up だけやらせてあとは kubectl で deployments と services を操作する感じかなと思います

あと LoadBlancer を追記した部分ですが公式を見ると up 後に services に対してロードバランサを追加してあげても良さそうです

  • kubectl expose deployment web --type="LoadBalancer"

参考サイト

0 件のコメント:

コメントを投稿