San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
閉じる
プライバシー設定
ウェブサイト運営に必要なCookieや類似技術を使用しています。追加のCookieは貴社の同意がある場合のみ利用されます。同意は「Agree」をクリックすることでいただけます。どのデータが収集され、どのようにパートナーと共有されているかの詳細は、Cookieポリシープライバシーポリシーをご確認ください。
Cookieは、貴社デバイスの特性や、IPアドレス、閲覧履歴、位置情報、固有識別子などの特定の個人情報を取得、解析、保存するために使用されます。これらのデータは様々な目的で利用されます。分析Cookieによりパフォーマンスを評価し、オンライン体験やキャンペーンの効果向上に役立てます。パーソナライズCookieは、利用状況に応じた情報やサポートを通じ、貴社専用の体験を提供します。広告Cookieは、第三者が貴社のデータをもとにオーディエンスリストを作成し、ソーシャルメディアやネット上でのターゲット広告に使用します。貴社は各ページ下部のリンクから、いつでも同意の許可、拒否、または撤回が可能です。
ご送信ありがとうございます。内容を受け付けました。
申し訳ありません。フォーム送信時にエラーが発生しました。
/
/
DevSecOps

Kubernetesとは? コンテナ、オーケストレーション、プラットフォーム

Kubernetesとは?

Kubernetesは、コンテナ化されたサービスやアプリの管理を行う、柔軟で拡張可能なオープンソース基盤です。豊富で急成長中のエコシステムの中で、Kubernetes関連サービスやサポート、ツールが提供されています。

Kubernetesとは? コンテナ、オーケストレーション、プラットフォーム

「Kubernetes」という名称は、ギリシャ語で「操舵手」や「操縦士」を意味します。短縮形の「K8s」は、Kとsの間にある8文字に由来します。Googleは2014年にKubernetesプロジェクトを公開し、15年以上にわたる大規模運用の経験と現場のベストプラクティスを融合させています。

What is Kubernetes

コンテナとは

コンテナは、1台のサーバー上で複数のアプリやOS環境を分離して動作させるための技術です。従来の仮想マシンよりも軽量な仮想化手法で、ホストOSのリソースを共有しながら、メモリ消費が少なく、効率的に利用でき、起動時間も大幅に短縮されます。

コンテナは、次のような利点があるため注目されています:

  • アプリの作成とデプロイの一元管理:仮想マシンのイメージ利用と比べ、コンテナイメージの作成が容易です。
  • 一貫したビルド、統合、運用:イメージが変わらないため、信頼性の高い継続的なビルドやデプロイ、迅速なロールバックが可能です。
  • 開発と運用の分離:デプロイ時ではなくビルド時にイメージを作ることで、アプリと基盤が独立します。
  • モニタリング:OSレベルだけでなく、アプリの健康状態やその他の指標も確認できます。
  • 環境の一貫性:ローカルPCとクラウドで同じ環境を再現できます。
  • クラウドやOSの柔軟な分散配置:Ubuntu、RHEL、CoreOS、オンプレミス、大規模パブリッククラウドなど、様々な環境で動作します。
  • アプリ主導の管理:仮想マシン上でOSを動かすのではなく、インテリジェントなリソースを使い、アプリ単位で管理できます。
  • 疎結合で分散・柔軟なマイクロサービス:アプリが小さく独立した部品に分割され、個別にデプロイ・管理されます。
  • リソースの分離:アプリの動作が予測しやすくなります。
  • 資源利用:高い効率と集約性を実現します。
kubernetes container

Kubernetesの仕組み

稼働中のKubernetes環境はクラスタと呼ばれ、クラスタはコントロールプレーンとワーカーノードの2つの部分から成ります。

各ノードはLinux®環境で動作する物理マシンまたは仮想マシンで、Podと呼ばれる単位でコンテナを実行します。

コントロールプレーンは、クラスタの正常な状態、すなわちどのアプリが動いているか、どのイメージを利用しているかを管理し、ワーカーノードは実際にアプリやサービスを動作させます。

KubernetesはRed Hat® Enterprise Linux®などのOS上で動作し、各ノード上で動くPodと連携します。

コントロールプレーンは管理者やDevOpsチームからの命令を受け取り、ワーカーノードに伝達します。

このやり取りにより、多くのサービスが最適なノードを選定し、そのノードにリソースを割り当ててPodを配置します。

クラスタの望ましい状態には、どのアプリやサービスを動かすか、どのイメージを使うか、どのリソースを利用可能にするかなどが含まれます。

