Skip to main content
用語集

Kubernetes (K8s)とは?

Kubernetesとは、アプリケーションをパッケージ化して分離し、より高い拡張性と移植性を可能にするコンテナ化の中核となる技術です。KubernetesはK8sとも呼ばれ、多数の分散コンテナで構成されるコンテナ型アプリケーションの展開、拡張、管理を簡素化、自動化し、マルチクラウドハイブリッドクラウド環境においてより容易にオーケストレーションができるようにします。

コンテナ型アプリケーションKubernetes(K8s)とは?

Kubernetesは元々Googleの社内プロジェクトとして作られましたが、現在はCloud Native Computing Foundation(CNCF)がホストするオープンソースプロジェクトとなっています。

コンテナ化されたアプリケーションがDevOps、継続的インテグレーション/継続的デリバリー(CI/CD)、クラウドネイティブ開発の主流となる中、Kubernetesは、効率的なスケーラビリティや容易なワークロード移植性をもち、また、分散した動的かつ一時的なリソースの複雑なエコシステムの管理の簡単な方法を提供することで広く採用されています。

コンテナ型アプリケーションとは何か、なぜそんなに人気があるのか?

簡単に言えば、アプリケーションのコンテナ化とは、アプリケーションの仮想化を非常に効率的かつポータブルに行うことです。アプリケーションごとに仮想マシン全体を起動し、オペレーティング・システム(OS)を完備するのではなく、1つのホスト上で複数のコンテナを実行し、同じOSカーネルを共有することができます。

ベアメタルシステム、クラウドインスタンス、さまざまなオペレーティングシステムのVM上で動作するコンテナは、従来の仮想化アプリケーションや物理アプリケーションよりもメモリ、CPU、ストレージを効率的に使用できます。また、サイズが小さいため、同じインフラストラクチャ上でより多くのアプリケーションコンテナをサポートすることができます。コンテナは簡単に複製でき、ファイルシステム、バイナリ、その他の情報はDevOpsライフサイクルを通じて同じままです。また、特定のコンテナは、クラウドやオンプレミスのどのシステムでも実行でき、コードの変更やOS固有のライブラリ依存の管理は必要ありません。これらの特性により、アプリケーションのコンテナ化は、デジタルビジネスが求めるスピード、柔軟性、ポータビリティに理想的に適合しています。

Kubernetesは実際に何に使われているのか?

アプリケーションのコンテナ化のメリットを実現するためには、まずアプリケーションをコンテナ化し、次にインフラストラクチャ全体で効果的にオーケストレーションできるようにする必要があります。前者については、DockercontainerdCRI-OrunCなどのアプリケーションコンテナ化技術に依存することになります。後者については、多くの場合、Kubernetes を利用します。

Kubernetesは、コンテナオーケストレーションシステムとして、アプリケーションを構成するコンテナを論理的な単位にグループ化し、大規模な場合でもより容易に検出・管理できるようにします。K8sは、Container Runtime Interface(CRI)を介してコンテナランタイムと統合されており、コンテナ化されたアプリケーションの日々の管理、関連リソースの抽象化、サービスの可用性を保証する継続的なヘルスチェックを自動化できます。これにより、企業は、クラウドネイティブなマイクロサービスベースのアプリケーションをより迅速に構築・管理し、複数の環境にわたってアプリケーションをより容易に展開・移動させ、アプリケーションをより効率的に拡張できます。

K8sは、DevOpsチームに対して、異なるクラウド環境間でアプリケーションを展開するための共通プラットフォームを提供し、基盤となるクラウドインフラの複雑な仕組みを抽象化することで、より価値の高いコーディングに完全に集中できるようにします。企業は、コストを最適化しながら、顧客のニーズに最も適したクラウドにアプリケーションを展開する柔軟性を得ることができます。

Kubernetesのアプリケーショントラフィックを負荷分散することで最高の結果を得る

