Kubernetesマイクロサービス開発の実践
1-3-1 コンテナオーケストレーションの役割
コンテナオーケストレーションとは
現場では、ビジネスのワークロードに応じて適切にコンテナを配置するなどの管理が必要。このように、コンテナを動的に管理することをコンテナオーケストレーションという。
主な機能
- コンテナのスケジューリング・・・コンテナのあるべき状態を宣言することで、適切なリソース配置を行う
- インフラの抽象化・・・各クラウドリソースを抽象化する役割を担う
- コンテナのセルフヒーリング・・・たとえ障害が発生しても、ユーザーが要求した状態を維持し続ける自己修復機能
2-1-1 Kubernetesクラスタの全体像
オブジェクト
「オブジェクト」は、Kubernetes上に展開するコンテナ、ネットワーク、ストレージなどのリソースを抽象的な構成情報として表現したもの。オブジェクトは「マニフェスト」と呼ばれる厚生管理ファイルによって記述でき、Kubernetesの利用者はマニフェストをクラスタに渡すことで、リソースのあるべき状態を指示する。
コントロールプレーン
「コントロールプレーン」はオブジェクトとして定義されたリソースの状態をKubernetesクラスタ上に実現するための実装やプロセスのこと。
オブジェクトの概要
まずアプリケーションの開発者やクラスタ管理者は、マニフェストと呼ばれるYAML形式
のファイルにオブジェクトの内容を記述し、kubectl
というコマンドラインツールを使用してこれをクラスタに渡す。k8s
はコントロールプレーンの1つであるkube-apiserver
でこの指示を受け取り、オブジェクトを保存する。これにより、k8s
はオブジェクトの内容に従ってコンテナやリソースの状態をクラスタ上に維持しようとする。
コントロールプレーンの概要
k8s
のコントロールプレーンには以下の2つのグループがある。
- Control Plane Node: コントロールプレーンノード
- Worker Node: ワーカーノード
コントロールプレーンノード
は、マニフェスト
による要求を受付、コンテナやインフラリソースの変更をワーカーノードのコントロールプレーンに伝える役割を担う。
一方で、ワーカーノード
はコンテナを動作させるなど、実際のリソースをクラスタ上に実現する仕組みを備えている。基本はコントロールプレーンノード
からの指示に従ってコンテナの起動や削除を行うと同時に、自身のサーバー上で起動しているコンテナの状態を監視してコントロールプレーンノード
に通知している。
kube-apiserver
kube-apiserver
はk8s
オブジェクトに対する操作を受け付ける、REST APIのサーバー。オブジェクト情報のCRUDを行う。
認可
k8s
の対応している認可モジュールは以下の3つ。
- ABAC
- RBAC
- Webhook
この中でも、RBAC
の利用が推奨される。
RBAC
について
RBAC
は役割ベースのアクセス制御機能であり、誰がどのオブジェクトに対して、どのような操作が実行できるかを判断したもの。以下の3つの属性によって成り立っている。
- サブジェクト・・・Kubernetes APIにアクセスしたいユーザーやプロセスの認証対象
- リソース・・・操作対象のkubernetesオブジェクト。
- 操作・・・リソースに対して実行できる一連の操作。CRUD。
RBAC
の認可の流れ
k8s
では「リソース」と「操作」を合わせたものを「Role」というオブジェクトで扱う。そして、Roleを作成した後にサブジェクトとRoleを「RoleBinding」に関連付ける。サブジェクトとして指定されたユーザーやサービスアカウントはそのRoleに記述された操作が許可される。