初心者向けの Knative サーバーレス フレームワークのクイック ガイド
公開: 2022-09-28ここ数年、サーバーレス フレームワークの需要が高まっており、開発者の間での採用が増加しています。
それにもかかわらず、コンテナベースのアプリケーションはすでに人気があり、企業の間では Kubernetes も人気があります。
Kubernetes は間違いなく、優れた可能性を秘めた優れたツールです。 そのエコシステムは、さまざまな新しいツールや、Kubernetes をさらに優れたものにする力を持つ Knative などの最新のテクノロジーによっても成長しています。
Knative は、失敗につながる状況を克服し、クラウド プラットフォームとクラウドネイティブ オーケストレーションのコア標準を確立するために導入されました。
言い換えれば、Knative サーバーレス フレームワークは、他のクラウドベースのサーバーレス デプロイよりもはるかに企業のニーズに適合します。
このガイドでは、Knative、その利点、使用例、インストール手順、作業手順などについて説明します。
どうぞ!
Knativeとは?
Knative は、Google によって最初に開発された Kubernetes ベースのサーバーレス フレームワークです。 企業の要件に基づいてサーバーレス機能をロードして実行することで、無駄を最小限に抑えます。 これは、Kubernetes でサーバーレス アプリケーションをデプロイ、実行、管理するためのコンポーネントを追加するオープン ソース プロジェクトです。
Knative サーバーレス フレームワークの主な目的は、クロスプラットフォーム オーケストレーションの標準を管理することです。 これは、コンテナの作成、自動スケーリング、イベント モデル、およびワークロード管理の機能を統合することによって実装されます。

以前は、Knative 以外にもさまざまなオープンソース ソリューションがありました。 各ソリューションには独自の展開方法があり、標準化されたプラクティスが不足しているため、市場の断片化を引き起こす可能性があります. つまり、特定のシステム機能が必要な場合は、特定のプロバイダーを選択する必要があります。
しかし、移行の問題が前面に出始めました。 このような問題を回避するために、Knative サーバーレス フレームワークが導入されました。 そのため、タスクの組み込みに苦労している場合でも、Knative は Kubernetes ベースのパイプライン内で効率的にそれを行うことができます。
Knative には 3 つの部分があります。
- Knative Build:コンテナー イメージをビルドし、ソース コードから利用できるようにします。
- Knative Serving: Istio と Kubernetes を使用して、割り当てられたインフラストラクチャ リソースを介してこれらのコンテナー イメージを接続およびデプロイします。
- Knative Eventing:これにより、ユーザーはイベント トリガーを定義し、イベント トリガーをコンテナー化された関数に関連付けることができます。
Knative がイベントを識別するたびに、関連付けられたプロセスを定義してオンデマンドで実行します。 Knative を使用すると、Knative は特定のプロセスが実行されたときにのみホスティング リソースをコミットするため、作業のためにコンテナー ノード、クラスター、およびポッドを割り当てる必要はありません。 このようにして、Knative はサーバーレスとコンテナーの利点のバランスを取ります。
Knative のコアコンセプト
Knative Serverless Framework の主な概念と、それらが Knative プリミティブにどのように関連するかについて説明しましょう。
建てる
Knative ビルドは、既存の Kubernetes のプリミティブを利用および拡張するのに役立ち、オリジンからコンテナー ビルドで実行できるようにします。 依存関係とリポジトリからソース コードを有効にし、コンテナー イメージをビルドして登録します。
イベント

イベントは、イベント駆動型アーキテクチャを構築するために、疎結合のイベント コンシューマーとプロデューサー間の通信を改善するのに役立ちます。 Knative は、開発者のスクリプトなしで自動的に実行する必要があるこれらのイベントをキューに入れます。
その後、これらのイベントはコンテナーに配信されます。 次に、イベント プロデューサーにフィードを送信してタスクを実行します。 これにより、接続を確立するためのコードを作成する際の開発者の作業負荷が軽減されます。
機能
関数は、独立したデプロイ ユニットであり、マイクロサービスのような Knative サービング サービスです。 そのコードは、次のような単一のタスクを実行するように記述されています。
- データベース内のファイルの処理
- ユーザーをデータベースに保存する
- スケジュールされた作業の実行
Knative サーバーレス フレームワークは、機能を効果的に開発およびデプロイし、管理できるように設計されています。
プラグイン

