Kubernetesと関連用語について調べてみた。

Kubernetesと関連用語について調べてみた。

こんにちは。七色メガネです。

今回からはGoogleCloudPlatform で Kuberentes Engine を利用しようと思っていたのですが、そもそも Kubernetesってなんだというところから始まり、コンテナってなんだ、ポッドってなんだと疑問が山積し、無知のまま突っ込んだら泥沼に足を取られる予感がしました。

ので本記事では、まずは GCP KubernetesEngineに入る前準備として、Kubernetesという技術について調査して見ました。ので、今回はそれをまとめます。

 

Kubernetes ってなに?

Kubernetes とは

Kubernetes とは、Google によって設計されたコンテナのオーケストレーションソフトです。コンテナ化されたアプリケーションのデプロイ、スケーリングなどを自動化することができます。

コンテナとは何か、については過去記事をご覧ください。

なぜ Kubernetes が必要なのか

Dockerコンテナ(ここではコンテナをDocker産のものと読み変えます)は優れた技術ですが、その仕様上Dockerがインストールされたホストを複数台連携させて動作させたり管理することが出来ませんでした。したがって一定規模以上のシステムにコンテナ技術を導入することにハードルがありました。

Kubernetes はそれを解決するソフトです。Kubernetes を使用することで、複数のDockerホストを一元管理出来たり、その他Docker単体では実現できなかった多くのことが出来るようになります。

Kubernets の導入によって出来るようになることを簡単に列挙してみます。

  • 複数サーバにおけるコンテナの統合管理
  • コンテナ間のネットワーク管理
  • コンテナの負荷分散
  • コンテナの監視
  • コンテナ無停止のアップデート

Kubernetes のアーキテクチャ

Kubernetes は マスター・スレイブアーキテクチャ で構成されます。
Kubernetes のコンポーネントは、コントロール・プレーンである Master と、各 Node とに分けられます。

Master は主に次のことを管理します。

  • 設定データの保存(etcd)
  • Node 全体の設定管理(API server)
  • Pod の Node への配置(Scheduler)
  • Pod の状態管理(Controller Manager)

Node は主に次のことを管理します。

  • 各  Node の状態管理(Kubelet)
  • ネットワークプロキシおよびロードバランサ(Kube-proxy)
  • 各 Node のリソース管理(cAdvisor)
  • コンテナの管理(Pod)

各個のサービスはPod内のコンテナによって提供されます。しかしユーザがコンテナに直接アクセスしてしまうと負荷分散などができません。
ですのでユーザは Node の Kube-proxy が提供する外部IPにアクセスし、 Kube-proxy がロードバランシングを行い、各Pod内のコンテナへとユーザを誘導します。

Nodeは分散環境などで構築されることも予想されます。各Nodeを統合管理するのが Master です。
Master は各Nodeを監視するとともに、新規Podを対象Nodeに追加するなどの操作も行います。

 

Kubernetes 関連の用語について

クラスタ、クラスタリングってなに?

※画像引用
https://inside.dmm.com/entry/2018/04/13/hello-kubernetes

クラスタリングとは、複数のサーバを束ねて、利用者や外部のシステムに対して1台のコンピュータであるかのように見せる技術のことです。

Kubernetes においては、複数のNodeやPodが作成されます。それを束ねて、ユーザにとって一つのサービスであるかのように見せるのがクラスタリングであり、そうして作られた構成をクラスタと呼びます。

Podってなに?

Pod とは、Kubernetes における基本単位です。複数のコンテナを1つのPodとしてグループ化することにより、対象を抽象化しています。

1つのPodには、クラスタ内でユニークな Pod IPアドレス が割り振られます。したがって、クラスタ中の相互Podにおいてポートの衝突が起きることはありません。

Pod 内では互いのコンテナは localhost 上で参照することができます。異なる Pod のコンテナにアクセスするときは、対象 Pod の Pod IPアドレスを参照する必要があります。

スケジューリングってなに?

スケジューリングとは、コンテナを Node にデプロイする際、どの Node に配置するかを決定するステップです。

複数サーバで Node を運用している場合 Node による性能差がありますから、デプロイするコンテナの性質に応じてデプロイ先の Node を選択することが望ましいです。スケジューリング機能は、予め設定を組み込むことでそういった配置について制御を行うことができます。

オートスケーリングってなに?

オートスケーリングとは、負荷に応じてコンテナの数を自動で増やすことです。

同一のコンテナイメージから作成されたコンテナは全て同一構成のコンテナとなります。このようにコンテナを複製することをレプリケーションといいますが、負荷に応じて自動でレプリケーションを行い、コンテナの数を自動的に増減する、というのがオートスケーリングの中身です。

サービスって何?

次の画像は、 Node の中身の構成の関するものです。

Node の説明にもあったように、Node は複数のPodによって構成されます。
Podを起動しただけでは外部からアクセスすることはできず、Podを統括するサービスを定義することで初めて外部からのアクセスが可能となります。

サービスを定義すると、各Pod に内部IP(Pod IP)と外部IPが付与されます。

ユーザは各Podに付与された外部IPにアクセスすることで、コンテナに接続することができます。
がこの場合は負荷分散が行えません。

各Podへのアクセスをサービス経由で行うようにすると、負荷分散の機能を実現することができます。また、コンテナがスケーリングされたとき新たなコンテナへのルーティングの設定なども自動で行えるようになります。

サービスの主な機能は次の通りです。

  • ロードバランス
  • コンテナのスケール時のサービスへの自動追加・削除
  • コンテナ障害時のサービスからの切り離し

セルフヒーリングってなに?

セルフヒーリングとは、障害によるプロセス停止時などに対象のコンテナを自動で再デプロイする機能です。

Kubernetes にとって、耐障害性というのは重要なテーマです。
コンテナの障害時やNodeの障害時にはスケジューリング機能(コンテナの配置機能)を用いて、障害のあった箇所に関するコンポーネントを再デプロイしてしまいます。これにより、サービスに影響なくアプリケーションを自動復旧することができます。

セルフヒーリングの条件には、プロセスの監視以外にも別途ヘルスチェックをトリガーとすることもできます。

 

まとめ

  • Kubernetes は、コンテナの統合管理を行うことができるオーケストレーション・ツールである。
  • Dockerだけでは複数のDockerホストを統括管理できないことから、それを可能にするKubernetesの需要が生まれた。
  • Kubernetes はマスター・スレイブアーキテクチャを採用している。
    マスターは、各Nodeへのデプロイや設定を統括管理しており開発者や運用が使用する。
    スレイブに相当するのはNodeで、実コンテナを所有するPodなどが格納される。ユーザへのサービスは各Nodeによって提供される。
  • オートスケーリング(コンテナの自動複製)やセルフヒーリング(障害発生時の自動再デプロイ)などの機能が備わっており、耐障害性に優れている。

 

以上です。ここまでご覧いただき、ありがとうございました!

Cloudカテゴリの最新記事