From Compose to Kubernetes with Okteto

本日は、OktetoのPablo Chico de Guzmán氏のブログを特集し、開発者のDocker Composeへの愛情がOktetoにインスピレーションを与え、Docker Composeの完全に互換性のあるKubernetesバックエンドである Okteto Stacksを作成した方法について書いています

カバードッカー作成

Docker Compose v1.0.0 リリースが公開されてからほぼ 7 年が経ちました。 それ以来、Docker Composeはローカル開発環境の主要なツールになりました。 1 つのコマンドを実行すると、ローカル開発環境が稼働します。 また、どのOSでも、どのアプリケーションでも同じように機能します。

同時に、Kubernetesは本番環境にコンテナをデプロイするための主要なプラットフォームに成長しました。 Kubernetesを使用すると、フォールトトレランスのために複数のホストでコンテナを実行し、アプリケーションの正常性を監視し、インフラストラクチャリソースを最適化できます。 その周りには 豊富なエコシステム があり、すべての主要なプロバイダーがKUBERNETESをネイティブにサポートしています:GKE、AKS、EKS、オープンシフト...

私たちは、Okteto(開発者向けのクラウドネイティブプラットフォーム)を構築する際に、何千人もの開発者と交流してきました。 そして、私たちは同じ不満を聞き続けました:Docker ComposeからKubernetesに移行するとき、非常に急な学習曲線があります。 少なくとも、今日まではそうでした。 Oktetoを使用してKubernetesでDocker Composeファイルを実行できるようになったことをお知らせできることを嬉しく思います。

開発者が Kubernetes で Docker Compose を必要とする理由

開発者はDocker Composeを愛しており、それには正当な理由で気に入っています。 5つのマイクロサービスのDocker Composeファイルは約30行のyamlである可能性がありますが、Kubernetesの同じアプリケーションは500 +行のyamlと約10〜15の異なるファイルになります。 また、Docker 作成 CLI は、必要に応じてコンテナーを再構築して再デプロイします。 Kubernetes では、イメージをビルドし、タグ付けし、Docker レジストリにプッシュし、Kubernetes マニフェストを更新して再デプロイするための追加のツールが必要です。 Docker Composeによって完全に抽象化されたものには、摩擦が多すぎます。

ただし、Docker Composeファイルをローカルで実行すると、いくつかの課題が生じるユースケースがいくつかあります。 たとえば、ローカル CPU/メモリ リソースを使い果たす数十のマイクロサービスを実行する必要がある場合や、ML アプリケーションを開発するために GPU にアクセスする必要がある場合、リモート Kubernetes クラスターにデプロイされたサービスと統合する必要がある場合があります。 これらのシナリオでは、Kubernetes で Docker Compose を実行することが最適なソリューションです。 このようにして、開発者はオンデマンドの CPU/メモリ/GPU リソースにアクセスし、クラスターで実行されている他のサービスに直接アクセスし、クラスター構成 (イングレス コントローラー、SSL ターミネーション、監視ツール、シークレット マネージャー ツールなど) とのより現実的なエンドツーエンドの統合を、使い慣れたアプリケーション定義形式を使用しながら利用できます。

ドッカーは救助に仕様を作成します

幸いなことに、 Docker Compose 仕様 は 2020 年にオープンソース化されました。 これにより、Docker Composeと完全に互換性のあるKubernetesバックエンドであるOkteto Stacksを実装することができました。 Okteto Stacksは、Docker Compose Specificationの他のKubernetesバックエンド実装と比較して、以下を提供するため、ユニークです。

  • パフォーマンスとキャッシュ動作を向上させるためのクラスター内ビルド。
  • 入力コントローラーの統合とパブリック ポートの SSL ターミネーション。
  • ローカル ファイル システムと Kubernetes 内のコンテナー間の双方向同期。

Oktetoの双方向同期は非常に便利で、コードをローカルで編集しながらクラスター上のアプリケーションをリロードします。 これは、Docker Compose ホスト ボリュームを使用してコンテナー内にコードをマウントするのと同じですが、リモート クラスターで実行されているコンテナー用です。

始め方

Okteto Stacksは、どのKubernetesクラスターとも互換性があります( Okteto CLIクラスター側のKubernetesアプリケーションをインストールする必要があります)。 しかし、Okteto Stacksを使い始める最も簡単な方法は、当社のクラウドネイティブ開発プラットフォームのSaaSバージョンであるOkteto Cloudです。

Okteto Stacksの可能性を示すために、有名な投票アプリを展開しましょう。 私のチームは@Tutum DockerCon 基調講演 (EU 2015) 用の投票アプリを開発し、Tutum (後にその年に Docker に買収された) のパワーを紹介しました。 デモの神々はその日、ブドウの供物でなだめられました。 そして、このチュートリアルに従うと、彼らが再びなだめることを願っています。

まず、 Okteto CLIを まだインストールしていない場合はインストールします。

次に、Okteto Cloudネームスペースへのアクセスを構成します。 これを行うには、次のコマンドを実行します。

$ okteto namespace

Authentication required. Do you want to log into Okteto? [y/n]: y
What is the URL of your Okteto instance? [https://cloud.okteto.com]: 
Authentication will continue in your default browser
 ✓  Logged in as cindy
 ✓  Updated context 'cloud_okteto_com' in '/Users/cindy/.kube/config'

次のコマンドを実行して、投票アプリのローカル バージョンを取得します。

$ git clone https://github.com/okteto/compose-getting-started
$ cd compose-getting-started

次のコマンドを実行して、投票アプリをデプロイします。

$ okteto stack deploy --wait

 ✓  Created volume 'redis'
 ✓  Deployed service 'vote'
 ✓  Deployed service 'redis'
 ✓  Stack 'compose-getting-started' successfully deployed

deploy コマンドは、投票アプリの実行に必要なデプロイ、サービス、永続ボリューム、およびイングレス ルールを作成します。 Okteto Cloudダッシュボードに移動すると、アプリケーションのURLが表示されます。

Okteto stack deploy

投票アプリが実行されたので、小さな変更を加えて、完全な開発ワークフローを示しましょう。

私たちのペットの代わりに、みんなに私たちのお気に入りのランチアイテムに投票するように頼みましょう。 「投票/アプリ.pyを開きます ファイルをIDEで作成し、16〜17行目を変更します。 変更を保存します。

def getOptions():
    option_a = "Tacos"
    option_b = "Burritos"

変更に満足したら、次のコマンドを実行します。

$ okteto up

✓  Images successfully pulled
✓  Files synchronized

     Namespace: cindy
     Name:           vote

* Serving Flask app 'app' (lazy loading)
* Environment: development
* Debug mode: on
* Running on http://10.8.4.205:8080/ (Press CTRL+C to quit)
* Restarting with stat * Debugger is active! * Debugger PIN: 139-182-328

アプリケーションの URL をもう一度確認してください。 コードの変更は即座に適用されました。 コミット、ビルド、プッシュは必要ありません。 そして、この瞬間から、IDEから行われた変更はすぐにアプリケーションに適用されます!

オクテトアップ

それだけです!

Okteto Stacks のドキュメントにアクセスして、Docker Compose Kubernetes バックエンドの詳細を確認してください。まだ始まったばかりなので、これについてのご意見をお聞かせください。

ハッピーコーディング!