プラグインを使用して、Knative サーバーレス フレームワークの機能を簡単に拡張または上書きします。 すべてのserverless.ymlファイルには、さまざまなプラグインを特徴とするプラグイン プロパティが含まれています。
資力
リソースは、関数が使用する Knative サーバーレス インフラストラクチャ コンポーネントです。
- AWS SQS イベント ソース
- スケジュールされたタスク (5 分ごと、10 分ごとなどに実行)
- Kafka イベント ソース
もっと。
サービス
サービスはプロジェクトのようなものです。 したがって、サービスは Knative サーバーレス フレームワークの組織単位です。 1 つのアプリケーションに多くのサービスを含めることができますが、サービスはプロジェクト ファイルと考えることができます。
ここで、関数、イベント、およびリソースをすべて、 serverless.yml 、 serverless.json 、またはserverless.jsという名前の 1 つのファイルで定義できます。 サーバーレス フレームワークを使用してサービスをデプロイすると、ファイル内のすべてが一度にデプロイされます。
サービング

Knative-serving は、アプリケーションのデプロイをサポートする Istio と Kubernetes に組み込まれています。 これにより、サーバーレス コンテナー、ネットワーク プログラミング、および Istio コンポーネントの自動スケーリングの迅速な開発が可能になります。 Knative-serving は、コンテナーを、1 つのインスタンスから多数のコンテナー インスタンスに及ぶスケーラブルなサービスと見なします。
Knativeの特徴

Knative サーバーレス フレームワークのいくつかの機能について説明しましょう。
- Knative は、サービスを Kubernetes にデプロイできる Kubernetes ベースのサーバーレス フレームワークです。
- サポートされている環境に Knative を簡単に統合
- 開発者は、Knative の助けを借りて Kubernetes API を直接使用して、サーバーレス サービスをデプロイできます
- Knative のイベンティング システムを利用して、ユーザーがサーバーレス サービスをトリガーできるようにします。
Knative の仕組み
Knative サーバーレス フレームワークは、イベント ステアリング セグメントとして機能し、Istio と Kubernetes を接続します。 Kubernetes は、マイクロサービスとコンテナーのオーケストレーターとして機能します。 一方、Istio はオープンソースのメッシュ技術であり、さまざまなコンポーネントをまとめてユーザーや自分自身とやり取りします。
Knative は、基本的な日常業務を実行するための複数のコンポーネントをユーザーに提供します。 これらのコンポーネントは、さまざまな用途で繰り返し使用されています。 開発者は、任意のプログラミング言語を使用できます。 したがって、Knative はコンテナー イメージのみを認識するため、言語に関する特定の知識は必要ありません。
Knative サーバーレス フレームワークには、その機能の鍵となる 3 つのコンポーネントがあります。
新しいコンテナの構築

ビルド コンポーネントは、新しいコンテナの構築を担当します。 ソースコードをコンテナに変換できます。 Knative は、ビジネス固有のニーズを満たすように構成できます。
まず、Knative は Github などのライブラリからソース コードを引き出します。 次に、コードが効果的に実行されるように、基になる依存関係が追加されます。 その後、コンテナ イメージが構築され、Kubernetes プラットフォームがアクセスできるファイルに配置されます。
コンテナーは、Kubernetes と Knative を使用する開発者が利用できるようになります。 したがって、コンテナは、コードの出所がわかっている限り構築されます。
プラットフォームの提供または実行
サービス コンポーネントは、プラットフォームの実行を担当します。 それには以下が含まれます:
- 構成:サービスの複数のバージョンを管理するには、構成が確実です。 コンテナーの新機能がデプロイされるたびに、Knative は既存のバージョンを保存し、最新の変更と機能を備えた新しいバージョンを作成します。 さらに、Knative はサービスの状態を定義します。
- 自動スケーリング:サーバーレス コンテナーをより適切に機能させるには、コンテナーを上下に自動スケーリングできる必要があります。 Knative は、必要に応じてサービスを多数に自動スケーリングできます。
- インテリジェントなサービス ルーティング: Knative の動作メカニズムの重要な部分です。 これにより、開発者はトラフィックの流れと量をマイクロサービスのさまざまな既存のバージョンに向けることができます。 新機能とブルーグリーン展開戦略を導入しながら、インテリジェントなサービス ルーティングを使用できます。
これにより、一部のユーザーを最新のテストとバージョンにさらし、大量のトラフィックを新しいバージョンに徐々にルーティングできます。

