概要
Kubernetes (k8s または「kube」とも呼ばれる) はオープンソースのコンテナ・オーケストレーション・プラットフォームで、コンテナ化されたアプリケーションのデプロイ、管理、スケーリングに伴う多くの手動プロセスを自動化します。
Kubernetes は当初、Google のエンジニアによって Borg プロジェクトとして開発および設計され、2015 年に Cloud Native Computing Foundation (CNCF) に寄付されました。Red Hat® は Kubernetes に関して Google と最初に連携した会社の 1 つです。Kubernetes 発表前から関わってきた Red Hat は、Kubernetes アップストリーム・プロジェクトにおける第 2 位のコントリビューターになっています。
Kubernetes クラスタとは
動作している Kubernetes のデプロイメントはクラスタと呼ばれます。クラスタは、実行中の Linux® コンテナのグループです。Kubernetes クラスタは 2 つのパーツとして視覚化できます。コントロールプレーンと、コンピュートマシンつまりノードです。
各ノードは独立した Linux 環境であり、物理マシンでも仮想マシンでもかまいません。各ノードは、コンテナで構成される Pod を実行します。
コントロールプレーンの役割は、どのアプリケーションが実行されているか、どのコンテナイメージが使用されているかといった、クラスタの望ましい状態を維持することです。コンピュートマシンは実際にアプリケーションとワークロードを実行します。コントロールプレーンは、管理者 (または DevOps チーム) からコマンドを受けると、従属するコンピュートマシンにそれを伝えます。
このハンドオフは多数のサービスと連携して、タスクに最適なノードを自動的に決定します。サービスは Pod から作業の定義を切り離し、適切な Pod に自動的にサービスリクエストを提供します。クラスタ内のどこにあろうと、たとえ置き換えられていても問題ありません。次にリソースを割り当て、そのノードに Pod を割り当てて、要求された作業を実行します。
Kubernetes は Red Hat Enterprise Linux などのオペレーティングシステム上で稼働し、ノード上で実行されるコンテナの Pod とやり取りします。
Kubernetes クラスタの望ましい状態は、どのアプリケーションまたは他のどのワークロードを実行する必要があるか、どのイメージを使用するか、どのリソースを利用できるようにするべきかといった構成の詳細を定義します。
このタイプのインフラストラクチャを使用するコンテナの管理方法と大きな違いはありません。ユーザーによる制御は高いレベルでのみ発生し、個別のコンテナやノードのミクロな管理を行う必要なく、より優れた制御性が実現します。
Kubernetes の実行場所はユーザーが選択できます。ベアメタルサーバー、仮想マシン (VM)、パブリッククラウドプロバイダー、プライベートクラウド、ハイブリッドクラウド環境を使用できます。Kubernetes の主な利点の 1 つは、さまざまな種類のインフラストラクチャで動作することです。
Red Hat のリーダーが紹介する、コンテナでオープン・ハイブリッドクラウドを革新する方法をご覧ください。
Red Hat のリソース
Kubernetes とDocker
Docker は、Kubernetes がオーケストレーションするコンテナランタイムとして使用できます。Kubernetes が Pod をノードに割り当てると、そのノードの kubelet (各コンテナを実行させるサービス) は指定されたコンテナを起動するように Docker に指示を出します。
次に kubelet が Docker からそれらのコンテナのステータスを継続的に収集し、その情報をまとめてコントロールプレーンに伝えます。Docker はコンテナをそのノードに pull し、これらのコンテナの開始や停止を行います。
Docker で Kubernetes を使用する場合の異なる点は、管理者がこれらのことを手動ですべてのノードのすべてのコンテナに行う代わりに、自動化されたシステムが Docker に依頼するという点です。
Kubernetes を使い始める準備ができたら、このオンデマンドコースで、アプリケーションやサービスのコンテナ化、Docker を使用したテスト方法、および Red Hat OpenShift® を使用して Kubernetes クラスタにデプロイする方法について学習できます。
Kubernetes の使用目的
Kubernetes は、コンテナ化されたレガシーアプリケーションやクラウドネイティブ・アプリケーション、およびマイクロサービスにリファクタリングされたアプリケーションの提供と管理を支援します。
変化するビジネスニーズに対応するためには、開発チームが新しいアプリケーションとサービスを迅速に構築できることが必要です。クラウドネイティブ開発は、コンテナ内のマイクロサービスから始まります。これにより、開発が迅速になり、既存のアプリケーションの転換と最適化が容易になります。
Kubernetes によるアプリケーション開発
本番アプリケーションは複数のコンテナにまたがっており、これらのコンテナは複数のサーバーホストにデプロイされる必要があります。Kubernetes を活用すれば、これらのワークロード用にコンテナを大規模にデプロイするうえで必要なオーケストレーションと管理機能を手に入れることができます。
Kubernetes オーケストレーションによって、複数のコンテナにまたがるアプリケーションサービスを構築し、それらのコンテナをクラスタにスケジュールして、コンテナのスケーリングを行い、コンテナの正常性を継続的に管理できるようになります。Kubernetes を使用すると、IT セキュリティの改善に向けて効果的な措置を講じることができます。
Kubernetes で総合的なコンテナ・インフラストラクチャを提供するには、ネットワーク、ストレージ、セキュリティ、テレメトリーなど他のサービスと統合する必要もあります。
これをプロダクション環境と複数のアプリケーションに拡張した場合、複数の共同の場所に設置されたコンテナは、個々のサービスを提供するために連携して動作する必要があります。
Linux コンテナは、マイクロサービスベースのアプリにとって、理想的なアプリケーションデプロイ単位であり、自己完結型の実行環境です。また、コンテナ内でマイクロサービスを使用すると、ストレージ、ネットワーク、セキュリティなどのサービスのオーケストレーションが容易になります。
そのため環境内のコンテナの数がかなり増加し、コンテナが蓄積されるにつれて、複雑さも増していきます。
Kubernetes はいくつかのコンテナを「Pod」にまとめることで、コンテナの急激な増加に伴って発生する問題の多くを解決します。Pod はグループ化されたコンテナに抽象的なレイヤーを追加します。これはワークロードをスケジューリングしたり、必要なサービス (ネットワークやストレージ) をそれらのコンテナに提供したりする際に役立ちます。
さらに Kubernetes は、これらの Pod 間でロードバランスを保ち、ワークロードを処理するのに適切な数のコンテナを確実に維持するようサポートします。
Kubernetes を正しく実装し、他のオープンソース・プロジェクト (Open vSwitch、OAuth、SELinux など) を活用することで、コンテナ・インフラストラクチャのすべての部分をオーケストレーションすることができます。
Red Hat による Kubernetes
Kubernetes はオープンソースであるため、確立された公式サポート体制があるわけではありません。実働環境で Kubernetes の実装に問題が発生した場合、苛立つことでしょう。そして、あなたの顧客も苛立つでしょう。
Kubernetes は車のエンジンのようなものだと考えてください。エンジンは単独でも稼働できますが、トランスミッション、車軸、車輪に接続すれば、自動車の一部として機能します。Kubernetes をインストールするだけでは、プロダクショングレードのプラットフォームを使用するのに十分ではありません。Kubernetes をフルに機能させるには、追加のコンポーネントが必要です。認証、ネットワーク、セキュリティ、監視、ログ管理、その他のツールを追加する必要があります。そこで Red Hat OpenShift が登場します。これは必要な部品をすべて備えた自動車にあたります。
Red Hat OpenShift は、企業向けの Kubernetes です。Kubernetes を企業向けに強化するためのさまざまなテクノロジーを提供します。これには、レジストリ、ネットワーキング、テレメトリー、セキュリティ、自動化、サービスが含まれます。Red Hat OpenShift は、プラットフォームの中心コンポーネントとして Kubernetes を備えています。また、CNCF が提供する認定済み Kubernetes です。
Red Hat OpenShift Container Platform を活用することで、開発者はコンテナ化された新しいアプリを作り、ホストし、クラウドでデプロイできるようになります。さらに、スケーラビリティ、制御性、オーケストレーションを提供することで、優れたアイデアを迅速かつ簡単にビジネスへつなげるための助けとなります。Kubernetes ワークロードのマネージド・クラウドサービスへのデプロイまたは移行を検討しているなら、Amazon Web Services (AWS)、Microsoft Azure、Google Cloud、IBM Cloud、およびその他のプロバイダーで、OpenShift をクラウドネイティブ Kubernetes プラットフォームとして使用することもできます。
OpenShift を基盤として構築された Red Hat Advanced Cluster Management と Red Hat Ansible® Automation Platform を併用することで、パブリッククラウド、オンプレミス、エッジ環境など、複数のリージョンにまたがる複数の Kubernetes クラスタを効率的にデプロイし、管理できます。
ユースケース:クラウド・プラットフォームを構築して革新的なバンキングサービスを提供
アラブ首長国連邦 (UAE) の大手銀行の 1 つである Emirates NBD は、デジタルイノベーションのためのスケーラブルで回復力のある基盤を必要としていました。当時の Emirates NBD では、プロビジョニングには延々と時間がかかり、IT 環境は複雑に入り組んでいました。サーバーのセットアップに 2 カ月を要し、大規模なモノリシック・アプリケーションへの変更適用には 6 カ月以上かかりました。
Emirates NBD は、Red Hat OpenShift Container Platform を使用してコンテナのオーケストレーション、統合、管理を行い、Sahab を作成しました。これは、中東の銀行が大規模に実行する最初のプライベートクラウドでした。Sahab は、as-a-Service モデルを通じて、プロビジョニングからプロダクションまでエンドツーエンドの開発のためのアプリケーション、システム、その他のリソースを提供します。
新プラットフォームに移行した Emirates NBD では、アプリケーション・プログラミング・インタフェース (API) とマイクロサービスの活用により、社内チームとパートナーとのコラボレーションがより円滑になりました。また、アジャイルおよび DevOps 手法を取り入れた開発により、アプリケーションの提供と更新のサイクルも短縮されました。
Red Hat 公式ブログ
Red Hat のお客様、パートナー、およびコミュニティのエコシステムに関する最新の情報を入手しましょう。