Kubernetes とは?意味をわかりやすく解説
Kubernetes (k8s または「kube」とも呼ばれる) は、コンテナ化したアプリケーションを管理し、デプロイやスケーリングを自動化する、オープンソースのコンテナ・オーケストレーション・プラットフォームです。Kubernetes の読み方はクバネティス、クバネテス、クーべネティスなどがあり、その呼称から k8s と略記されることがあります。
Kubernetes クラスタの利点
Linux® コンテナを実行しているホストをまとめてクラスタ化することができますが、Kubernetes はこれらのクラスタを容易に、そして効率的に管理するために役立ちます。
Kubernetes クラスタには、オンプレミス、パブリック、プライベート、ハイブリッドクラウドにまたがるホストが含まれます。そのため、Kubernetes は、Apache Kafka によるリアルタイムのデータストリーミングなど、迅速なスケーリングが要求されるクラウドネイティブ・アプリケーションをホストするプラットフォームとして最適であると言えます。
Kubernetes の歴史
Kubernetes は元々、Google のエンジニアによって開発および設計されました。Google は Linux コンテナテクノロジーに当初から貢献してきており、Google のすべての業務がコンテナで実行されていると公言しています。(このテクノロジーが、Google のクラウドサービスを支えています。)
Google では毎週 20 億以上のコンテナをデプロイしており、これらすべては内部プラットフォームである Borg から行われています。Borg は Kubernetes の前身であり、何年にもわたって Borg を使用して得られた教訓が、Kubernetes テクノロジーの背後にある主要な原動力となっています。
なお、Kubernetes の車輪のロゴから伸びる 7 本のスポークは、プロジェクトの最初の名前「Project Seven of Nine」を表しています。
Red Hat は Kubernetes に関して Google と最初に連携した会社の 1 つです。Kubernetes 発表前から関わってきた Red Hat は、Kubernetes アップストリーム・プロジェクトにおける第 2 位のコントリビューターになっています。2015 年に Google は、新しく設立された Cloud Native Computing Foundation (CNCF) に Kubernetes プロジェクトを寄贈しました。
Kubernetes でできること
Kubernetes を使用する主な利点は、クラウドネイティブ・アプリケーション開発を最適化する際に、物理または仮想マシン (VM) からなるクラスタ上でコンテナをスケジューリングし、実行するためのプラットフォームが得られる点にあります。
さらに、信頼性の高いコンテナベースのインフラストラクチャを本番環境に完全に実装することができます。Kubernetes は運用タスクを自動化します。他のアプリケーション・プラットフォームや管理システムで行える多くの操作を、Kubernetes ではコンテナに対して行うことができます。
Kubernetes パターンを使用することで、開発者は Kubernetes をランタイム・プラットフォームとしてクラウドネイティブ・アプリケーションを作成できます。これらのパターンは、Kubernetes 開発者がコンテナベースのアプリケーションとサービスを構築するために必要する必要のあるツールです。
Kubernetes では、次のようなことを実行できます。
- 複数のホストにわたるコンテナのオーケストレーション
- エンタープライズ・アプリケーションの実行に必要なリソースを最大限活用できるようにハードウェアを効率よく使用する
- アプリケーションのデプロイとアップデートを制御し自動化する
- ステートフルなアプリケーションを実行するためのストレージをマウントして追加する
- コンテナ化されたアプリケーションとそのリソースを迅速にスケーリングする
- サービスを宣言的に管理する (これにより、デプロイ済みアプリケーションが常に意図したとおりに実行されます)
- 自動置換、自動再起動、自動複製、自動スケーリングにより、アプリケーションのヘルスチェックと自己修復を行う
ただし、Kubernetes でオーケストレーションされたサービスを完全に提供できるようにするには、他のプロジェクトを利用する必要があります。他のオープンソースプロジェクトを加えることで、Kubernetes の能力が十分に発揮されます。特に必要なものには、以下が含まれます。
- レジストリ:Docker レジストリなどのプロジェクトを利用
- ネットワーキング:OpenvSwitch などのプロジェクトやインテリジェントなエッジ・ルーティングを利用
- テレメトリー:Kibana、Hawkular、Elastic などのプロジェクトを利用
- セキュリティ:マルチテナンシー・レイヤーのある OAUTH、LDAP、SELinux、RBAC などのプロジェクトを利用
- 自動化:インストールとクラスタのライフサイクル管理のための Ansible Playbooks を利用
- サービス:一般的なアプリケーション・パターンを豊富に含むカタログを利用
まず、Linux コンテナとコンテナ・オーケストレーション・テクノロジーの概要を確認することをお勧めします。このオンデマンドコースでは、アプリケーションやサービスのコンテナ化、Docker を使用したテスト方法、および Red Hat OpenShift を使用して Kubernetes クラスタにデプロイする方法について学習できます。
Kubernetes の用語を解説
ほとんどのテクノロジーと同様、Kubernetes 特有の用語が、Kubernetes の使用を難しくする可能性があります。ここでは Kubernetes をより理解するために役立つ、いくつかの一般的な用語をご紹介します。
コントロールプレーン:Kubernetes ノードを制御する一連のプロセス。すべてのタスクの割り当てはここで発生します。
ノード:要求に基づいてコントロールプレーンによって割り当てられたタスクを実行するマシン。
Pod:1 つのノードにデプロイされた、1 つ以上のコンテナからなるグループ。Pod に入っているすべてのコンテナは、同じ IP アドレス、IPC、ホスト名、その他のリソースを共有します。Pod はネットワークとストレージを、基盤となるコンテナから抽象化します。そのため、コンテナをより簡単にクラスタ内で移動できるようになります。
レプリケーション・コントローラー:クラスタ上で、同一の Pod コピーをいくつ実行するかを制御します。
サービス:Pod から作業の定義を分離します。Kubernetes サービスプロキシは適切な Pod に自動的にサービスリクエストを提供します。クラスタ内のどこにあろうと、たとえ置き換えられていても問題ありません。
Kubelet:ノード上で実行されるサービス。コンテナマニフェストを読み取り、定義されたコンテナが確実に開始し実行されるようにします。
kubectl:Kubernetes のコマンドライン設定ツールです。
Kubernetes の仕組み
アクティブな Kubernetes デプロイメントはクラスタと呼ばれます。Kubernetes クラスタは、コントロールプレーンとコンピュートマシン (ノード) の 2 つの部分として表示されています。
各ノードは独立した Linux® 環境であり、物理マシンでも仮想マシンでもかまいません。各ノードは、コンテナで構成される Pod を実行します。
コントロールプレーンの役割は、どのアプリケーションが実行されているか、どのコンテナイメージが使用されているかといった、クラスタの望ましい状態を維持することです。コンピュートマシンは実際にアプリケーションとワークロードを実行します。
Kubernetes は Red Hat® Enterprise Linux® などのオペレーティングシステム上で稼働し、ノード上で実行されるコンテナの Pod とやり取りします。
Kubernetes コントロールプレーンは、管理者 (または DevOps チーム) からコマンドを受けると、従属するコンピュートマシンにそれを伝えます。
このハンドオフは多数のサービスと連携して、タスクに最適なノードを自動的に決定します。次にリソースを割り当て、そのノードに Pod を割り当てて、要求された作業を実行します。
Kubernetes クラスタの望ましい状態は、どのアプリケーションまたは他のどのワークロードを実行する必要があるか、どのイメージを使用するか、どのリソースを利用できるようにするべきかといった構成の詳細を定義します。
インフラストラクチャの観点からは、これまでのコンテナの管理方法と大きな違いはありません。コンテナの制御をより高いレベルから行えるため、個別のコンテナやノードのミクロな管理を行う必要なく、より優れた制御性が実現します。
Kubernetes の設定と、ノード、Pod、および Pod 内のコンテナの定義を行うと、Kubernetes がコンテナのオーケストレーションを実行します。
Kubernetes の実行場所はユーザーが選択できます。ベアメタルサーバー、仮想マシン、パブリッククラウドプロバイダー、プライベートクラウド、ハイブリッドクラウド環境を使用できます。Kubernetes の主な利点の 1 つは、さまざまな種類のインフラストラクチャで動作することです。
Docker の役割
Docker は、Kubernetes がオーケストレーションするコンテナランタイムとして使用できます。Kubernetes が Pod をノードに割り当てると、そのノードの kubelet は指定されたコンテナを起動するように Docker に指示を出します。
次に kubelet が Docker からそれらのコンテナのステータスを継続的に収集し、その情報をまとめてコントロールプレーンに伝えます。Docker はコンテナをそのノードに pull し、これらのコンテナの開始や停止を行います。
Docker で Kubernetes を使用する場合は、管理者が手動ですべてノードですべてのコンテナについての指示を与えるのではなく、自動化されたシステムが Docker に指示する点が異なります。
Kubernetes ネイティブ・インフラストラクチャのメリット
現在、オンプレミスの Kubernetes デプロイの大部分は、既存の仮想インフラストラクチャ上で実行されており、ベアメタルサーバーでのデプロイが増えています。これは、データセンターにおける自然な進化です。Kubernetes は、コンテナ化されたアプリケーションのデプロイとライフサイクル管理のためのツールとして機能し、インフラストラクチャ・リソースの管理には別のツールが使用されます。
しかし、インフラストラクチャ・レイヤーを含む、コンテナに対応するデータセンターをゼロから設計できるとしたらどうしますか。
もし最初から設計できるのであれば、まずは Kubernetes がデプロイし、管理できるベアメタルサーバーとソフトウェア・デファインド・ストレージから始めるでしょう。これにより、セルフインストール、セルフスケーリング、および自己修復などのコンテナが持つメリットをインフラストラクチャに持たせることができるからです。これこそが、Kubernetes ネイティブ・インフラストラクチャの目指すところです。
Kubernetes ネイティブ・インフラストラクチャのメリットとは
パブリッククラウドのアジリティとオンプレミスのシンプルさにより、開発者と IT 運用の間の摩擦を軽減
VM を実行する別のハイパーバイザー・レイヤーが不要になり、コスト効率が向上
Kubernetes からコンテナ、サーバーレス・アプリケーション、VM をデプロイし、アプリケーションとインフラストラクチャの両方をスケーリングできる柔軟性を開発者に提供
オンプレミスとパブリッククラウドの共通レイヤーとして Kubernetes を使用し、ハイブリッドクラウドを拡張
Kubernetes ネイティブ・インフラストラクチャに Red Hat を選ぶ理由
Red Hat OpenShift
Red Hat OpenShift は、非 Kubernetes ネイティブ・インフラストラクチャのインストールとライフサイクル管理を自動化する Kubernetes Operator を使用して、スタック自動化のフル機能を提供します。
Red Hat OpenShift Data Foundation
Red Hat OpenShift Data Foundation は、Kubernetes の Rook ストレージオペレーターを使用して動的にプロビジョニングされたストレージを提供します。
コンテナネイティブ仮想化
Red Hat OpenShift のコンテナネイティブ仮想化により、Kubernetes で VM を使用できます。これは、KubeVirt として知られるオープンソース・コミュニティのアップストリーム・プロジェクトに基づいています。
Metal3
Metal3 は、Kubernetes を使用してベアメタルサーバーのデプロイとライフサイクル管理を完全に自動化するアップストリーム・プロジェクトです。
なぜ Kubernetes なのか?
Kubernetes は、コンテナ化されたレガシーアプリケーションやクラウドネイティブ・アプリケーション、およびマイクロサービスにリファクタリングされたアプリケーションの提供と管理を支援します。
変化するビジネスニーズに対応するためには、開発チームが新しいアプリケーションとサービスを迅速に構築できることが必要です。クラウドネイティブ開発は、コンテナ内のマイクロサービスから始まります。これにより、開発が迅速になり、既存のアプリケーションの転換と最適化が容易になります。
エンタープライズ向け Kubernetes にデータプラットフォームを確立するために役立つ専門家の視点を学ぶことにより、アプリケーションの構築、実行、デプロイ、モダナイズが容易になります。詳しくは、この Web セミナーシリーズをご覧ください。
本番アプリケーションは複数のコンテナにまたがっており、これらのコンテナは複数のサーバーホストにデプロイされる必要があります。Kubernetes を活用すれば、これらのワークロード用にコンテナを大規模にデプロイするうえで必要なオーケストレーションと管理機能を手に入れることができます。
Kubernetes オーケストレーションによって、複数のコンテナにまたがるアプリケーションサービスを構築し、それらのコンテナをクラスタにスケジュールして、コンテナのスケーリングを行い、コンテナの正常性を継続的に管理できるようになります。Kubernetes を使用すると、IT セキュリティの改善に向けて効果的な措置を講じることができます。
Kubernetes で総合的なコンテナ・インフラストラクチャを提供するには、ネットワーク、ストレージ、セキュリティ、テレメトリーなど他のサービスと統合する必要もあります。
これをプロダクション環境と複数のアプリケーションに拡張した場合、複数の共同の場所に設置されたコンテナは、個々のサービスを提供するために連携して動作する必要があります。
Linux コンテナは、マイクロサービスベースのアプリにとって、理想的なアプリケーションデプロイ単位であり、自己完結型の実行環境です。また、コンテナ内でマイクロサービスを使用すると、ストレージ、ネットワーク、セキュリティなどのサービスのオーケストレーションが容易になります。
そのため環境内のコンテナの数がかなり増加し、コンテナが蓄積されるにつれて、複雑さも増していきます。
Kubernetes はいくつかのコンテナを「Pod」(小群) にまとめることで、コンテナの急激な増加に伴って発生する問題の多くを解決します。Pod はグループ化されたコンテナに抽象的なレイヤーを追加します。これはワークロードをスケジューリングしたり、必要なサービス (ネットワークやストレージ) をそれらのコンテナに提供したりする際に役立ちます。
さらに Kubernetes は、これらの Pod 間でロードバランスを保ち、ワークロードを処理するのに適切な数のコンテナを確実に維持するようサポートします。
Kubernetes を正しく実装し、他のオープンソース・プロジェクト (Open vSwitch、OAuth、SELinux など) を活用することで、コンテナ・インフラストラクチャのすべての部分をオーケストレーションすることができます。
お客様事例:クラウド・プラットフォームを構築して革新的なバンキングサービスを提供
アラブ首長国連邦 (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 手法を取り入れた開発により、アプリケーションの提供と更新のサイクルも短縮されました。
[[{"fid":"763681","view_mode":"wysiwyg","fields":{"format":"wysiwyg"},"type":"media","field_deltas":{"8":{"format":"wysiwyg"}},"attributes":{"class":"media-element file-wysiwyg","data-delta":"8"}}]]Emraties NBD、クラウド・プラットフォームを構築して革新的なバンキングサービスを提供
Kubernetes で DevOps を推進
先進的アプリケーションを開発するには、これまでのアプローチとは異なるプロセスが必要になります。DevOps はアイデアを開発からデプロイまで迅速に進めます。
その中核として、DevOps は日常的な運用タスクを自動化し、アプリケーションのライフサイクルの環境を標準化します。コンテナは、開発、デリバリー、自動化のための統合環境をサポートし、開発、テスト、本番の各環境間でのアプリケーションの移動を容易にします。
DevOps 実装による主な成果は、継続的インテグレーションと継続的デプロイパイプライン (CI/CD) です。CI/CD によって、アプリケーションの顧客への提供頻度を増し、手作業を最小化しながらソフトウェア品質を検証できるようになります。
DevOps アプローチとともに Kubernetes を使用してコンテナのライフサイクルを管理すると、CI/CD パイプラインをサポートするためのソフトウェア開発と IT 運用を連携できます。
コンテナの内外に適切なプラットフォームを導入することで、DevOps カルチャーやプロセスの変化を最大限に活用できます。
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 を活用することで、開発者はコンテナ化された新しいアプリを作り、ホストし、クラウドでデプロイできるようになります。さらに、スケーラビリティ、制御性、オーケストレーションを提供することで、優れたアイデアを迅速かつ簡単にビジネスへつなげるための助けとなります。
無料の 60 日間トライアルで Red Hat OpenShift を使用し、コンテナ運用の自動化を試してみることができます。