関数を定義するためのイベンティング

Knative のイベンティング コンポーネントは、Knative の機能を記述する役割を果たします。 イベントに基づいてコンテナーの実行を定義できます。 さまざまなイベントが、コンテナーの特定の機能をトリガーします。
開発者は、イベント トリガーと関連するコンテナーを定義して、Knative にその仕事をさせることができます。 Knative は、イベントのリストとイベントの配信を処理します。
Knative の利点
Knative は、ルート管理、段階的リリース、サービス接続などのサービスを提供します。 広大なコミュニティを誇っています。 Knative が企業にこのテクノロジーの採用にどのような影響を与えるかについて説明しましょう。
- 他のソリューションとは異なり、Knative には標準イベントがあり、FaaS ソリューションと互換性があります。 サーバーレス アーキテクチャの設計に役立つ CloudEvent 標準フレームワークを提供します。
- Knative は PaaS ではありませんが、サーバーレス オーケストレーション プラットフォームを使用してサーバーレス PaaS を作成できます。
- Knative には、本格的で成熟したサーバーレス設計があります。
- クロスプラットフォームをサポートし、クラウド プロバイダー間の普遍的な標準を提供して、ベンダーが特定のソリューションに拘束される可能性を排除します。

- Knative は柔軟なフレームワークを提供します。
- 比例的な段階的リリースをサポートしています。
- コンテナ化された環境内でサーバーレス エコシステムを体験できます。
- Knative では、管理とツールの信頼性が失われます。
- Kubernetes を実装することで、Knative と統合されている他のクラウド プロバイダーにすばやく移行できます。
- リクエスト駆動型のコンピューティング モデルを提供します。
- ワークフローをサービスとして管理できます。
- Knative を使用すると、IoT データを処理し、アクセシビリティ チェックを実行し、セキュリティ グループの構成を検証できます。
- これにより、開発者はコーディングに集中でき、反復的なコードをすばやく作成できます。
- これにより、開発者は新しいバージョンを確実に組み込むことができます。
- Knative のイベントベースのモデルは、サブスクリプション、外部システムへの接続、登録などの設計を実装するのに役立ちます。
Knative の課題 (およびいくつかの解決策)
効率の課題
適切なアプリケーションをサポートする Knative フレームワークは、最小限のコストでより優れたパフォーマンスを提供します。 ただし、アプリケーションを不適切に組み合わせると、コストが高くなり、コンテナ リソースが十分に活用されない可能性があります。 これにより、アプリケーションのパフォーマンスが低下する可能性があります。これは、Knative サーバーレス デプロイの最大の課題です。

したがって、リソース プールのサイズが小さかったり、アプリケーションが間違っていたりすると、多くの Knative のメリットが損なわれる可能性があります。
Knative でリソースの量とアプリケーションの組み合わせを検証するテストを実行することで、この課題を克服できます。 それぞれの平均負荷と最大負荷のサイジングによってイベント負荷を測定し、リソースの合計消費量を見積もります。 いくつかのアプリケーションに対してこれを繰り返し、試用構成を作成して実行し、見積もりを検証します。
機能上の課題
Knative の機能上の課題は次のとおりです。
- Knative は、ステートレス モデルに適合する関数に依存します。 これは、コンポーネント自体にデータが保存されていないことを意味します。 機能の開発は難しい段階ではありませんが、アプローチを少し変更する必要があります。これは、1 つのミスがソフトウェアのパフォーマンスを台無しにする可能性があることを意味します。
- ビジネス データは複数のステップ トランザクションで構成され、ステートレス関数はすべてのステップにわたってコンテキストを維持します。 Knative には、パブリック クラウドのサーバーレス ツールにあるような機能はありません。
定期的な監視と問題の修正は、パフォーマンスを適切なスコアに保つのに役立ちます。
運用上の課題

