Kubernetesアーキテクチャ

アーキテクチャを理解する

Kubernetesアーキテクチャ図
Kubernetesアーキテクチャ図 - 出典: Wikipedia

Kubernetesをデプロイすると、クラスタがデプロイされる。このKubernetesクラスタは、コンテナ化されたアプリケーションを実行するNodeと呼ばれるワーカーマシンの集合である。アプリケーションのコンポーネントはPodと呼ばれ、上の図のように、このPodが1つ以上のNodeに含まれてデプロイされる。Nodeの制御はkubeletというエージェントで行われ、Nodeへのアクセスはkube-proxyというプロキシを通じて行われる。

Control planeという構成要素は、クラスタを制御する機能を持つ。

KubernetesのNode

Kubernetesでは、クラスタ全体を管理するコントローラーとしてMaster Nodeが存在し、コンテナがデプロイされるマシン、つまり仮想マシンや物理サーバーマシンであるWorker Nodeが存在する。

Master NodeとWorker Node

DockerでいうDaemonのような役割を持つMaster Nodeにクライアントからコマンドを送り、それを受け取ったMaster NodeがWorker Nodeと呼ばれるNodeにコマンドを送る構造になっている。

Master Node、つまりControl planeの役割は次のとおりである。

  • クラスタ制御
  • Worker Nodeの状態を管理および制御
  • スケジューリング、ライフサイクル監視
  • 負荷分散、自動復旧
  • single master
  • multi master(3、5個のmaster nodes)

Worker Nodeの役割は次のとおりである。

  • コンテナが実行されるサーバー
  • Dockerプラットフォームを通じてコンテナを動作させ、実際のサービスを提供
  • 複数Nodeでクラスタを形成
  • Master Nodeの命令に従ってPodを作成、削除

各構成要素はHTTPSを通じて通信し、クラスタを形成する。

クライアントが実行コマンドを入力するのはコンソールだが、Kubernetesの場合はkubectlコマンドを通じて、manifestと呼ばれる各種設定を書いたファイルを作成したり、manifestファイルに基づいてMaster Nodeにリソース操作を実行するよう命令したりする。

Control plane component、Master component

  • kube-apiserver
    • Kubernetesリソース定義を操作するためのREST APIを外部に提供する。
    • Kubernetes Control planeのフロントエンド。
  • etcd
    • kube-apiserverがリソース定義などを保存するDBである。
    • 分散DBなので、通常はクラスタとして構成する。
    • 一貫性と高可用性を持つKey-valueストア。
    • Kubernetesのすべてのクラスタ情報の保存場所。
  • kube-scheduler
    • PodにNodeが割り当てられているか確認し、割り当てる。
  • kube-controller-manager
    • kube-apiserverのAPIを使用してPod定義の作成を監視し、Podをどこにデプロイするかを決定する。
    • 通知およびPod数を監視する複数のコントローラープロセスを実行する。
    • Podを観察し、数を保証する。
  • cloud-controller-manager
    • kube-apiserverのAPIでさまざまなリソース定義を監視し、実際のリソース状態を定義と同じにする。
    • 基盤となるクラウドプロバイダーと相互作用するコントローラーを実行する。

Worker Nodeコンポーネント

Worker NodeコンポーネントはPodやコンテナを管理および監視する。

  • kubelet
    • クラスタの各Nodeで実行されるエージェント。
    • kube-apiserverのAPIでPod定義を監視し、コンテナの起動および停止のためにDockerと連携する。
    • kube-apiserverからのAPI呼び出しを受けるHTTPSポートを持ち、コンテナのログを返すこともある。
    • 各コンテナがPodで実行中であることを保証する。
    • デーモン形式で動作する。
  • kube-proxy
    • クラスタの各Nodeで実行されるネットワークプロキシ。
    • kube-apiserverのAPIでService定義を監視し、ホストOSに対してServiceへ通信を転送する設定を行う。
    • iptables ruleを構成する。
  • コンテナランタイム
    • コンテナを実行するエンジン。
    • docker、containerd、runc。

Kubernetesクラスタを自分で構成するツール

  • kubeadm
    • Kubernetesが公式提供するクラスタ作成/管理ツール。
    • Kubernetes公式インストールツール(Kubernetes admin)。
  • kubespray
    • Kubernetesクラスタをデプロイするオープンプロジェクト。
    • さまざまな形式でKubernetesクラスタを構成可能。
    • オンプレミスでサービスクラスタを運用するときに有用。

オブジェクト

Kubernetesを理解するうえで最も重要な部分がオブジェクトである。最も基本的な構成単位となるBasic objectと、このBasic objectを作成および管理する追加機能を持つControllerで構成される。また、これらのオブジェクトのspec、つまり設定以外に、追加情報であるメタ情報で構成されると考えればよい。

Running app on Kubernetes
Running app on Kubernetes

Object Spec

オブジェクトはすべて、オブジェクトの特性、つまり設定情報を記述したObject Specで定義される。コマンドラインを通じてオブジェクトを作成するときに引数として渡して定義したり、YAMLやJSONファイルでspecを定義したりできる。

Basic Object

Kubernetesによってデプロイおよび管理される最も基本的なオブジェクトは、コンテナ化されてデプロイされるアプリケーションのワークロードを記述するオブジェクトで、Pod、Service、Volume、Namespaceの4種類がある。簡単に説明すると、Podはコンテナ化されたアプリケーション、Volumeはディスク、Serviceはロードバランサー、Namespaceはパッケージ名のようなものと考えればよい。それぞれを詳しく見ていこう。

ラベル

… 作成中 …

コントローラー

… 作成中 …

アドオン

  • ネットワークアドオン
    • CNI - weave、calico、faneld、kube-route …
  • DNSアドオン
    • coreDNS
  • ダッシュボードアドオン
  • コンテナリソース監視
    • cAdvisor
  • クラスタロギング
    • コンテナログ、k8s運用ログを収集して中央集約する。
    • ELK(ElasticSearch、Logstash、Kibana)、EFK(ElasticSearch、Fluentd、Kibana)、DataDog

参考