よくある質問・用語集

サーバ構築のデージーネットTOP > OSS情報 > Kubernetes〜コンテナ管理ツール〜 > Kubernetesとは

サーバ構築のデージーネットTOP > OSS情報 > よくある質問・用語集 > 用語集 > Kubernetesとは

  • もっと調べる
  • どうやって使う?

Kubernetesとは

Kubernetesとは、Dockerコンテナにおけるアプリケーションのデプロイ、スケール、管理を自動化するオープンソースソフトウェアです。Kubernetesの提供する機能は、コンテナオーケストレーションと呼ばれ、管理しやすいマイクロサービスの基盤を提供します。Kubernetesは、GoogleのGoogle Platoformで提供されるGKE(Google Kubernetes Engine)、AmazonのAWSで提供されるEKS(Amazon Elastic Container Service for Kubernetes)、MicrosoftのAzureで提供されるAKS(Azure Kubernetes Service)など、世界中のさまざまなクラウドベンダーにも採用されています。そのため、Kubernetesはコンテナオーケストレーションのデファクトスタンダード的な位置づけとなっています。

Kubernetesの読み方

Kubernetesは、ギリシャ語で「人生の道標」の意味で、「クーベネテス」、「クーベルネイティス」などと発音されています。また、Kubernetesは、綴りも長く覚えにくいことから、短縮して「k8s」と表記されることもあります。

KubernetesとDockerの歴史

KubernetesやDockerで注目されているコンテナ型仮想化は、長い間に渡って様々な方法で実現の試みがされてきました。もっとも古いのはchrootの技術で、1970年代のUNIXに遡ります。その後、より独立した仮想マシンを実現できるように様々な試みが行われてきました。2000年代には、RedHatが開発したOpenVZ、Solaris ZONEなど、いくつかの実装が公開されましたが、欠点も多く普及しませんでした。

しかし、2008年にLinuxカーネルにcgroupというリソース管理の機能が実装されたことをきっかけに、コンテナ型仮想化に必要な技術が確立し、その後はめざましく進歩するようになります。

Dockerのリリース

dotCloud社(現Docker社)は、2013年にDockerを公開しました。当初は同じコンテナ型仮想化のLXCをベースに開発されていて、不安定だったと言われています。しかし、2014年にlibcontainerを利用するように改修されてから安定しました。

Dockerは、使いやすいGUIを提供し、また集中管理を行うことができることで注目されました。また、アプリケーションのデプロイのしやすさや、コンテナのポータビリティなどから、ソフトウェア開発者の間で注目されました。さらに、2015年には、Docker、CoreOS、マイクロソフト、RedHat、VMWareなどが、オープンコンテナイニシアティブ(OCI)を発足し、標準化が始まりました。このような商業的な動きもあり、一気に標準的なコンテナ技術として使われるようになってきています。

しかし、一方で、次のような課題を抱えていました。

  • 自ホスト上のコンテナの管理しかできない
  • ソフトウェア同士を連携させる場合、各コンテナ同士のネットワーク情報や、連携情報の管理に手間がかかる
  • ホストに障害が発生した場合の冗長性確保が難しい
  • 大量のコンテナを全て監視しないといけない

Kubernetesのリリース

Kubernetesは、Googleによって開発され、2014年にApache License Version 2.0のもとでオープンソースソフトウェアとして公開されました。Kubernetesは、前述したDockerの課題のほとんどを解決することができるため、注目されました。2015年7月には、Kubernetes v1.0が公開され、その後も、管理コマンドの拡充やスケーラビリティの強化などが行われています。2017年には、Dockerが正式にKubernetesをサポートすることを表明しています。

Kubernetesのアーキテクチャ

Kubernetesは、実際にコンテナが動作するノードサーバと、それを管理するマスターサーバの大きく分けて2種類のコンポーネントで構成されます。

マスターサーバ

Kubernetesでのコンテナに関する操作は、すべてマスターサーバ上で動作するkube-apiserverを経由して行います。kube-apiserverは、ノードサーバ上のkubeletを通じてコンテナの管理を行います。

