オープンソース

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

Kubernetes〜コンテナ管理ツール〜

Kubernetesとは

Kubernetesとは、Dockerコンテナの管理を自動化するためのソフトウェアです。Kubernetesは、Googleが開発しました。Googleは、以前からインターネットサービスを提供するためにマイクロサービスの基盤を利用していました。Kubernetesは、このマイクロサービスの技術をオープンソースソフトウェアとしてまとめて公開したものです。

Kubernetesは、ベースとなるコンテナの技術としてDockerを採用しています。Dockerコンテナは完全仮想環境化に比べ、ディスク、メモリ消費量を少量で利用できます。またサービスの起動が高速でバージョン管理を容易に行うことができます。Kubernetesを使用すると、Dockerコンテナの長所を最大限に活用することができます。

また、Kubernetesは、Google Cloud Plathome上のGoogle Kubernetes Engine、AWS上のAmazon Kubernetes Serviceなど、クラウドベンダーのサービスでも採用されていて、コンテナ型仮想化のデファクトスタンダード的な位置づけになっています。

KubernetesのDockerコンテナ画像

Dockerコンテナの課題

Dockerコンテナを利用することで様々なメリットがありますが次のような課題もあげられます。

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

このような問題はKubernetesを使用することで解決されます。

KubernetesのDockerコンテナ管理

Kubernetesでは、Dockerコンテナの課題を補うために、様々な機能を持っています。

PodによるDockerコンテナの管理

Dockerでは、1つのコンテナに1つのアプリケーションが動作するようにコンテナ化することが推奨されています。そのため、いくつものDockerコンテナを組み合わせて1つの機能を提供するような構成になることがほとんどです。Kubernetesでは、このようなコンテナのセットをPodとして管理します。

Podイメージ画面

Podは、KubernetesでDockerコンテナを管理するための最小単位で、複数のDockerコンテナの集合体です。Dockerコンテナをグループで管理することで、Dockerコンテナの使いにくさを解消します。

レプリカセット

レプリカセットとは、Kubernetesが複数のPodの複製を自動的にデプロイする機能です。例えば、レプリカ数に3を設定して起動すると、Kubernetesは同じ機能のPodを3つ自動的にデプロイします。この機能をうまく使うことで、万一Dockerコンテナに問題があり停止してしまった場合にも、Kubernetesが自動的にDockerコンテナを起動します。

ボリューム管理

Kubernetesでは、Dockerコンテナには一時的なストレージ領域を割り当てて提供します。このストレージ領域は、Dockerコンテナの起動中のみ有効で、Dockerコンテナを再起動すると再割り当てされます。Kubernetesは、この一時的なコンテナのストレージとは別に永続ストレージを管理します。永続ストレージは、Dockerコンテナにマウントして利用することができます。Kubernetesのストレージは、Dockerコンテナが動作するすべてのノードから共有できる必要があります。そのため、NFS、Ceph、DRBD-SDSなどのストレージが使われます。

リソース管理

機械学習基盤向けにKubernetesを利用する場合には、貴重なGPUなどのリソースを細かく管理する必要があります。Kubernetesでは、Dockerコンテナに割り当てるCPUやメモリなどのリソース量を、細かくコントロールすることができます。また、コンテナで利用しているリソースは、リソースモニターによって確認することができます。リソースモニターの機能はアドオンで実装されていて、Prometheusなどのアドオンが公開されています。

ジョブ管理

Kubernetes上では、WEBサーバやデータベースなどの常駐型のサービスだけでなく、一時的な処理や計算にも利用することもできます。このような処理を行なうdockerコンテナのリソースは、Jobと呼ばれています。Jobによって動作したPodは、処理結果を取り出して分析することができるように、処理が終了した後も削除されずに保持されます。また、CronJobでは、定期的にジョブを実行することもできます。

ログ管理

Dockerでは、Dockerコンテナがイベントにより出力するログは、標準エラー出力に出力されます。そして、この情報はDocker側で管理します。Kubernetesでは、このログを安全に運用するため、独立したストレージで集中管理するようになっています。また、Kubernetesで用意されているDaemonSetというリソースを利用して、大量のログを管理する手法も使われます。DaemonSetを使うとKubernetesの各ノードに1つのDockerコンテナを起動しておくことができます。この機能を使って、Fluentdでログを収集し、ElasticsearchやGraylogなどでデータを収集、解析、保存し、高速に検索するようなシステムを作ることができます。

ユーザ管理とマルチテナントでの利用

Kubernetesは、Dockerコンテナの仮想マシン空間を複数のセキュリティ的に独立したネームスペースに分離して管理することができます。この機能によって、コンテナ仮想基盤をマルチテナントで利用することができます。部署ごとに管理者を分けたり、ホスティングサーバのようにサブスクライビングすることも可能です。ネームスペース毎にリソース制限を設定することもできます。

また、Kubernetesでは、ロールベースのアクセス制御(RBAC:Role Base Access Control)にも対応しています。そのため利用するユーザやネームスペースに割り当てる権限を調整することもできます。

ダッシュボード

Kubernetesには、管理用のダッシュボードが用意されています。ダッシュボードでは、Podの管理や、コンソールでの操作が可能になります。Kubernetesダッシュボードから、次のような管理が可能です。

  • Kubernetesで管理しているリソースの状況の確認
  • WebフォームでのDockerコンテナの設定
  • Kubernetes上で動作しているPodやDockerコンテナの管理・操作
  • ログの管理

Kubernetesの特徴

KubernetesにはDockerコンテナを管理する上で必須の機能が備わっており、次のような特徴があります。

Dockerコンテナのスケジューリング

