Knativeとは?

公開日 2021年10月12日
暗く霧のかかった環境の中で、反射する表面の上に浮かぶ、赤と青に輝く無限大の記号

Knativeの定義

Knativeを使用すると、サーバーレス・ワークロードをKubernetesクラスター上で実行できるようになり、Kubernetesを使用したコンテナの構築とオーケストレーションがより迅速かつ容易になります。

Knative(ケイ・ネイティブと読みます)は、Kubernetesコンテナ・オーケストレーション・プラットフォームの拡張です。Kubernetes内のコンテナ化されたアプリケーションの構築、デプロイ、管理をよりシンプルで、よりKubernetesらしいエクスペリエンスにするツールとユーティリティーを提供します(こうしたことから、「Kubernetes」+「ネイティブ」を合わせた名前となっています)。

Kubernetesのように、Knativeはオープンソース・ソフトウェアです。Google社はもともと、IBM®、Pivotal社、RedHat社、SAP社をはじめとする50社近くの企業と協力して、これを開発しました。今日、クラウドネイティブ・コンピューティング・ファンデーション(CNCF)がKnativeオープンソース・プロジェクトをホストしています。

KubernetesにKnativeが必要な理由

Kubernetesは、コンテナのデプロイメント、管理、スケーリングを自動化およびスケジュールします。コンテナは、ソースコードと、あらゆる環境でコードを実行するために必要なすべてのオペレーティング・システム(OS)ライブラリーおよび依存関係を組み合わせた、軽量の実行可能なアプリケーション・コンポーネントです。

コンテナを使用すると、アプリケーション・コンポーネントはOSの単一インスタンスのリソースを共有できます。これは、仮想マシン(VM)を使用してアプリケーションが単一の物理コンピュータのリソースを共有できるのとほぼ同じです。コンテナは、VMよりも小型でリソース効率が高く、アジャイルおよびDevOps開発手法の増分リリース・サイクルに適しているため、最新のクラウドネイティブ・アプリケーションの事実上のコンピューティング・ユニットになっています。コンテナを使用する企業からは、アプリの品質向上、イノベーションのレベル向上など、その他のメリットも報告されています。

クラウドネイティブの開発がより一般的になり、コンテナが組織を増殖させるにつれて、スケジューリング、ロード・バランシング、ヘルス監視などを含むKubernetesのコンテナ・オーケストレーション機能により、増加の管理がはるかに容易になります。ただし、Kubernetesは複雑なツールであり、開発者は、リポジトリーからアプリケーションのソースコードをプルしたり、コードの周りにコンテナ・イメージを組み込んでプロビジョニングしたり、さまざまなツールを使用してKubernetesの外部でネットワーク接続を構成したりするなど、多くの反復的なタスクを実行またはテンプレート化する必要があります。Kubernetesマネージド・コンテナを自動的に継続的インテグレーション継続的デリバリー(CI/DC)パイプラインに組み込むには、特別なツールとカスタム・コーディングが必要です。

Knativeは、Kubernetesでこれらのタスクを自動化するツールを使用して、この複雑さを解消します。開発者は単一のYAMLマニフェスト・ファイルでコンテナの内容と構成を定義でき、Knativeが残りの作業、つまりコンテナの作成と、ルーティング、イングレス、ロード・バランシングなどを設定するためのネットワーク・プログラミングを実行します。Knativeは、開発者がYAMLファイルを編集せずにKnative機能にアクセスできるようにするコマンドライン・インターフェースであるKnative CLIも提供します。

IBM DevOps

DevOpsとは

Andrea Crawfordが、DevOpsとは何か、DevOpsの価値、そしてDevOpsのプラクティスとツールがアイデア考案から本番環境までのソフトウェア・デリバリー・パイプライン全体でアプリケーションを動かすのにどのように役立つかについて説明します。IBMのエキスパートが指導するこのカリキュラムは、ビジネス・リーダーが成長を促進するAI投資の優先順位付けに必要な知識を得られるように設計されています。

コンテナをサーバーレスにする