ノードサーバ

ノードサーバは、Kubernetesにおいて実際にコンテナが動作するサーバです。各ノードサーバ上のKubeletが、コンテナの管理を行います。また、kube-proxyがコンテナへの通信の制御を行います。

管理コマンド

Kubernetesの管理は、kubectlコマンドを使って行います。Podレプリカセットなどの作成では、マニュフェストとよばれるYAML形式のファイルを使って指示を出します。kubectlコマンドは、マスタサーバ上のkube-apiserverへ指示を出します。

Kubernetesダッシュボード

Kubernetesでは、視覚的にコンテナを管理できるように、ダッシュボードが用意されています。ダッシュボードからは、Podの状態の確認や、各種リソースの状態の確認を行うことができます。

ダッシュボードの画面

Kubernetesのコンテナ管理

Kubernetesでは、Podやレプリカセットといった新しい考え方でコンテナを管理しています。

Podによる管理

Podは、複数のコンテナの集合体で、Kubernetesでコンテナを管理するための最小単位です。Dockerコンテナでは、1つのコンテナ上に1つのプロセスだけを起動することが推奨されています。そのため、WEB-DBサーバのように複数のサーバを組み合わせて実現するサービスの場合には、いくつものコンテナを連携させて動作させる必要があります。そのため、各コンテナのネットワーク情報や連携情報の管理が煩雑になり、大規模なサービスを作ることが難しくなっていました。

Kubernetesでは、このようなサービスに必要なコンテナを集めてPodとしてグループで管理することで、コンテナ管理の煩雑さや複雑さを隠蔽します。

レプリカセット

Kubernetesでは、同じコンテナを別々のホストで動作し、ロードバランスすることができます。ホストの負荷を分散するとともに冗長性も担保されるため、ホストが停止した場合の影響を最小限にすることができます。

このようにKubernetes上に存在する同種のコンテナをレプリカとよびます。レプリカセットは、そのレプリカの集合です。作成するレプリカの数を指定すると、Kubernetesは自動的にレプリカセットを用意します。また、各レプリカの状態を監視します。レプリカが停止すると、自動的に新たなレプリカを起動し、常に一定数を維持してくれます。

Kubernetesのメリット

Kubernetesでは、Podやレプリカセットを活用し、スケールアウト、オートスケーリング、ローリングアップデートなど、高度なコンテナ管理機能を提供しています。

容易なスケールアウト

通常、Dockerのコンテナは一台のホストに閉じています。同一ホスト内で動くコンテナ同士は通信が可能ですが、ホスト外部との通信はNATを経由する必要があります。そのため、Dockerの実行環境では、ホスト間の連携が煩雑でした。つまり、コンテナ数が増えた場合に容易にスケールアウトできませんでした。

Kubernetesでは、複数のホストで構成されている環境を一台の実行環境のように扱うことができます。そのため、コンテナ数が増えてリソースが足りなくなった場合でも、ノードを増やすだけで拡張することが可能です。

不具合に自動的に対応 ~ セルフヒーリング

Kubernetesでは、運用中のコンテナに不具合があってサービスがダウンした場合でも状態の変化を検知し、空きリソースを見ながらコンテナを自動的に再起動します。これにより、不具合が発生してもサービスを継続できるようになります。

リソースの無駄を削減 ~ リソース管理とデプロイメント

Kubernetesを利用すると、効率よくリソースを使うことができます。コンテナを何台起動するかという情報を記載するだけで、どのように配置するかはKubernetesが決定しコンテナを起動します。HAクラスタのように、待機系のサーバが必要なクラスタ構成に比べてリソースを効率よく使うことが可能です。近年、クラウド上でサービスを提供するシステムが増加しています。多くのクラウドでは、使用するリソースによって料金が決まってくるため、効率の良いリソース管理はコスト削減につながります。

システム全体の負荷に自動的に対応 ~ オートスケーリング

