連載
» 2019年04月08日 05時00分 公開

これから始める企業のためのコンテナ実践講座(3):Kubernetesがクラウド界の「Linux」と呼ばれる2つの理由 (2/3)

[矢野哲朗,スタイルズ]

Kubernetes Master Components

 マスターでは、コンテナを管理する役割が備わっています。こういった役割を持つコンポーネントは一般的に「コントロールプレーン」と呼ばれています。

 Kubernetesでは最低1台からマスターを構成できますが、3台以上のサーバでマスターを構成することを推奨しています。もし、マスターを構築したサーバが1台の環境でマシンが落ちた場合、コンテナを管理できなくなってしまうためです。

Kubernetes Node Components

 ノードは、マスターの下で指示されたコンテナを実行する役割が備わっています。こういった機能を持つコンポーネントを一般的に「データプレーン」といいます。

 ノードもマスターと同様、最低1台から構成できますが、Kubernetesでは2台以上のサーバでノードを構成することを推奨しています。

Kubernetesにおけるマスターとノードの連携 Kubernetesにおけるマスターとノードの連携

マスターとノードのまとめ

 マスターとノードをまとめると、推奨要件でKubernetesを運用するには5台以上のサーバが必要です。サービスを運用するためには、さらに多くのサーバが必要になります。検証段階で、5台以上の物理サーバを用意することは難しいため、利用している企業は仮想マシンで実行したり、下記のような工夫を行ったりしているようです。

  • マスターとノードを両方1台で済ませる
  • 社内仮想環境でマスターを1台、ノードを複数台用意する
  • 社内仮想環境でノードとマスターを同居させて3台用意する
  • クラウドサーバでマスターを3台とノードを複数台用意する
  • クラウドサービスのマスターを利用してノードを複数台用意する

 この部分については、次回以降解説します。

Kubernetesの構成

 Kubernetes内部の役割分担について説明しましたが、Kubernetesの基本的な機能は、マスターにあるサービスで説明できます。連載第2回で紹介したKubernetesを活用した場合のサーバ機能についての図を再度掲載します。

Kubernetesの環境 Kubernetesの環境

 Kubernetesを利用する際に必要な上記の基本機能は、下記4つのサービスコンポーネントで構成されています。

  • etcd
  • kube-apiserver
  • kube-scheduler
  • kube-controller-manager
Kubernetesのサービスコンポーネント Kubernetesのサービスコンポーネント

 それ以外の機能は、別途その機能を持つコンテナを実行したり、上記の各サービスで呼び出される定義やコントローラーを実装したりすることで提供されています。なるべく基本要素を増やさず、シンプルな構成でさまざまな要素に機能しようとしているわけです。

 サービスコンポーネントが提供しているKubernetesの各種機能とLinuxでの機能を比べてみましょう。さらに、Webサービスを提供するサーバの管理には以下のような機能が必要です。Kubernetesにはどのような機能が用意されているかも含めて説明します。

Webサービスを提供するサーバの管理に必要な機能 Webサービスを提供するサーバの管理に必要な機能

プロセス管理

 Kubernetesでは「プロセスの管理=コンテナの管理」になります。Linuxがプロセスを終了するまで管理するように、Kubernetesはコンテナが起動してから終了するまでを管理できます。

プロセスのスケジューリング

 Kubernetesでは、コンテナをどこのホストでいつ実行するか、実行優先度をどうするかなどを管理できます。

リソース管理

 Kubernetesでは、コンテナ1つに割り当てるCPUやメモリの上限と下限を指定して管理できます。

ストレージ管理

 Kubernetesの場合、コンテナが永続的なものではないため、OSに付いている「ディスク」のような概念はありません。しかし、それではサービスを運用する際の永続データ領域や一時保存領域などがなくなってしまうため、「Volume」「PersistentVolume」といった機構を用意して、永続データや一次保存領域を確保できます。

ユーザー管理

 Linuxのログインとは異なり、Kubernetesでは、コンテナを操作できるかどうかの権限を用意しています。もっと詳細に説明したいところですが、ここでは割愛します。

ネットワーク管理

 Kubernetesでは、コンテナを「Pod」というオブジェクトで管理します。各Podに対してIPアドレスを割り当て、Linuxの「iptables」のように接続許可、拒否ができます。

バッチ動作管理

 Kubernetesでは、Linuxの「Cron」のように定期的な起動を行う「CronJob」とタスクの実行回数と並列数を指定して実行する「Job」があります。

パッケージ管理

 Kubernetesでは、コンテナ自体がパッケージです。そのコンテナを起動するマニフェストを汎用化して利用しやすくする「Helm」というパッケージマネージャーがスタンダードとなっています。

ログ管理

 Kubernetesでは、コンテナから出力されるログを集約する仕組みがあります。基本的に標準出力と標準エラー出力を収集するため、コンテナが稼働しているときに出力された標準出力と標準エラー出力のログしか収集できません。そのため、ログ集約ツールの「Fluentd」を活用したり、エージェントを立ち上げてログファイルを転送したりするなど、コンテナの状態と関係なくログを収集する仕組みを各自で構築することが多いようです。

設定ファイル

 先述した主要機能をどのように動作させるかを示す設定ファイルは、Kubernetesの場合、Dockerコンテナイメージではなく「ConfigMap」で外部に持つことができます。

サービスを提供するために必要な機能

 以上のように、KubernetesはLinuxと似たような機構を持っています。続いて、サービスを提供するために必要な機能は、どのようなものかを見ていきましょう。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。