サーバーレス・コンピューティング・モデルは、アプリケーションを開発しやすく、費用対効果を高めるクラウドネイティブ実行モデルです。サーバーレス・コンピューティング・モデル

  • コンピューティングリソースをオンデマンドでプロビジョニングし、リクエストに基づいて透過的にスケーリングし、リクエストがなくなるとゼロにスケーリングします。

  • スケーリング、スケジュール設定、パッチ適用、プロビジョニングなど、すべてのインフラストラクチャー管理タスクをクラウド・プロバイダーにオフロードすることで、開発者は開発とイノベーションに時間と労力を集中できるようになります。

  • クラウドの顧客は、使用されたリソースに対してのみ料金を支払うことができ、アイドル状態の容量に対しては料金を支払う必要がありません。

Kubernetesを特定のクラウド・プロバイダーのサーバーレス・プラットフォームと連携する専用ソフトウェアがなければ、Kubernetesだけではサーバーレス・アプリケーションを実行できません。Knativeを使用すると、コードを抽象化し、ネットワーク・ルーティング、イベント・トリガー、自動スケーリングを処理することで、コンテナがサーバーレス関数またはその他のアプリケーション・コード(マイクロサービスなど)を中心に構築されているかどうかに関係なく、任意のKubernetesクラスター上でコンテナをサーバーレス・ワークロードとして実行できるようになります。

Knativeの仕組み:Knativeコンポーネント

KnativeはKubernetes上に配置され、Build、Serving、Eventingという3つの主要コンポーネントまたはプリミティブを追加します。

Build

Knative Buildコンポーネントは、ソースコードのコンテナへの変換を自動化します。このプロセスには通常、以下を含む複数のステップが含まれます。

  • GitHubなどのコード・リポジトリーからソースコードをプルする

  • コードを実行する必要がある環境変数やソフトウェア・ライブラリーなどの基礎となる依存関係をインストールする

  • コンテナ画像の構築

  • Kubernetesや他の開発者が見つけられるレジストリーにコンテナ・イメージを配置します。

Knativeは、BuildプロセスにKubernetes APIやその他のツールを使用します。開発者は、すべての変数(ソースコード、必要な依存関係など)を指定する単一のマニフェスト(通常はYAMLファイル)を作成でき、Knativeはマニフェストを使用してコンテナ・ビルドを自動化します。

Serving

Servingコンポーネントは、スケーラブルなKnativeサービスとしてコンテナをデプロイおよび実行します。Servingは、次の重要な機能を提供します。

  • 構成はサービスの状態を定義および維持します。また、バージョン管理も提供します。構成を変更するたびにサービスの新しいバージョンが作成され、以前のバージョンが保存されます。

  • インテリジェント・サービス・ルーティングを使用すると、開発者はトラフィックをサービスのさまざまなバージョンにルーティングできます。例えば、新しいサービス・バージョンを作成したものの、すべてのユーザーを移行する前に、それをユーザーのサブセットにデプロイしたいとします。インテリジェントなサービス・ルーティングを使用すると、ユーザー・リクエストの一部を新しいサービスにルーティングし、残りを以前のバージョンにルーティングできます。新しいサービスに対する信頼が高まってきたら、より多くのトラフィックを新しいサービスにルーティングできます。

  • 自動スケーリング。Knativeは、サービスを数千のインスタンスにスケールアップできます。また、コンテナのインスタンスがまったく存在しない状態にスケールダウンすることもできます。これは、サーバーレス・アプリケーションをサポートする上でクリティカルです。

Knative Servingは、Kubernetesエコシステムの別のアプリケーションであるISTIOからのインテリジェント・サービス・ルーティングを借用しています。Kubernetes用のオープンソース・サービス・メッシュであるISTIOは、サービス・リクエストの認証、サービス間の安全な通信のための自動トラフィック暗号化、マイクロサービスとサーバーレス関数の操作に関する詳細なメトリクス、開発者と管理者がインフラストラクチャーを最適化するためのその他のツールも提供します。