従来のアプリケーションがアプリケーションロードバランサーに依存して、マルチサーバー環境全体で信頼性、可用性、およびパフォーマンスを確保するように、クラウド環境では、組織のクラウドリソース全体でワークロードを分散させるクラウドロードバランサーが必要とされるのです。Kubernetesのアプリケーショントラフィックを負荷分散することは、ユーザーに最適なエクスペリエンスを提供するために重要です。基本的な前提は同様で、アプリケーションロードバランサーは単一のサーバーが過剰な要求で負荷がかからないようにし、クラウドロードバランサーはクラウド間でネットワークトラフィックを分散させ、Kubernetesアプリケーションへのトラフィックを負荷分散することで、サービスを構成するKubernetes pods間で均等に要求を分散することが可能になります。これにはいくつかのオプションがあります。

  • NodePort:基本的なルーティングルールしかない小規模クラスタ向けのこのシンプルなアプローチでは、各ノードでポートが割り当てられ(NodePortと呼ばれる)、ユーザーはノードのIPアドレスとポート値でアプリケーションにアクセスできるようになります。
  • LoadBalancer:サービスごとに複数のプロトコルとポートをサポートするLoadBalancerは、NodePortをさらに進化させたものと考えることができます。ここでは、各ノードにポートが割り当てられ、外部のロードバランサーに接続されます。このオプションは、基盤となるクラウドプロバイダーのインフラと統合する必要があり、通常、そのような統合を行うパブリッククラウドプロバイダーで使用され、プロバイダー間の移植性を複雑にする要因になる可能性があります。さらに、各サービスに外部IPアドレスをデフォルトで割り当て、それぞれがクラウド上の外部ロードバランサーを利用すると、コストが一気に膨れ上がる可能性があります。
  • Ingress Controller:K8sでは、クラスタ内で動作するアプリケーションにHTTPやHTTPSのトラフィックをルーティングするために使用できるIngress Controllerが定義されています。Ingress Controllerは、Podを外部トラフィックに公開し、負荷分散アルゴリズムに従ってネットワークトラフィックをサービスに振り分けることができますが、外部のロードバランサーを完全に不要にするわけではありません。パブリッククラウドプロバイダーはそれぞれ独自のIngress Controllerを持ち、独自のロードバランサーと連携して動作するため、マルチプロバイダークラウド戦略では、これらの環境の橋渡し各クラウド固有の仕様に依存しない外部ロードバランサーが必要となります。

Kubernetes アプリケーショントラフィックの負荷分散のオプションを検討する場合、パブリッククラウドとプライベートクラウドの両方でクラウドに依存せず、ポッドの作成とスケーリングに合わせて動的なトラフィック管理構成をサポートし、既存のDevOps ツールと容易に統合できるソリューションを探す必要があります。また、従来のアプリケーションロードバランサーと同様に、積極的なトラブルシューティングと迅速な根本原因の分析のために、一元化された可視性と分析機能を提供する必要があります。

A10のKubernetesをサポート

A10は、さまざまなソリューションを通じてKubernetesをサポートしています。A10のアプリケーション配信・負荷分散ソリューションA10 Thunder® ADCは、幅広いフォームファクター(物理、仮想、ベアメタル、コンテナ、クラウドインスタンス)で利用でき、パブリッククラウドや プライベートクラウド上で実行するコンテナベースのクラウドネイティブアプリケーションおよびサービスの配信とセキュリティを最適化します。

Thunder Kubernetes Connector(TKC)により、A10は、Kubernetesクラスタ内で実行されているサービスを検出し、Kubernetes Podの起動、停止、ノード変更に伴うトラフィックのロードバランスをThunder ADCで設定する簡単で自動化された方法を提供します。TKCは、Kubernetesクラスタ内のコンテナとして実行され、Thunder ADCのあらゆるフォームファクターで動作し、CI/CDリリースサイクルにシームレスにフィットします。

A10 TKCとThunder ADCによるマルチ/ハイブリッドクラウドでのKubernetesアプリケーションへの外部アクセス
A10 TKCとThunder ADCによるマルチ/ハイブリッドクラウドでのKubernetesアプリケーションへの外部アクセス

以下のビデオでは、Thunder ADCとThunder Kubernetes Connector(TKC)を使って、Kubernetes K8sクラスタで動作するアプリケーションにアクセスする様子をデモしています。

https://youtu.be/gOX_OPQTVKE

< 用語集インデックスページに戻る

Kubernetesクラスター内アプリケーションへのトラフィック負荷分散

Kubernetesを利用することで、顧客ニーズに対して最適なアプリケーションをクラウド上にデプロイできる柔軟性と、コストの最適化を同時に実現できるようになります。
しかし、アプリケーションをプライベートクラウドからパブリッククラウド (AWSやAzureなど) へ移行するときに、利用のしやすさや、パフォーマンス、信頼性、セキュリティをプライベートクラウドと同程度に確保するには、どのようにすれば良いのでしょうか。

ブログを見る Kubernetesクラスター内アプリケーションへのトラフィック負荷分散