Kubernetesは、CPUやメモリの状態を見て、自動的に適切なホストを選択して、Dockerコンテナを起動します。起動するDockerコンテナの数も容易に指定できます。

アップデートのリスクを低減

Kubernetesでは、Dockerコンテナを複製することで容易に検証環境を作成できます。つまり、本番と全く同じ環境での動作確認を行うことが可能です。本番と同じ環境で確実な動作確認を行うことで、ソフトウェアアップデート時に起こる動作不良などのリスクを低減できます。

ネットワークを仮想化しホスト間で通信

Dockerコンテナは自ホスト上でしか管理できないという課題があります。Kubernetesを活用することで、複数のノードで構成されている環境を1つの実行環境のように扱うことができます。そうすることで、別のホストにあるDockerコンテナもまとめて管理できます。

セルフヒーリングによる高い耐障害性

Kubernetesは、Dockerコンテナの状態を監視しています。そして、万が一Dockerコンテナのプロセスが停止した場合、再度Dockerコンテナを起動し、自己修復します。そのため、ノード障害が起きたり、ノード退避などを行ったりしても、サービスを継続できます。

Kubernetesのセルフヒーリング画像

Dockerコンテナのオートスケール

Kubernetesは、HorizontalPodAutoscalerとVerticalPodAutoscalerの2つのオートスケールの仕組みを持っています。orizontalPodAutoscalerは、CPUやメモリの利用状況によって、Podのレプリカ数を自動的にスケーリングします。VerticalAutoscalerは、CPUやメモリの利用状況に合わせて、割り当てるリソースの量を自動的にスケーリングします。

Kubernetesのアーキテクチャ

Kubernetesは、マスターサーバとノードサーバからなるクラスタとして動作します。これをKubernetesクラスタと呼びます。

kubernetesアーキテクチャ画面

ノードサーバは、実際にDockerコンテナを動作させるコンポーネントです。マスターサーバは、ノードサーバ上で動作するDockerコンテナを管理します。また、ノード上で動作するDockerコンテナを監視し、必要に応じてレプリカセットをデプロイメントしたりするなどの制御を行います。

Kubernetesのインストール

Kubernetesのインストール自体は、それほど難しくありません。マスタサーバもノードサーバも基本的なソフトウェアのインストール手順はほぼ同じです。

  1. Dockerをインストールする
  2. Kubernetesのパッケージレポジトリを登録する
  3. kubernetesのパッケージをインストールする

こうした準備を行った後、マスタサーバではkubeletサービスを起動した後、kubeadm initでマスタサーバの初期化処理を行います。この時、Kubernetesクラスタのトークンが作成されます。ノードサーバでは、kubeadm joinにこのトークンを指定して実行することで、Kubernetesクラスタに参加することができます。

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

デージーネットでは、Kubernetesを活用したIot開発基盤を構築しています。Kubernetesを使用してオンプレミスでIot開発基盤を構築することで、一定のコストで継続的につかえるIot構築基盤を実現することができます。

OSSのKubernetes「構築事例/情報の一覧」

IoT開発基盤構築でのKubernetes活用構築事例

Kubernetes活用構築事例の画像

IoT開発基盤構築にKubernetesを活用しました。これまで、プロジェクト単位でクラウドを契約していましたが、以前よりも多くの部門がIoTを扱うようになりました。IoT開発基盤では大量のデータを扱います。そのため、クラウドを利用するコストメリットが薄れてしまいました。そこで、オンプレミスで大容量のIoT開発基盤を構築し、一定のコストで継続的に使えるIoT開発基盤を実現しました。

Kubernetes調査報告書

調査報告書ダウンロードの画像

Kubernetesは、Dockerコンテナを始めとするコンテナを管理するためのソフトウェアです。コンテナ間のネットワーク制御や、コンテナの監視、異常時のセルフヒーリング機能など、コンテナを管理する上で必須の機能が備わっています。本書では基本的なKubernetesの概念と使い方を紹介しています。

デモのお申込み

もっと使い方が知りたい方へ
Kubernetesの操作方法や操作性をデモにてご確認いただけます。使い方のイメージを把握したい、使えるか判断したい場合にご活用下さい。Kubernetesのデモをご希望の方は、下記よりお申込みいただけます。


デモをご希望の方


OSS情報「Kubernetes」

Kubernetes〜コンテナ管理ツール〜
ここでは、Dockerコンテナの管理を自動化するためのソフトウェア「Kubernetes」を紹介します。
Kubernetesクラスタの構築
ここでは、CentOS7に最小限のKubernetesクラスタを構築する方法について説明いたします。
KubernetesのPod機能
ここではPod機能について説明いたします。
Kubernetesのレプリカセットとデプロイメント
ここではデプロイメントという機能を利用してレプリカセットを作成する方法について説明いたします。
Kubernetesのアーキテクチャ
ここではアーキテクチャについて説明いたします。
Kubernetesのコンテナアップデート
ここでは、Kubernetesでソフトウェアをアップデートする場合の手法について説明いたします。
Kubernetesのローリングアップデート
ここでは、Kubernetesのローリングアップデート機能の概要について説明いたします。
Kubernetesのダッシュボード
ここでは管理用のダッシュボードについて説明いたします。
Kubernetesの永続ストレージ
ここでは永続ストレージについて説明いたします。
GitLab〜OSSのコンテナレジストリ〜
GitLabは、ウェブ型のGitリポジトリマネージャーです。ここではGitLabのコンテナレジストリについて説明いたします。
KubernetesとDRBD-SDS
ここではDRBD-SDSを利用することでサービスの冗長化を実現させる手法について説明いたします。

Kubernetes〜コンテナ管理ツール〜の先頭へ