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を変換してください 、結果を確認し、それを開始点として使用して、アプリケーションおよびクラスターと完全に互換性のあるマニフェストを作成します。