Kubernetesとは?
Kubernetesは、コンテナ化されたサービスやアプリの管理を行う、柔軟で拡張可能なオープンソース基盤です。豊富で急成長中のエコシステムの中で、Kubernetes関連サービスやサポート、ツールが提供されています。
「Kubernetes」という名称は、ギリシャ語で「操舵手」や「操縦士」を意味します。短縮形の「K8s」は、Kとsの間にある8文字に由来します。Googleは2014年にKubernetesプロジェクトを公開し、15年以上にわたる大規模運用の経験と現場のベストプラクティスを融合させています。
コンテナは、1台のサーバー上で複数のアプリやOS環境を分離して動作させるための技術です。従来の仮想マシンよりも軽量な仮想化手法で、ホストOSのリソースを共有しながら、メモリ消費が少なく、効率的に利用でき、起動時間も大幅に短縮されます。
コンテナは、次のような利点があるため注目されています:
稼働中のKubernetes環境はクラスタと呼ばれ、クラスタはコントロールプレーンとワーカーノードの2つの部分から成ります。
各ノードはLinux®環境で動作する物理マシンまたは仮想マシンで、Podと呼ばれる単位でコンテナを実行します。
コントロールプレーンは、クラスタの正常な状態、すなわちどのアプリが動いているか、どのイメージを利用しているかを管理し、ワーカーノードは実際にアプリやサービスを動作させます。
KubernetesはRed Hat® Enterprise Linux®などのOS上で動作し、各ノード上で動くPodと連携します。
コントロールプレーンは管理者やDevOpsチームからの命令を受け取り、ワーカーノードに伝達します。
このやり取りにより、多くのサービスが最適なノードを選定し、そのノードにリソースを割り当ててPodを配置します。
クラスタの望ましい状態には、どのアプリやサービスを動かすか、どのイメージを使うか、どのリソースを利用可能にするかなどが含まれます。
OSレベルの管理においては、ノード全体をまとめて制御するため、個々のコンテナやノードを細かく扱う必要がありません。
管理者は、Kubernetesの設計やノード、Pod、コンテナの仕様を定義し、あとはKubernetesが配置を自動で行います。
Kubernetesの導入場所は貴社の選択次第で、物理サーバー、仮想マシン、パブリッククラウド、プライベートクラウド、ハイブリッド環境など、様々な環境で利用できます。その柔軟性が大きな利点です。
Kubernetesが管理する、コンテナ化されたアプリを実行するノードの集合です。
1つ以上のコンテナが集まり、リソースやネットワーク設定を共有する単位です。Pod内のコンテナは同一環境でスケジュールされ、協調して動作します。Podは特定のアプリ向けの仮想ホストとして、密接に結合されたコンテナを含みます。オンプレミス環境では、同一マシン上で動作するアプリはクラウド上のものと区別されません。
管理用インターフェースを提供し、コンテナのライフサイクル全体(定義、デプロイ、管理)を担当します。
アプリ(コンテナ)を実行するノードで、通常、クラスタには複数のワーカーノードが含まれます。
Kubernetes APIを公開するコントロールプレーンの主要コンポーネントで、クラスタ内の各要素間の通信を可能にします。
クラスタの状態を監視し、理想の状態に近づけるための調整を行うプロセスです。
コンテナの実行を担当するソフトウェアで、KubernetesはDocker、containerd、CRI-O、その他CRI準拠のランタイムをサポートします。
各ノードで動作し、Pod内のコンテナが正しく実行されているか確認するエージェントです。Kubeletは他コンポーネントから与えられたPodSpecに基づき、コンテナの状態を管理します。
Kubernetesのコマンドラインツールで、クラスタへの命令実行、アプリのデプロイ、リソース管理、ログ確認が可能です。
各ノードで動作するネットワークプロキシで、KubernetesのServiceモデルの一部としてネットワークルールを管理し、クラスタ内外からPodへの通信を実現します。利用可能な場合はOSのパケットフィルタリングを活用し、なければトラフィックをそのまま転送します。
Container Network Interfaceは、ネットワークプロバイダーとKubernetesの接続を定義する仕様とツールセットです。
Container Storage Interfaceは、ストレージデバイスやサービスがKubernetesクラスタに統合するための仕様です。
コンテナはアプリをまとめて動作させる優れた手法です。運用環境では、コンテナがアプリを実行し、障害発生時には別のコンテナが起動して連続性を保つ必要があります。こうした処理を基盤が自動で行えば、管理が大いに楽になります。
Kubernetesはその解決策を提供します。分散システムの柔軟な運用を実現し、スケーリングやフェイルオーバー、各種デプロイパターンをサポートします。例えば、カナリアデプロイも容易に実施可能です。
Kubernetesは以下を提供します:
DNS名やIPアドレスでノードを特定し、トラフィックが増加した際にはオートスケーリングで負荷を分散して安定した配信を実現します。
オンプレミス、パブリッククラウドなど各種リソース構成が容易に導入できます。
デプロイしたコンテナの理想状態を定義すれば、現状を自動で理想状態に合わせることができます。例えば、新しいコンテナの自動作成や既存コンテナの停止、リソースの移行も行えます。
実行ノード群を提供し、各コンテナのCPUやメモリの必要量を指定すると、最適なノードに自動で配置されます。
障害が発生したコンテナは再起動され、健康チェックに失敗したものは停止、正常になるまで外部に公開されません。
パスワード、OAuthトークン、SSHキーなどの重要情報を安全に管理し、アプリ設定の変更時にイメージを再構築する必要がありません。
以下はKubernetesアーキテクチャの主要なコンポーネントです:
Kubernetesの基盤はクラスタで構成され、クラスタを形成する各ノードは物理マシンまたは仮想マシン単位です。
マスターノードがクラスタの司令塔となり、複数のワーカーノードが各クラスタでコンテナ化されたアプリを実行・管理します。マスターノードが管理するスケジューラーが、定められたデプロイ要件と利用可能なリソースに基づいてコンテナ配置を自動化します。各ワーカーノードには、Dockerなどのコンテナランタイムと、マスターからの命令を受けるKubeletが搭載されています。
kubectlというコマンドラインツールを利用して、直接Kubernetes APIにアクセスし、クラスタ管理を行います。
同じリソースを共有するコンテナ群(Pod)で構成され、Pod内のコンテナに負荷がかかる場合、クラスタ内の他のノードにレプリカが自動的に追加されます。そのため、Podは小規模で必要最小限に保つのが望ましいです。
コンテナ化されたアプリは、デプロイにより作成・維持管理され、必要なPodのレプリカ数が決定されます。障害が発生すると、新たなPodが自動的に生成されます。
Kubernetesは、アプリのマイクロサービスを複数のノードに分散配置し、スケーリングや管理を容易にします。これにより、ITセキュリティの向上にも寄与します。
また、監視、ストレージ、セキュリティ、テレメトリなどの各種サービスと統合でき、包括的なコンテナ基盤を構築します。運用環境や各アプリ毎に、個々のコンテナが連携してサービスを提供します。
Linuxコンテナは、マイクロサービスベースのアプリに最適なデプロイ単位と独立した実行環境を提供し、スケーリングや運用、セキュリティ管理を容易にします。しかし、コンテナ数が増えると運用の複雑性も増すため、KubernetesはPodという単位でまとめ、自動的に管理します。
各コンポーネントが負荷分散を行い、必要なコンテナ数を維持する仕組みを提供し、Open vSwitch、OAuth、SELinuxなどのオープンソースツールと連携してコンテナ基盤全体を管理できます。
ローカルやエッジでKubernetesを動かす
MicroK8sは、製品品質のCNCF認定を受けた軽量なKubernetesで、単一ノードクラスタをシングルコマンドで展開できます。Snapに対応した環境(20以上のLinuxディストリビューション、Windows、macOSなど)でローカルにKubernetesの全機能を動作させます。
MicroK8sは、最もシンプルなKubernetesディストリビューションで、分散デプロイやクラウドとローカル環境の壁を取り払い、クラスター、ワークステーション、CI/CDパイプライン、IoTデバイス、小規模エッジクラウドに最適です。
好みのOSでKubernetesを動かす
CanonicalのCharmed Kubernetesを用いて、純粋なアップストリームのマルチノードKubernetesクラスタを展開できます。ロギング、監視、アラートなどの管理機能とアプリのライフサイクル自動化機能を備え、完全自動化・モデル駆動型の運用を実現します。
幅広いOS環境、物理サーバー、プライベートクラウド、パブリッククラウドで実績があり、Canonicalはスタックを構成する各種コンポーネントとの統合をサポートしています。
Kubernetesクラスタのプロフェッショナル管理を利用する
自社でKubernetesクラスタの専門家を揃える手間を省き、安心して事業に注力するために、Wallarmの実績あるKubernetes導入・運用支援をご活用いただけます。
一部のサービスでは、デプロイ、修正、スケーリング、監視、アップデートなどの煩雑な作業を完全代行する管理サービスを提供しています。既存クラスタの運用管理や、クラスタの構築から運用までの一括支援も可能です。
Kubernetesは、従来の総合PaaS (Platform as a Service) とは異なります。コンテナレベルで動作するため、デプロイ、スケーリング、ロードバランシング、ログ管理、監視、アラート設定といったPaaSの機能を提供しますが、これらはオプションでプラグイン可能です。Kubernetesは開発用の基盤を提供し、貴社の選択と柔軟性を尊重します。
Kubernetesの特徴:
多くの重要なメリットを提供するため、Kubernetesは広く利用されています。
革新的な金融サービスを提供するクラウドプラットフォームの構築
UAE最大手の銀行Emirates NBDは、デジタルトランスフォーメーションのために柔軟で堅牢な体制が必要でした。オンプレミス環境と複雑なIT基盤に苦戦し、ワーカーノードの構築に2ヶ月、巨大なモノリシックアプリの変更には半年以上を要していました。
Red Hat OpenShift Container Platformを用いたコンテナ管理、オーケストレーション、各種サービスにより、中東初の大規模運用可能なプライベートクラウド『Sahab』を構築。Sahabは、プロビジョニングから運用まで、アズ・ア・サービスモデルでアプリ、システム、その他のリソースを提供します。
さらに、APIやマイクロサービスを活用して内部チームやパートナーとの連携を強化し、アジャイルおよびDevOpsの開発手法を取り入れることで、アプリのデプロイやアップデートサイクルを短縮しました。
CI/CDによる開発ライフサイクル
Kubernetesは継続的インテグレーション/継続的デプロイ(CI/CD)にも大きな効果を発揮します。詳細はこちらのブログ記事をご覧ください。アプリをPodにデプロイ後、動作監視、ユーザーフィードバックの収集、新機能の開発といったプロセスを効率化し、テスト、継続的デリバリー、最新バージョンのデプロイが容易になります。
AIとKubernetes
AI技術は自動運転、画像認識、機械翻訳、音声認識、囲碁やポーカーといった分野で成果を上げ、人間を凌駕する場面もあります。さらに、がん検出や医薬品開発の分野でも革新をもたらす可能性があります。Google、Microsoft、Amazonといった大手企業は既にAIを活用しており、他社も積極的に取り組んでいます。
しかし、実用的なAIモデルを構築し、運用環境にデプロイするのは複雑かつ骨の折れる作業です。例えば、画像が猫か犬かを確実に識別するアプリを作るには、「猫」「犬」とラベル付けされた大量の画像データを用意し、未学習のAIモデルを訓練する必要があります。学習後はそのモデルをアプリに組み込み、一般公開します。
このように、AIモデルを実際のアプリに組み込むのは大変なプロセスです。多くの企業は、このプロセスを効率化するためのツールセットを導入し、データサイエンティストやMLエンジニアの作業負荷を軽減しようとしています。結果、必要な作業が大幅に削減され、市場投入までの時間が短縮されます。すべてのMLモデルのデプロイはKubernetesクラスタ内で実行でき、データのクリーニングとコード作成だけで済むため、残りはKubernetes主導のツールセットが処理します。GoogleのKubeflowやCodiLimeの派生プロジェクトNeptuneなどがその例です。AI主導のアプリに対する需要の高まりは、Kubernetesの採用をさらに促進するでしょう。
最新情報を購読