Docker Composeを使用すると、まとめて管理できるコンテナーのスタックを定義できます。これは、もともとローカルのDockerインストールに焦点を合わせた比較的シンプルなツールです。
Kubernetesは、独自のツールチェーンとマニフェストファイルが付属するコンテナオーケストレーターです。通常、通常のDockerワークフローよりも複雑に見えますが、その機能により、本番環境でのスケーラブルなコンテナーのデプロイが容易になります。
Komposeは、DockerComposeファイルを取得してKubernetesクラスターにデプロイできるツールです。 Kubernetesプロジェクトの一部として開発されました。
現在のKomposeバージョンは、YAMLファイル変換に制限されています。 Kubectlなどのツールを使用して、変換されたKubernetesリソースマニフェストをクラスタに適用する必要があります。古いバージョンのKomposeには、組み込みのup
がありました 中間の変換手順なしでクラスターに直接デプロイできるコマンド。これは、技術的な複雑さが増すため削除されました。
Komposeは、Windows、macOS、および最も一般的なLinuxディストリビューションで利用できます。ビルド済みのバイナリは、GitHubリポジトリから入手できます。最新のリリースをダウンロードし、実行可能許可ビットを設定して、バイナリをパス内のディレクトリに移動します。いくつかのパッケージマネージャーもサポートされています。
curl -L https://github.com/kubernetes/kompose/releases/download/v1.23.0/kompose-linux-amd64 -o kompose chmod +x kompose sudo mv ./kompose /usr/local/bin/kompose
kompose
を実行してみてください あなたのターミナルで。使用可能なコマンドに関するいくつかの基本情報が表示されます。 kompose version
を実行しています 使用しているKomposeのバージョンを確認します。
ここで、docker-compose.yml
があることを確認してください 利用可能なファイル。 MySQLデータベースを使用してApacheWebサーバーをセットアップする基本的な例を次に示します。
version: "3" services: apache: image: httpd:latest ports: - 80:80 mysql: image: mysql:latest expose: - 3306 volumes: - mysql:/var/lib/mysql volumes: mysql:
デプロイ先のKubernetesクラスターも必要です。パブリッククラウドプロバイダーで新しいクラスターを作成するか、MicroK8sなどのプロジェクトを使用して独自のクラスターを起動します。
kompose convert
コマンドはDockerComposeファイルへのパスを受け入れ、同等のKubernetesリソースマニフェストを出力します。 docker-compose.yml
を使用します パスが指定されていない場合は、作業ディレクトリにあります。 -f
を介して複数のファイルを受け入れる フラグ。
kompose convert -f docker-compose.yml -f docker-compose-dev.yml
KomposeがComposeスタック内の各リソースのマニフェストファイルを書き込むと、数行の出力が表示されます。 docker-compose.yml
のコンポーネントごとに個別のファイルが作成されます 。それらは作業ディレクトリに配置されます。
docker-compose.yml
を変換した結果は次のとおりです 上に表示:
作成サービスごとに、Kubernetesのデプロイとサービスが作成されています。これらのリソースは、作成するポッドとそのネットワークルーティングルールを定義します。
MySQLコンテナ用のPersistentVolumeClaimも存在します。これは、docker-compose.yml
で構成されたボリュームを表します 、個々のポッドよりも長持ちするMySQLデータベースの永続的なストレージを提供します。
YAMLファイルを調べると、それらが通常のKubectl互換のKubernetesマニフェストであることがわかります。これが変換されたapache-deployment.yaml
です ファイル:
apiVersion: apps/v1 kind: Deployment metadata: annotations: kompose.cmd: kompose convert kompose.version: 1.23.0 (bc7d9f4f) creationTimestamp: null labels: io.kompose.service: apache name: apache spec: replicas: 1 selector: matchLabels: io.kompose.service: apache strategy: {} template: metadata: annotations: kompose.cmd: kompose convert kompose.version: 1.23.0 (bc7d9f4f) creationTimestamp: null labels: io.kompose.service: apache spec: containers: - image: httpd:latest name: apache ports: - containerPort: 80 resources: {} restartPolicy: Always status: {}
デプロイメントのspec
元のdocker-compose.yml
のApacheコンテナの定義と非常によく似ています 。このシンプルなサービスの場合、Kubernetesオブジェクトに簡単にマッピングできます。ファイルの残りの部分は、ほとんどの場合、ツールで作成されたリソースを識別できるKompose固有の注釈を含むメタデータを設定しています。
kubectl apply
を使用して、通常の方法でマニフェストファイルのセットをデプロイします 。 docker-compose.yml
とは別のディレクトリに保存することをお勧めします 、そのため、kubectl
互換性のないファイルも選択しようとはしません。
kubectl apply .
リソースはクラスター内でプロビジョニングされます。サービスが実行されるまでに数分かかる場合があります。 kubectl get deployments
を使用してデプロイメントを検査します 。 AVAILABLE
の場合 列には1
が表示されます 、ワークロードにアクセスできる必要があります。
これで、生成されたマニフェストを編集してkubectl apply
を再実行することで、デプロイメントを更新できます。 。 Apacheを3つのレプリカにスケーリングする場合は、apache-deployment.yaml
を開きます。 、replicas
を変更します 3
へのフィールド 、変更したマニフェストを適用します。
DockerComposeファイルを更新し続けることもできます。 kompose convert
を実行します もう一度、コンテンツの最新のKubernetes解釈を取得してから、出力をクラスターに再適用します。これにより、それ以降に手動で適用した変更が上書きされることに注意してください。
Komposeは通常、最も一般的な機能とベストプラクティスを使用してDockerComposeファイルで適切に機能します。コンテナを作成し、ポートを公開し、ボリュームを介して永続的なストレージを提供できます。
ただし、すべての変換が完全であるとは限りません。一部の作成機能には、Kubernetesの世界で直接同等のものがありませんが、他の機能は、ニーズを満たさない可能性のある方法でマッピングされます。この例でのデプロイとサービスの使用はそのようなケースの1つです。Kubernetesに直接デプロイする場合は、Ingressルールを使用してサービスを公開できますが、これはKomposeによって作成されたものではありません。意見のある決定は、最も簡単なオプションを選択することで解決されます。
また、ボリュームに関する問題も発生します。 Docker Composeファイルは、マウントファイルとフォルダーをホストからコンテナーにバインドできます。これはKubernetesでは不可能なため、別のソリューションが必要になります。さらに、KomposeはPersistentVolumeClaimsのリソースを作成できますが、実際のPersistentVolumesは作成しません。マニフェストをデプロイする前に、クラスター内でボリュームがすでに使用可能になっている必要があります。
サポートされている機能と変換の詳細の完全な表は、Komposeドキュメントの一部として提供されています。変換作業を開始する前に、使用しているDockerCompose機能がサポートされていることを確認する価値があります。
Komposeは、DockerComposeからKubernetesクラスターへの移行を簡素化します。以前は面倒で時間がかかり、エラーが発生しやすい手順を自動化します。これは優れた支援手段ですが、ある程度の監視なしに実行する必要のあるツールではありません。
Kompose変換は普遍的に適用できるわけではないため、すべての環境に適しているわけではありません。放出されたマニフェストをクラスターに適用する前に、それらをチェックすることは常に価値があります。場合によっては、Komposeを参照として使用するのが最適です。docker-compose.yml
を変換してください 、結果を確認し、それを開始点として使用して、アプリケーションおよびクラスターと完全に互換性のあるマニフェストを作成します。