OSレベルの管理においては、ノード全体をまとめて制御するため、個々のコンテナやノードを細かく扱う必要がありません。

管理者は、Kubernetesの設計やノード、Pod、コンテナの仕様を定義し、あとはKubernetesが配置を自動で行います。

Kubernetesの導入場所は貴社の選択次第で、物理サーバー、仮想マシン、パブリッククラウド、プライベートクラウド、ハイブリッド環境など、様々な環境で利用できます。その柔軟性が大きな利点です。

kubernetes work

Kubernetesの基本用語

  • クラスタ

Kubernetesが管理する、コンテナ化されたアプリを実行するノードの集合です。

  • Pod

1つ以上のコンテナが集まり、リソースやネットワーク設定を共有する単位です。Pod内のコンテナは同一環境でスケジュールされ、協調して動作します。Podは特定のアプリ向けの仮想ホストとして、密接に結合されたコンテナを含みます。オンプレミス環境では、同一マシン上で動作するアプリはクラウド上のものと区別されません。

  • マスターノード(コントロールプレーン)

管理用インターフェースを提供し、コンテナのライフサイクル全体(定義、デプロイ、管理)を担当します。

  • ワーカーノード

アプリ(コンテナ)を実行するノードで、通常、クラスタには複数のワーカーノードが含まれます。

  • APIサーバ

Kubernetes APIを公開するコントロールプレーンの主要コンポーネントで、クラスタ内の各要素間の通信を可能にします。

  • Controller

クラスタの状態を監視し、理想の状態に近づけるための調整を行うプロセスです。

  • コンテナランタイム

コンテナの実行を担当するソフトウェアで、KubernetesはDocker、containerd、CRI-O、その他CRI準拠のランタイムをサポートします。

  • Kubelet

各ノードで動作し、Pod内のコンテナが正しく実行されているか確認するエージェントです。Kubeletは他コンポーネントから与えられたPodSpecに基づき、コンテナの状態を管理します。

  • Kubectl

Kubernetesのコマンドラインツールで、クラスタへの命令実行、アプリのデプロイ、リソース管理、ログ確認が可能です。

  • Kube-proxy

各ノードで動作するネットワークプロキシで、KubernetesのServiceモデルの一部としてネットワークルールを管理し、クラスタ内外からPodへの通信を実現します。利用可能な場合はOSのパケットフィルタリングを活用し、なければトラフィックをそのまま転送します。

  • CNI

Container Network Interfaceは、ネットワークプロバイダーとKubernetesの接続を定義する仕様とツールセットです。

  • CSI

Container Storage Interfaceは、ストレージデバイスやサービスがKubernetesクラスタに統合するための仕様です。

なぜKubernetesが必要か、そして何ができるのか

コンテナはアプリをまとめて動作させる優れた手法です。運用環境では、コンテナがアプリを実行し、障害発生時には別のコンテナが起動して連続性を保つ必要があります。こうした処理を基盤が自動で行えば、管理が大いに楽になります。

Kubernetesはその解決策を提供します。分散システムの柔軟な運用を実現し、スケーリングやフェイルオーバー、各種デプロイパターンをサポートします。例えば、カナリアデプロイも容易に実施可能です。

Kubernetesは以下を提供します:

  1. 運用の見える化と負荷調整:

DNS名やIPアドレスでノードを特定し、トラフィックが増加した際にはオートスケーリングで負荷を分散して安定した配信を実現します。

  1. リソースの調整:

オンプレミス、パブリッククラウドなど各種リソース構成が容易に導入できます。

  1. 自動化されたロールアウトとロールバック:

デプロイしたコンテナの理想状態を定義すれば、現状を自動で理想状態に合わせることができます。例えば、新しいコンテナの自動作成や既存コンテナの停止、リソースの移行も行えます。

  1. 計画されたコンテナ配置:

実行ノード群を提供し、各コンテナのCPUやメモリの必要量を指定すると、最適なノードに自動で配置されます。

  1. 自己修復:

障害が発生したコンテナは再起動され、健康チェックに失敗したものは停止、正常になるまで外部に公開されません。

  1. 機密情報の管理:

パスワード、OAuthトークン、SSHキーなどの重要情報を安全に管理し、アプリ設定の変更時にイメージを再構築する必要がありません。

Kubernetesアーキテクチャ

以下はKubernetesアーキテクチャの主要なコンポーネントです:

  • ノードとクラスタ(図)

Kubernetesの基盤はクラスタで構成され、クラスタを形成する各ノードは物理マシンまたは仮想マシン単位です。

