Kubernetesがクラウド界の「Linux」と呼ばれる2つの理由:これから始める企業のためのコンテナ実践講座(3)(2/3 ページ)
大量のコンテナ管理や負荷分散を実現する「Kubernetes」について概要から本番活用の仕方まで解説する「これから始める企業のためのコンテナ実践講座」第3回は、Kubernetesがクラウド界の「Linux」と呼ばれている理由とともに、Kubernetes内部の仕組み、機能を紹介します。
Kubernetes Master Components
マスターでは、コンテナを管理する役割が備わっています。こういった役割を持つコンポーネントは一般的に「コントロールプレーン」と呼ばれています。
Kubernetesでは最低1台からマスターを構成できますが、3台以上のサーバでマスターを構成することを推奨しています。もし、マスターを構築したサーバが1台の環境でマシンが落ちた場合、コンテナを管理できなくなってしまうためです。
Kubernetes Node Components
ノードは、マスターの下で指示されたコンテナを実行する役割が備わっています。こういった機能を持つコンポーネントを一般的に「データプレーン」といいます。
ノードもマスターと同様、最低1台から構成できますが、Kubernetesでは2台以上のサーバでノードを構成することを推奨しています。
マスターとノードのまとめ
マスターとノードをまとめると、推奨要件でKubernetesを運用するには5台以上のサーバが必要です。サービスを運用するためには、さらに多くのサーバが必要になります。検証段階で、5台以上の物理サーバを用意することは難しいため、利用している企業は仮想マシンで実行したり、下記のような工夫を行ったりしているようです。
- マスターとノードを両方1台で済ませる
- 社内仮想環境でマスターを1台、ノードを複数台用意する
- 社内仮想環境でノードとマスターを同居させて3台用意する
- クラウドサーバでマスターを3台とノードを複数台用意する
- クラウドサービスのマスターを利用してノードを複数台用意する
この部分については、次回以降解説します。
Kubernetesの構成
Kubernetes内部の役割分担について説明しましたが、Kubernetesの基本的な機能は、マスターにあるサービスで説明できます。連載第2回で紹介したKubernetesを活用した場合のサーバ機能についての図を再度掲載します。
Kubernetesを利用する際に必要な上記の基本機能は、下記4つのサービスコンポーネントで構成されています。
- etcd
- kube-apiserver
- kube-scheduler
- kube-controller-manager
それ以外の機能は、別途その機能を持つコンテナを実行したり、上記の各サービスで呼び出される定義やコントローラーを実装したりすることで提供されています。なるべく基本要素を増やさず、シンプルな構成でさまざまな要素に機能しようとしているわけです。
サービスコンポーネントが提供しているKubernetesの各種機能とLinuxでの機能を比べてみましょう。さらに、Webサービスを提供するサーバの管理には以下のような機能が必要です。Kubernetesにはどのような機能が用意されているかも含めて説明します。
プロセス管理
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.
関連記事
- 「Kubernetes」とは何か――コンテナ型仮想化の本番利用に向けた課題
本連載では、サービスの開発、提供のアジリティ向上の一助となることを目的として、企業における「Kubernetes」の活用について解説する。初回は、Kubernetesを使う上で前提となる「Docker」についておさらいし、Kubernetesの概要や起源、現状などを紹介する。 - Kubernetes、コンテナ技術を活用した開発アジリティー向上にインフラアーキテクトはどう貢献したのか
Kubernetes、コンテナ技術を活用したCI/CD基盤におけるサービス開発について、リクルートの事例を基に解説する連載。初回は、インフラアーキテクトの視点から技術選定の考え方について解説。 - Kubernetes 1.14がリリース、Windowsコンテナサポートが安定版に到達
Kubernetesプロジェクトは2019年3月25日(米国時間)、Windowsノードの本番サポートなどを盛り込んだKubernetes 1.14をリリースしたと発表した。Kubernetes 1.14では、安定性に重点を置き、既にβ版などとして搭載している機能を成熟させることに力を注いだという。