Kubernetesでサーバーレスを行う5つの方法

これを「サーバーレス」、「イベント駆動型コンピューティング」、または「サービスとしての機能(FaaS)」と呼びます。考え方は同じです。リソースを動的に割り当てて、応答で呼び出される個々の機能、基本的にはマイクロサービスを実行します。イベントに。サーバーレスコンピューティングプラットフォームを使用すると、アプリケーション開発者は、基盤となるインフラストラクチャやそのすべての管理の詳細ではなく、アプリに集中できます。

ほとんどのクラウドプロバイダーは、ある種のサーバーレスプラットフォームを提供していますが、2つの要素だけで自分でプラットフォームを構築できます。1つはKubernetesです。これは、コンポーネント化された復元力のあるアプリケーションを構築するための標準プラットフォームとなったコンテナオーケストレーションシステムです。2つ目は、Kubernetesでサーバーレスアプリケーションパターンを構築するために使用される多くのシステムのいずれかです。

Kubernetesのサーバーレスフレームワークのほとんどには、次の共通の機能があります。

  • OpenShiftなどの環境を含め、ローカルまたはリモートでKubernetesをサポートする任意の環境にデプロイします。
  • フレームワークにあらかじめパッケージ化されたいくつかの一般的なランタイムを使用して、任意の言語で記述されたコードの実行をサポートします。
  • HTTPエンドポイント、キューメッセージ、その他のフックなど、さまざまな種類のイベントによってコードの実行をトリガーします。

Kubernetesでサーバーレスを構築する主な利点の1つは、基盤となるプラットフォームをはるかに細かく制御できることです。多くのサーバーレスオファリングは、実行する機能の動作を制限し、特定のクラスのアプリケーションを非実用的にする場合があります。Kubernetesを使用すると、ニーズに合ったサーバーレスプラットフォームを作成でき、インフラストラクチャをKubernetesオペレーターに任せて、開発者が重要なコードの記述に集中できるようにします。

これは、サーバーレス機能をKubernetesにもたらす5つの主要なプロジェクトです。

核分裂

Fissionは、マネージドKubernetes企業のPlatform 9によって作成および保守されています。その主な名声は、定義ファイルを提供するだけで、コンテナーを構築せずにFaaSアプリケーションを作成できることです。

Fissionは、ヘルムチャートの有無にかかわらずインストールでき、2つのエディションのいずれかでインストールできます。メッセージキューとロギングのInfluxDBサポートを備えた本格的なバージョンと、基本的な機能を提供する簡素化されたエディションがあります。前者は実稼働展開用に設計されており、後者は足を濡らすために設計されています。

Fissionデプロイメントにコードを追加するには、YAMLベースのスペックファイルを使用します。Fissionのコマンドラインツールを使用すると、関数とそのエントリポイントをトリガーするために使用されるルートのYAMLファイルを作成できます。スペックファイルでは、環境変数、補助コンテナ、ボリューム、およびコードのKubernetes汚染/許容制御を提供することもできます。

核分裂は「ワークフロー」も提供します。Helmチャートによってインストールされるワークフローは、ある関数の出力を別の関数に渡します。関数は同じ言語である必要はありません。ワークフローシステムはオーバーヘッドを抑えるために多くの一般的なプリミティブバイナリタイプ(整数や汎用バイトストリームなど)をサポートしていますが、各関数の出力が交換形式にレンダリングされるため、これにはパフォーマンスコストがかかることに注意してください。

元々FaaSに関連していた欠点の1つは、関数が最初に呼び出されたときに、それに関連付けられたコンテナーを起動するのに目に見える遅延があったことでした。Fissionは、関数が最初に実行されるときの待ち時間を最小限に抑えるために、コンテナーを事前に暖めたままにします。

Fissionは、開発者と管理者の両方に他の便利さを提供します。このサービスは、外部インターネットアクセスのないクラスターにデプロイでき、コードはオンデマンドでクラスターにホットリロードできます。関数アクティビティは、デバッグを支援するために記録および再生することもできます。

Fissionプロジェクトは非常にリベラルなApacheライセンスの下で利用できるため、必要に応じて自由に作り直すことができます。

ネイティブ

Knativeは元々Kubernetesでサーバーレスアプリを実行するためにGoogleによって作成されましたが、本番環境でのサーバーレスデプロイに共通するパターンに焦点を当てています。ただし、Knativeを効果的に使用するには、多くのKubernetesコンポーネントを管理する直接的な専門知識が必要です。

Kubernetesに加えて、KnativeにはIstioなどのルーティングシステムまたはサービスメッシュが必要ですが、AmbassadorやGlooなどの他のオプションも使用できます。これは、セットアップに少し手間がかかることを意味しますが、プロジェクトには、さまざまなクラウドサービスおよびバニラKubernetesを含むKubernetes環境で各オプションを使用するための詳細なガイドがあります。