マスターノードがクラスタの司令塔となり、複数のワーカーノードが各クラスタでコンテナ化されたアプリを実行・管理します。マスターノードが管理するスケジューラーが、定められたデプロイ要件と利用可能なリソースに基づいてコンテナ配置を自動化します。各ワーカーノードには、Dockerなどのコンテナランタイムと、マスターからの命令を受けるKubeletが搭載されています。

kubectlというコマンドラインツールを利用して、直接Kubernetes APIにアクセスし、クラスタ管理を行います。

  • デプロイとレプリカ(概念)

同じリソースを共有するコンテナ群(Pod)で構成され、Pod内のコンテナに負荷がかかる場合、クラスタ内の他のノードにレプリカが自動的に追加されます。そのため、Podは小規模で必要最小限に保つのが望ましいです。

コンテナ化されたアプリは、デプロイにより作成・維持管理され、必要なPodのレプリカ数が決定されます。障害が発生すると、新たなPodが自動的に生成されます。

Kubernetesによるコンテナオーケストレーション

Kubernetesは、アプリのマイクロサービスを複数のノードに分散配置し、スケーリングや管理を容易にします。これにより、ITセキュリティの向上にも寄与します。

また、監視、ストレージ、セキュリティ、テレメトリなどの各種サービスと統合でき、包括的なコンテナ基盤を構築します。運用環境や各アプリ毎に、個々のコンテナが連携してサービスを提供します。

Linuxコンテナは、マイクロサービスベースのアプリに最適なデプロイ単位と独立した実行環境を提供し、スケーリングや運用、セキュリティ管理を容易にします。しかし、コンテナ数が増えると運用の複雑性も増すため、KubernetesはPodという単位でまとめ、自動的に管理します。

各コンポーネントが負荷分散を行い、必要なコンテナ数を維持する仕組みを提供し、Open vSwitch、OAuth、SELinuxなどのオープンソースツールと連携してコンテナ基盤全体を管理できます。

architecture works

Kubernetesと開発

ローカルやエッジで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 infrastructure

Kubernetesではないもの

Kubernetesは、従来の総合PaaS (Platform as a Service) とは異なります。コンテナレベルで動作するため、デプロイ、スケーリング、ロードバランシング、ログ管理、監視、アラート設定といったPaaSの機能を提供しますが、これらはオプションでプラグイン可能です。Kubernetesは開発用の基盤を提供し、貴社の選択と柔軟性を尊重します。

Kubernetesの特徴:

  • サポートするアプリの種類に制限がなく、ステートレス、ステートフル、データ処理など様々なワークロードに対応。基本的に、コンテナで動作するアプリはKubernetes上で実行可能です。
  • ソースコードの転送やアプリの構築は行わず、CI/CDのワークフローは組織の方針に依存します。
  • ミドルウェア(例:メッセージバス)、データ処理フレームワーク(例:Spark)、データベース(例:MySQL)、キャッシュ、クラスタストレージシステム(例:Ceph)などのアプリレベルのサービスは提供せず、これらはKubernetes上で個別に動作させます。
  • ログ収集、監視、アラートの仕組み自体は提供せず、これらのための統合手段を用意しています。
  • 専用の宣言型言語やフレームワーク(例:Jsonnet)は提供せず、柔軟に扱えるAPIを提供します。
  • 完全なオーケストレーション、スケジューリング、自己修復などのフレームワーク自体を提供するわけではありません。
  • 従来の手順通りのタスク実行ではなく、自由に組み合わせ可能な制御手段で現状を理想状態に導くため、管理方法に制約がありません。これにより、操作が容易でパワフル、かつ拡張性の高い環境が実現されます。

Kubernetesの利点

多くの重要なメリットを提供するため、Kubernetesは広く利用されています。

  • 移植性:仮想環境から物理サーバーまで、コンテナは様々な環境で動作し、Kubernetesはオープンなクラウド全体でサポートされています。
  • 拡張性と統合:既存のログ、監視、アラートなどのシステムと連携でき、充実したエコシステムが形成されています。
  • 効率性:リソース利用の最適化、オートスケール、自動化により、ITコストを最適に管理できます。
  • 柔軟性:クラウド向けに設計されたアプリは、自動スケーリングにより需要に合わせて拡大できます。
  • APIベースREST APIを基盤とし、プログラミングによる各種操作が可能です。
  • 統合されたCI/CD:DevOpsのCI/CDパイプラインにより、デプロイ、テスト、リリースが自動化されます。

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の採用をさらに促進するでしょう。

FAQ

参考資料

最新情報を購読

更新日:
February 25, 2025
学習目標
最新情報を購読
購読
関連トピック