概要
既にdocker-compose.yamlが用意されているようなプロジェクトであれば、komposeというツールを用いることで割と簡単にkubernetesにサービスを移行することができます。業務でAWSからGCPのGKEへの移行を最近頻繁に経験したので、簡単に手順をここにメモしておきます。
初めに
以下のものをインストール
komposeを用いた移行
サンプルアプリ
リンクはこちら。
以下のコマンドで動くことを確認します
cd sample-web
docker-compose up
-
GET http://localhost/item
でレスポンスが見れる
kubernetes用の設定ファイル作成
sample-webディレクトリで、以下のコマンドを叩き、docker-compose.yamlをkubernetes用の設定ファイルに変換します。
kompose convert
sample-api-deployment.yaml
とsample-api-service.yaml
というファイルができると思います。前者が、podの状態を宣言的に記述するための設定ファイルで、後者がネットワークサービスとして動くkubernetes内のアプリケーションの設定ファイルです。
もし本サンプルのように外部からのアクセスを受け付けるapiのようなものでなく、単独で動くジョブのようなものであれば、komposeは前者のみを作り後者は作られないはずです。
ローカルのminikubeへのデプロイ
まずは最初に、minikubeを起動します。
minikube start
そして、minikube上へdockerアプリをデプロイできるよう設定をします。(いろいろなやり方があるのですが、これはそのうちの一つです。興味ある方はこちらを見てください)
eval $(minikube docker-env)
dockerイメージのビルドをします。dockerコマンドでなくminikubeコマンドでビルドすることで、minikubeでも見れる場所にビルドされます。
minikube image build -f Dockerfile
上でkomposeで作成した設定ファイルから、minikube上へデプロイをします。minikubeをローカルで起動していれば、kubectl
コマンドは自動でminikubeを見ます。
kubectl apply -f ./sample-api-deployment.yaml -f ./sample-api-service.yaml
デプロイがちゃんとできていれば、以下のコマンドで動作確認ができます。
minikube service sample-api
開いたページの/item
にアクセスすれば、正常なレスポンスが出たはずです。