Eventing

Knative Eventingコンポーネントを使用すると、さまざまなイベントでコンテナベースのサービスと機能をトリガーできます。Knativeはこれらのイベントをキューに入れて適切なコンテナに配信するため、その機能のためにスクリプトを記述したり、ミドルウェアを実装したりする必要はありません。Knativeは、開発者が選択できるイベントのキューであるチャネルと、コンテナにイベントを配信するメッセージング・プラットフォームであるバスも処理します。また、開発者はフィードを設定して、コンテナが実行するアクションにイベントを連携することもできます。

Knative Eventソースにより、開発者はサードパーティーのイベント・プロデューサーに簡単に連携できます。Knative Eventingは、イベント・プロデューサーに自動的に連携し、生成されたイベントをルーティングします。プログラムでそれを行う方法を理解する必要はありません。Knativeがすべての作業を行います。

Knativeのユースケース

要約すると、Knativeは、コンテナ化されたアプリ開発を簡素化したり、コンテナを使用したりしたいKubernetesユーザーのいくつかのユースケースをサポートします。

Kubernetesを合理化する。繰り返しのビルドと構成のタスクを排除することにより、Kubernetesで作業する開発者がより生産的になります。Kubernetesクラスターの増加を管理するのに苦労している開発チームは、Knativeが特にお勧めです。

サーバーレスへの道を加速する。サーバーレス環境は、手動での設定や管理が困難になる場合がありますが、Knativeを使用することによりサーバーレス・ワークロードを素早く設定できます。開発者はただコンテナを組み込むだけで作業は終了です。後は、Knativeがサーバーレス機能として実行します。

アジャイルとDevOpsのライフサイクルをサポートする。Knativeを使用すると、開発者が新しいコンテナとコンテナ・バージョンをより迅速に作成できるため、アジャイルまたはDevOpsワークフローの一部として、コンテナ化されたアプリケーションを小さく高速な反復的なステップで簡単にデプロイできるようになります。Knativeサービスは、特別なソフトウェアやカスタム・プログラミングを必要とせずに、自動化されたCI/CDパイプラインに簡単に統合できます。

柔軟に新機能を展開する。顧客に新しいリリースを展開すると、ビジネスプロセスに影響を与える可能性のあるソフトウェアの問題を公開できます。Knativeの構成とルーティングにより、開発者は新しいコンテナのリビジョンをユーザーベースのサブセットに公開できます。その後、問題のトラブルシューティングを行ったり、必要に応じて古いバージョンに素早くロールバックしたりしながら、時間の経過とともに徐々に対象ユーザーを増やしていきます。

開発者がコーディングとイノベーションに集中できるようにする。DevOpsにより、開発者は独自の環境を管理できるようになります。しかし、結局のところ、開発者は、イベントトリガー用のメッセージ・バス・キューの構成やコンテナの拡張性の管理ではなく、バグのないソフトウェアと革新的な新機能の構築に重点を置きたいと考えています。Knativeを使用すると、開発者は得意なことに多くの時間を費やすことができます。

関連ソリューション
IBM Instana Observability

AIとオートメーションの力を活用することで、問題がアプリケーションスタック全体でプロアクティブに解決します。

IBM Instana Observabilityはこちら
DevOpsソリューション

DevOpsソフトウェアとツールを使用して、複数のデバイスや環境でクラウドネイティブ・アプリを構築、デプロイ、管理します。

DevOpsソリューションはこちら
クラウド・コンサルティング・サービス

ビジネスの俊敏性と成長を加速—IBMのクラウド・コンサルティング・サービスを利用して、あらゆるプラットフォーム上のアプリケーションを継続的にモダナイズしまします。

クラウド・コンサルティング・サービスはこちら
次のステップ

IBM Instana®によるプロアクティブな問題検知から、スタック全体にわたるリアルタイムの洞察まで、クラウドネイティブ・アプリケーションの安定した稼働を維持できます。

  1. IBM Instanaの詳細を見る
  2. DevOpsソリューションはこちら