よくある質問・用語集

サーバ構築のデージーネット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は、綴りも長く覚えにくいことから、短縮して「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は、実際にコンテナが動作するノードサーバと、それを管理するマスターサーバの大きく分けて2種類のコンポーネントで構成されます。

マスターサーバ

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

ノードサーバ

ノードサーバは、実際にコンテナが動作するサーバです。各ノードサーバ上の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は、様々な周辺ツールと一緒に動作します。Kubernetesと一緒に利用すると便利なコンテナツールには、次のようなものがあります。

GitLab

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

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

PacemakerとPacemaker bundle

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

DRBD-SDS

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

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

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

関連用語

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


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

Kubernetesとは先頭へ