Knativeは、主に既存のKubernetesツールと機能を活用または拡張することで機能します。アプリまたは関数は、YAMLファイルを介して構成され、ビルドするDockerコンテナーとして提供されます。定義の追加、変更、または削除は、kubectlコマンドラインアプリを介して行われます。Knativeアプリの指標については、Grafanaを使用してください。スケーリングは、Knative独自のオートスケーラー、またはカスタム作成されたものを含む他のKubernetes互換スケーラーを使用して実行できます。

Knativeは開発が進んでおり、専用ツールの多くはまだ荒れた状態です。これにはknctl、Knative専用のCLIが含まれ ます。これにより、Knativeに集中したいだけの場合に、Kubernetesの他のツールを使用してKnativeを管理する手間が省けます。そしてko、コンテナビルドステップを排除することによって、Knativeに行くのアプリを構築するためのツール。

クベレス

Kubelessは、一般的なWebアプリケーションスタックの簡単なインストーラーの開発者であるBitnamiによって作成されました。Kubelessは、Kubernetesのネイティブカスタムリソース定義を使用して関数を処理するため、KubernetesメタファーとKubeless機能の間の抽象化がわずかに少なくなります。

最も一般的な言語ランタイムには、プラットフォームが付属しています。.NET、Java、Python、Node.js、PHP、Ruby、Go、さらにはクラウドネイティブ開発用の新しいBallerina言語です。ランタイムは単なるDockerイメージですが、Kubelessには、Dockerfileを使用してカスタムランタイムを構築するための特定のパッケージ形式があります。

もう1つの便利なKubeless機能は、AWS LambdaCLIとコマンド同一のCLIです。これは、AWS Lambdaから移行したいが、既存の管理スクリプトの一部を保持したい場合、またはまったく新しいコマンドセットを学習する必要がない場合に非常に便利です。

Kubelessは、さまざまなアーキテクチャでサーバーレスアプリケーションを構築するためのシステムであるServerlessFrameworkのプラグインとしても機能します。すでにサーバーレスまたはKubelessを使用している場合は、他のものを使用するよりもどちらかを追加する方が簡単です。

OpenFaaS

OpenFaaSの売り込みは、「サーバーレス機能をシンプルにする」ことです。簡単に言うと、開発者は「Dockerコンテナをデプロイするよりもそれほど難しいことではない」という意味です。

OpenFaaSは、KubernetesまたはDocker Swarmクラスター(ローカルテストまたは需要の少ない使用)のいずれかにデプロイできます。 OpenFaaS CLIを使用して、Dockerイメージをビルド、プッシュ、およびクラスターにデプロイして、関数を実行します。既存のテンプレートは、Go、Python、Node.js、.NET、Ruby、Java、またはPHP 7で記述されたアプリをデプロイするための事前に作成された方法を提供しますが、いつでも独自にロールすることができます。 OpenFaaS CLIは、クラスター内のシークレットを管理する方法も提供しますが、組み込みのWeb UIを使用すると、新しい関数を作成して管理できます。

OpenFaaSの別のバージョンであるOpenFaaSCloudは、Gitとの統合(GitHubおよびGitLabのセルフホスト版を含む)、CI / CD、シークレット管理、HTTPS、Slackやその他にイベントをフィードする機能など、複数の開発者向けの機能を備えたOpenFaaSを再パッケージ化します。シンク。OpenFaas Cloudは、無料のオープンソース製品として、また現在無料で使用できるホストバージョンで利用できます。

OpenWhisk

Apache OpenWhiskは、一般的なサーバーレスプラットフォームとして請求されます。OpenWhiskはMesosとDockerComposeもサポートしているため、KubernetesはOpenWhiskでコンテナーを実行するために使用できるいくつかのオプションの1つにすぎません。それでも、Kubernetesは、アプリのデプロイ用のツール、特にHelmチャートのために好まれます。IBM Cloud FunctionsはOpenWhiskプロジェクトに基づいているため、OpenWhiskCLIコマンドでも機能します。

他のほとんどのサーバーレスKubernetesフレームワークとは異なり、OpenWhiskはGo(KubernetesとDockerの両方が記述されている)ではなく、Scala言語で記述されています。これは、OpenWhiskをハックしたい場合にのみ問題になる可能性があり、Goの経験しかありません。 

人気のあるアプリケーションランタイムオプションのほとんどは、OpenWhiskにあらかじめパッケージ化されています:Java、Node.js、Python、Ruby、PHP、および.NET。さらに、Scala、Ballerina、Swift、Rustなどの多くの難解で最先端のオプションも含まれています。ランタイムは単なるDockerコンテナーであるため、独自のコンテナーを簡単に提供できます。

便利なOpenWhiskデプロイメント機能の1つは、「zipアクション」です。コードパッケージのマニフェストファイルを使用して、コードと補助ファイルの.zipアーカイブをOpenWhiskにポイントすると、OpenWhiskはそこからアクションを作成します。OpenWhisk CLIには、コードのディレクトリツリーをそのようなアーカイブに変換するためのツールも含まれています。また、サービスパッケージのカタログを使用すると、GitHub、Slack、Apache Kafka、Jiraなどの一般的なサードパーティ製品にアプリケーションを簡単にプラグインできます。