Kubernetesとは?基本概念をわかりやすく解説!使い方やメリットもご紹介
Kubernetesという言葉を聞いたことがあっても、「内容がよく分からない」または「もっと詳しく知ってシステム開発に活かしたい」と考えている方もいらっしゃるでしょう。最近ではコンテナ技術の重要性が高まり、システム開発においてKubernetesを導入する企業も増えています。
この記事では、そんなKubernetesの基本概念やメリット、注意点について詳しく解説します。
Kubernetes とは?
Kubernetes(クバネティス、略記「K8s」)とは、一言でいえば、コンテナオーケストレーションツールです。コンテナオーケストレーションとは、コンテナを運用・管理すること、またはその環境のことを意味しますが、Kubernetesはその一つということになります。
もともとKubernetesは、Googleがアプリケーションデプロイに利用していた「Borg」というクラスタマネージャーをOSS化したものですが、現在では、Cloud Native Computing Foundation(通称「CNCF」)という団体が管理しており、事実上のデファクトスタンダードとなっています。
ただし実際には、Kubernetes単体で使われることはあまりなく、クラウド事業者やベンダーがユーザーのニーズに応じてKubernetes と連携するのに最適なツール、サービスと組み合わせて提供します。そのようにして提供されるサービスをKaaS(Kubernetes as a Service)と言います。
従来のアプリケーション開発では、複数のホストにまたがっているコンテナを手動で管理しなければならず、そのせいでアプリケーションの更新や障害時に膨大な人的・時間的コストが必要なことが課題でしたが、Kubernetesでは、デプロイからスケーリング、ネットワーク管理など、複数のホストにまたがるコンテナを一括して自動管理することができるため、システム開発・管理が大幅に効率化できるとされているのです。
具体的には、ロールアウトやロールバックの自動化、サービスディスカバリーと負荷分散、自動スケーリング、自己修復機能など多岐にわたる機能があり、これにより、アプリケーションの更新や障害によるシステムダウンタイムを減少させることが可能です。
以下では、このような機能を可能にするKubernetesの仕組みについて、基本的な概念から解説します。
コンテナとは
Kubernetesの仕組みに入る前に、まずは前提として、アプリケーション開発における」「コンテナ(コンテナ化)」という技術について簡単に説明します。
コンテナとは、アプリケージョンの実行環境を仮想的に構築する仮想化技術の一種ですが、アプリケーションとその実行に必要なコンポーネントのみをパッケージ化することで、OSに依存しない軽量でポータブルな実行環境を実現する技術です。
仮想マシン(VM)とは異なり、ハードウェアレベルではなくサーバー上のOSを仮想化します。アプリケーションはコンテナごとに管理されるため、リソース消費が少なく起動が速いなどの利点があります。
もっとも、コンテナは通常、可用性の観点から、複数のホストにまたがって運用されることが多いため、ホストが異なるコンテナ間での通信設定や管理の複雑性など、運用上の課題が指摘されてきました。
そこで、上記のような課題を解決して、複数のホストにまたがるコンテナ群を一括で管理してくれるのがKubernetesです。以下では、Kubernetesの仕組みについて解説します。
Kubernetesの仕組み
まず、Kubernetesは、大きく分けてコントロールプレーン(マスターノード)とノード(ワーカーノード)という2つのコンポーネントから構成されており、これらを合わせてクラスターと呼んでいます。
マスターノードは、クラスター全体の状況を監視する機能を担っており、開発者が宣言したマニフェストファイルと現在の構成に相違がないかをチェックし、構成が異なる場合には、各ワーカーノードに対して、マニフェストファイルどおりにPodを配置するように指示します。
一方、ワーカーノードは、Podを管理する機能を担っており、マスターノードの指示に従いPodを配置します。ここで重要なのが、Kubernetesリソースにおける最小単位はPodであり、Podに包含されるコンテナ自体をKubernetesで構築することはできないということです。実際にコンテナを構築するのは、コンテナランタイム(コンテナエンジン)と呼ばれる別のコンポーネントの機能です。
DockerとKubernetesの違い
Kubernetesとよく混同されることが多いのが「Docker」ですが、前述したコンテナランタイムの最も代表的なものがDockerです。
Dockerは、Docker社が開発した、コンテナの構築・実行等を行うためのOSSなので、コンテナの管理を目的とするKubernetesとは、その役割や実行場所が異なるため、注意しましょう。
Kubernetes | Docker | |
役割・目的 | コンテナの管理 | コンテナの構築・実行 |
実行場所 | クラスター | ワーカーノード |
Dockerとは?導入メリットと従来の仮想化との違い、運用ポイント、Kubernetesとの関係についても初心者にも分かりやすく解説
Kubernetesの機能
前述したコンテナ運用上の課題を解決するために、Kubernetesでは主に次のような機能が提供されています。
サービスディスカバリーと負荷分散の機能
Kubernetesは「Service」というリソースを用いて、クラスター内外からPodにアクセスするためのネットワークを提供するとともに負荷分散を行っています。Serviceは、Podに対してFQDNまたは独自のIPアドレスを付与することで外部ネットワークからのアクセスを可能にし、トラフィックが多い場合には負荷が少ないPodにアクセスを誘導するため、これにより、サービス提供が安定します。
ストレージ オーケストレーションの機能
Kubernetesでは、「PersistentVolume(PV)」と「PersistentVolumeClaim(PVC)」というリソースを用いてアプリケーションに必要なストレージを管理しています。PVとPVCは、ローカルストレージやパブリッククラウドプロバイダーなどユーザーが選択したストレージシステムを自動でマウントすることを可能にし、これにより、開発者のストレージ管理の負担を軽減し、アプリケーションのポータビリティとスケーラビリティが向上します。
自己修復機能
Kubernetesは、「ReplicaSet」というリソースを使用することで、Podのレプリカを作成し、NodeやPodに障害が発生した場合でもマニフェストファイルで定義されたPodの配置を常に保つための自己修復機能を提供しています。これにより、システムの安定性と可用性を高めることができます。
自動化されたロールアウトとロールバック機能
そして、前述のReplicaSetの作成や履歴管理を行うのが「Deployment」というリソースです。これにより、新しいバージョンのアプリケーションを段階的にロールアウトしたり、問題が発生した場合には自動的に以前のバージョンにロールバックしたりすることができ、ダウンタイムを最小化することができます。
セキュリティ機能
Kubernetesは複数のセキュリティ機能を提供しており、特に「Secret」リソースを使用してパスワードやOAuthトークン、SSHキーなどの機密データを安全に保管しています。Secretは、機密データをPodから独立して管理できる機能であり、これにより、Pod内で使用するファイルに機密情報を直接記述する(いわゆるハードコーディング)を避けることができます。なお、デフォルトでは、機密データは暗号化されずにetcdに保存されるため、暗号化して保存する場合には、設定変更が必要な点には注意が必要です。
Kubernetesを利用するメリット
コンテナを多数管理できる
Kubernetesは、大量のコンテナを一括で効率的に管理する能力を持っています。これにより、システムのスケーラビリティが大幅に向上し、数千から数万に及ぶコンテナの運用が可能になります。管理は自動化されているため、手動での介入が少なく、大規模なシステムでも容易にコンテナを制御できます。
起動が高速、軽量になる
Kubernetesによるコンテナ管理は、仮想マシンベースのアプローチに比べて高速で軽量です。コンテナはOSを共有するため、起動が迅速で、リソース消費も少なくなります。これにより、アプリケーションのスピードとパフォーマンスが向上し、リソースの有効活用が可能となります。
デプロイが自動でできる
Kubernetesはアプリケーションのデプロイメントを自動化してくれるので、継続的なインテグレーションと継続的デリバリー(CI/CD)パイプラインの自動化を実現し、これによりチーム全体の生産性向上が期待できます。
可用性を担保できる
Kubernetesは常にPodの状態を監視し、障害が発生した場合には自動で修復や再配置を行います。これにより、システムのダウンタイムを最小限に抑え、常にアプリケーションが利用可能な状態を維持できます。
複数の環境で利用できる
Kubernetesはオンプレミス、パブリッククラウド、プライベートクラウドなど、様々な環境で一貫した運用が可能です。これにより、アプリケーションのポータビリティが高まり、柔軟なデプロイメント戦略が可能となります。
DevOps、マイクロサービスとの親和性が高い
DevOpsとは、アプリケーションの開発担当と運用担当が連携して協力し開発を進める手法です。Kubernetesにはアプリケーションの開発と運用に必要とされる機能が多数搭載されているため、DevOpsとの親和性が非常に高いという特徴があります。
またKubernetesは、安全かつスピーディーなアプリケーション開発のアプローチである「マイクロサービス」に欠かせないツールとなっています。
Kubernetesを利用するうえでの注意点
ただし、Kubernetesには以下のようなデメリットもあります。
初期投資が必要
Kubernetesは、管理マシンおよび実行マシンとしての物理サーバーまたはクラウドサーバーが必要となります。そのため、現システムの構成や環境によっては新規でサーバーを用意しなくてはならず、初期投資のコストがかかる場合もあるでしょう。
継続的に学習し続ける必要がある
Kubernetesは定期的にアップデートされ、機能が追加されたり改善されたりと便利になる反面、学ぶべきことが多くなる傾向にもあります。そのため、学習コストが比較的高くなる点を意識しておくべきです。また、定期的なバージョンアップによって、既存のコードが使えなくなる可能性もある点に注意が必要となるでしょう。
事前に使い方を明確にしておく必要がある
Kubernetesは柔軟な設定が可能で、高い拡張性を持っています。しかし、その分だけ選択肢が多くなってしまい、どのような機能を実現したいのかが不明瞭だと十分に使いこなせないかもしれません。事前に「Kubernetesを使ってどのような運用管理を実現したいのか」を明確にしておきましょう。
Kubernetesの用語を解説
クラスター
Kubernetesは、大きく分けてコントロールプレーン(マスターノード)とノード(ワーカーノード)という2つのコンポーネントから構成されており、これらを合わせてクラスターと呼んでいます。前述したようなKubernetesの主な機能はこの部分で提供されています。
ノード
ノードはクラスターの基本的な作業単位であり、通常はワーカーノードのことを指します。各ノードには、Podを実行するために必要なサービス(kubelet、kube-proxy、そしてDockerなどのコンテナランタイム)がインストールされています。ノードはクラスターのリソースを提供し、管理されるアプリケーションの実行環境を提供します。
Pod
Podは、一つまたは複数のコンテナの集合体で、Kubernetesリソースの最小単位です。各Podは独自のIPアドレスを持ち、Pod内のコンテナはストレージやネットワークリソースを共有しているため、まとめて管理することが可能です。
ReplicaSet
ReplicaSetは、指定された数のPodコピーがクラスター内に常に存在することを保証する役割とPodのレプリカを保持する役割を持つKubernetesリソースです。これにより、Podのスケーリングと冗長性が管理され、指定された数のPodが常に稼働していることが保証されます。
Deployment
Deploymentは、アプリケーションのデプロイ、アップデート、スケールアウトのプロセスを管理するためのKubernetesリソースです。DeploymentはReplicaSetの上位概念として機能し、アプリケーションのデプロイメントを宣言的に定義し、そのライフサイクルを管理します。これにより、アプリケーションの更新やロールバックが容易になります。
Service
Serviceは、複数のPodへの安定したアクセスポイントを提供するKubernetesリソースです。これにより、Pod群へのネットワークトラフィックを負荷分散させることができ、個々のPodがクラスター内でどのように移動または再生成されてもアプリケーションが連続して稼働し続けることが可能になります。
コンテナ運用管理の課題を解決するならKubernetes
Kubernetesはコンテナを一括管理することができるコンテナオーケストレーションツールです。単体で使われることはなく、ユーザーが使いやすいようカスタマイズして導入することで、コンテナの管理が容易になります。複雑なコンテナ管理の実現、スケーラビリティが高く、必要に応じたリソースの自動調整、自動回復機能を備えているため障害に強いなど、利用するメリットは多いです。
学習やトレーニングコストはかかりますが、使いこなすことができれば、コンテナの管理運用の自動化が図られ、より効率的にシステム開発を進めることができるでしょう。
TD SYNNEXでは、マネージドKubernetesを提供している各社のパブリッククラウド(Microsoft Azure、Google Cloud、IBM Cloud)、および、各種オンプレミスのサーバーも取り扱っておりますのでお気軽にご相談ください。
【著者プロフィール】
河瀬季/かわせ・とき
モノリス法律事務所 代表弁護士
小3でプログラミングを始め、19歳よりIT事業を開始。
ベンチャー経営を経て、東京大学法科大学院に入学し、弁護士に。 モノリス法律事務所を設立し、ITへの知見を活かして、IT・ベンチャー企業を中心に累計1,075社をクライアントとしている。