パブリック クラウドのサーバーレス サービスと比較すると、Knative には運用上の課題があります。 管理者は、パブリック クラウドで基盤となるサーバーを制御しません。 ただし、Kubernetes、コンテナー、Knative、および Istio 自体と共にサーバーを管理する必要があります。
Knative は、すでに Kubernetes とコンテナーにコミットしている企業の運用と開発の複雑さを最小限に抑えます。 サービス メッシュとマイクロサービスに取り組んでいる人は、Knative が自然な拡張機能であることに気付くでしょう。
Knative のユースケース

時間によって確立された制限内または制限を超えて変動する数のイベントを発生させるアプリケーションの場合、Knative が最適です。 Knative サーバーレス フレームワークの具体的なユース ケースには、次のようなものがあります。
- ウェブサイトのテストと検証
- アプリケーションの監視
- IoT
- ネットワーク監視
- モバイル アプリケーションのフロントエンド プロセス
- アジャイルと DevOps のライフサイクル
- 新機能のロールアウト
- Kubernetes の合理化
イベントオリエンテーションは欠かせません。 IT チームがアプリケーションをトランザクションではなく一連のイベントとして想像できない場合、Knative は機能上および効率上の理由から適切な選択ではない可能性があります。
Knative の前提条件とインストール
上記のセクションで説明したように、Knative は、サービス メッシュとワークロード オーケストレーション クラスターで実行されるイベンティングやサービングなどのコンポーネントのセットです。 簡単な操作のためにインストールする必要があるコマンド ライン ユーティリティがあります。 したがって、インストールを続行できるようにするには、いくつかの依存関係が必要です。
前提条件

Kubernetes をインストールするには、いくつかのオプションがあります。 Docker Desktop は、さまざまな目的に役立つ簡単な Kubernetes クラスターを実現します。 簡単な方法は、Docker で Kubernetes を使用して、Docker コンテナー ノードと共に Kubernetes クラスターを実行することです。 クラスターを操作する便利な方法は、Knative コマンドライン ツールを使用することです。
Knative CLI は、そのリソースを作成するための簡単で迅速なインターフェースを提供します。 トラフィック分割や自動スケーリングなどの複雑なタスクに役立ちます。 便利な方法は、互換性のあるバイナリを GitHub ページからダウンロードすることです。
インストール
すべての前提条件が整ったら、コンポーネントのインストールに進むことができます。 開発環境用に、クイックスタート プラグインがあります。 プラグインは、Knative クライアントを使用してローカル Knative クラスターをインストールするのに役立ちます。 公式リリース ページからクイックスタート プラグインをダウンロードできます。
結論: Knative の未来
Knative は、アプリケーションの自動スケーリングを提供することで、サーバーレス コンピューティングに取って代わりました。 これは、相互運用可能なモジュラー システムに大きな影響を与えます。
将来的には、Knative が現在の欠点をカバーし、サーバーレス アーキテクチャを実行するための最も効率的なテクノロジの 1 つになることが期待されています。
Knative テクノロジーは、サーバーレスの代替手段に対する利点を見ると、開発者にとってより影響力があります。 Knative を使用すると、Kubernetes 拡張機能を構築して維持する必要がなくなるため、時間を大幅に節約できます。 使いやすく、サーバーレス ソリューションの優れた代替手段であるため、開発者は Knative テクノロジに非常に満足しています。
そのため、クラウド ワークフローで Kubernetes 環境の能力を最大限に活用したい場合は、Knative テクノロジーを採用して、そのメリットをご自分の目で確かめてください。