よくある質問・用語集

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

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

Kubernetesとは

Kubernetesとは、Dockerコンテナにおけるアプリケーションのデプロイ、スケール、管理を自動化するソフトウェアです。Kubernetesの提供する機能は、コンテナオーケストレーションと呼ばれ、Kubernetesはコンテナオーケストレーションのデファクトスタンダード的な位置づけとなっています。

Kubernetesの読み方

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

Kubernetesの歴史

Kubernetesは、Googleによって開発され、2014年にApache License Version 2.0のもとでオープンソースソフトウェアとして公開されました。まだ新しいソフトウェアですが、2015年7月に発表されたKubernetes v1.0から活発に活動が行われ、管理コマンドの拡充やスケーラビリティの強化などが行われています。2017年には、Dockerが正式にKubernetesをサポートすることを表明しています。

Kubernetesの管理はGoogleから移行し、2018年1月時点ではLinux Foundationの傘下にあるCNCF(Cloud Native Computing Foundation)がKubernetes管理しています。

近年は、Google Cloud Platformを始めとし、Kubernetesを使ったパブリッククラウドサービスが、多数のベンダーから提供されています。

コンテナ管理の課題

Dockerは、新世代の仮想化技術として注目されてきました。しかし、一方で、次のような課題を抱えていました。

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

Kubernetesを利用すると、こうしたDockerの課題を解決することができます。

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は、実際にコンテナが動作するノードサーバと、それを管理するマスターサーバで構成されます。

マスターサーバ

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

ノードサーバ

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

管理コマンド

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

Kubernetesダッシュボード

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

デージーネットの取り組み

近年、IoTやAIの基盤としてKubernetesが注目されています。Kubernetesは、複数のコンピュータにプログラムを配布することが容易なため、HadoopやSparcなどを利用した分散コンピューティングの基盤としても利用されています。

デージーネットでは、このような新しい技術を支える基盤としてKubrnetesを提案し、構築を行っています。また、構築後の保守・サポートも提供しています。

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

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

関連用語

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


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

Kubernetesとは先頭へ