Kubernetesは、Podのリソースの利用状況を監視しています。あらかじめ設定をしておくと、一定の条件になった場合には、Kubernetesが自動的にレプリカの数を増加させたり、低下させたりします。短期的なアクセス増などにも、リソースを効率よく利用できるようになり、コスト削減につながります。

安全なソフトウェアアップデート ~ ローリングアップデート

Kubernetes上に新旧両方のバージョンのPodを用意して、検証を行うことができます。また、旧バージョンから新バージョンへの切り替えも瞬時に行うことができます。万一、問題が発生した時にも簡単に旧バージョンに戻すことができます。

ユーザとテナント管理

Kubernetesは、マルチテナントに対応した信頼性の高いコンテナ環境を提供します。

Kubernetesは、テナントごとにネームスペースを分離することができます。つまり、各テナントごとに、完全に独立した環境を提供することができます。そのため、コンテナ基盤を提供するマネージドサービスを実現したり、組織内の部署ごとにリソースを制限したりすることができます。

また、ユーザには役割も定義することができます。そのため、サポート担当のエンジニアには、コンテナの状態を確認するだけの権限を与えたり、アプリケーション開発者にはコンテナを実行できる権限を与えるなどなど、ログインしたユーザによって個別に役割を定義することができます。なお、ユーザ認証には証明書認証も利用することができます。

Kubernetesの標準化動向

Kubernetesは、2015年に設立されたオープンコンテナイニシアティブ(OCI)によって標準化が進められています。2017年に策定されたOCI v1.0では、コンテナランタイムインタフェース(CRI)の標準仕様と、コンテナイメージの標準仕様が決められました。

2017年3月に、Docker社はDockerのCRIの機能を切り出して、Linux Foundationの傘下にあるCNCF(Cloud Native Computing Foundation)に寄贈しました。そして、2018年1月に、Kubernetesの管理もCNCFに移管されました。CNCFは、2018年5月にはCRIの機能をcontainred v1.1として正式リリースしています。

2019年には、KubernetesやDockerでcontainerdの利用が標準になりました。これに伴い、KubernetesはDockerコマンドがなくても動作するようになりました。containerdをベースにしたKubernetesでは、従来通りDockerコンテナを利用することができます。

Kubernetes関連ツール

Kubernetesと一緒に利用すると便利なコンテナツールには、次のようなものがあります。

GitLab

複数のノードにコンテナイメージを配布するためには、コンテナレジストリが必要です。GitLabは、オープンソースのプロジェクト管理ツールですが、コンテナレジストリとしても利用できて便利です。

Docker-HUBでは、プライベートなレジストリの作成は有償になっています。そのため、公開したくないコンテナイメージを管理するためには、GitLabを使ってプライベートなコンテナレジストリを用意する必要があります。特にオンプレミス向けのKubernetesの環境を作成する場合には、ぜひ準備したいツールです。

PacemakerとPacemaker bundle

MySQLやPostgreSQLのようなコンテナを管理するためには、ノードサーバの状態をきちんと制御する必要があります。しかし、Kubernetes単独では、このような方法が用意されていません。Pacemakerを使うと、ノードサーバの状態を監視し、強制的にノードを停止することができます。また、コンテナにPacemaker bundleを使って起動することで、コンテナ内部の状態までを監視することができます。

DRBD-SDS

DRBD SDSは、Software Defined Storageを実現するためのソフトウェアです。特にデータベースなどの複数のコンテナで共有されてはいけないデータを安全に扱えるように設計されていて、パフォーマンスも高いことから、コンテナと組み合わせて利用されます。

【カテゴリ】:クラスタ  仮想化  仮想基盤  ビッグデータ  オープンソースソフトウェア  AI  

  • もっと調べる
  • どうやって使う?

関連用語

Kubernetesに関連するページ(事例など)


デージーネット用語集のページです。「Kubernetes」という用語と関連情報について説明します。「Kubernetes」について情報を収集する際、サービスをご検討いただく際などに用語集ページをお役立てください。

Kubernetesとは先頭へ