「Oracle Cloud Hangout Cafe (OCHaCafe)」ダイジェスト2 1

Kubernetesコンポーネント

Kubernetesコンポーネント

ここからは、Kubernetesの各コンポーネントを見ていきます。

概要説明となりますので、詳細はオフィシャルドキュメント「Control Plane & Node Official Documentation」を参照してください。

Control Plane & Node

Kubernetesには、大きな構成要素としてControl PlaneとNodeがあります。Control PlaneはKubernetesクラスタの「頭脳」にあたります。クラスタの状態を監視してリソースを管理し、クラスタ全体を制御します。以下のコンポーネントがあります。

  • kube-apiserver
  • kube-scheduler
  • kube-controller-manager
  • cloud-controller-manager
  • etcd

Nodeは、アプリケーションコンテナが実際に稼働する場所です。以下のコンポーネントがあります。

  • kube-proxy
  • kubelet
  • container runtime

Control Plane & Node

最初に、Control Planeの各コンポーネントを見ていきます。

Control Plane

コンポーネント 概要
kube-apiserver KubernetesへのAPIリクエストをRESTで受け付けるフロントエンドサーバ
オブジェクトのCRUDやユーザおよびサービスアカウントの認証認可、リクエストの制御を行うAdmission Control機能がある
kube-scheduler Podを最適なNodeに配置する
kube-controller-manager クラウドプロバイダーの機能と連携して、ロードバランサやディスクボリュームなどのリソースを管理する
cloud-controller-manager Kubernetesクラスタのリソース状態を管理して、要求される各リソースの状態(あるべき姿)を維持する
etcd Kubernetesクラスタに登録される全ての情報を保存するデータストア(KVS)

次に、Nodeの各コンポーネントを見ていきます。

Node

コンポーネント 概要
kube-proxy 各Nodeで動作するServiceオブジェクトが持つ仮想的なCluster IPや、NodePort宛のトラフィックをPodへ正常に転送するネットワークプロキシの役割を担う
kubelet NodeへのPodのスケジューリングを監視して、Container Runtimeを利用してPodの生成、更新、破棄などを実行
container runtime kubeletによるコンテナイメージの取得とコンテナの作成、更新、破棄などを実行
Kubernetesはコンテナランタイムの取替が可能なため、containerd、cri-o、gVisorなどを利用できる

Pod

Kubernetesは、コンテナをPodという単位で管理します。Podの主な特性は以下です。

  • 1つまたは複数のコンテナをデプロイする最小単位
  • Pod内のコンテナは同じホスト名とIPアドレスを持つ
  • Pod内のコンテナは同じポート番号を持つことはできない
  • Pod内のコンテナはローカルホスト通信
  • Pod内のコンテナは同じNode上で稼働、Nodeをまたぐことはできない

Pod

下図は、Podが作成されるまでの各コンポーネントの役割です。

Podができるまでの仕組み

ReplicaSet & Deployment

ReplicaSet
ReplicaSetはPodのレプリカを作成して、マニフェストファイルで定義されたレプリカ数(replicas)を保証し、定義された数のPodを常に起動させる仕組みです。

ReplicaSet

ReplicaSetはNodeやPodに障害が発生した場合、定義されたレプリカ数を保証するために別ノードで復旧、Kubernetesのセルフヒーリング機能を担います。

ReplicaSet

ReplicaSet Official Documentation

Deployment
DeploymentはReplicaSetの作成、更新、履歴管理、ローリングアップデート、ロールバックなどを行います。

Deployment

Deployment Official Documentation

下図は、Deployment、ReplicaSet、Podの関係性を表したものです。PodをReplicaSetが管理して、DeploymentがReplicaSetを管理します。

Deployment & ReplicaSet & Podの関係

次に、セルフヒーリングの仕組みを見ていきます。下図は、セルフヒーリング時の各コンポーネントの動きです。

セルフヒーリングの仕組み

Kubernetesは、マニフェストの内容をあるべき理想の形(Desired State)として常にその状態であるかを監視し、相違がある場合はReconciliation Loop(調整ループ)により自動修復します。

Reconciliation Loop(調整ループ)

Reconciliation Loop(調整ループ)は、Controller内で実行されている理想とするあるべき姿に収束させるループ機能です。

Reconciliation Loop(調整ループ)

Reconciliation Loopの例を見ていきます。3個のNginxコンテナ(Pod)を起動することを理想とします。

Reconciliation Loop(調整ループ)

2個のコンテナ(Pod)しか起動していない場合の例は下図のようになります。

Reconciliation Loop(調整ループ)

【Diff】1個のコンテナ(Pod)が足りない

Reconciliation Loop(調整ループ)

【Act】1個のnginxのコンテナ(Pod)を作成する

Reconciliation Loop(調整ループ)

このように、Reconciliation Loop(調整ループ)により、Kubernetesでは自律的にマニフェストの定義に収束するように調整します。

Service

Serviceは、クラスタ内外からのリクエストをPodにアクセスするためのルーティングやDNS機能を提供します。以下が主な機能です。

  • ClusterIP
  • NodePort
  • LoadBalancer

Service Official Documentation

ClusterIP
ClusterIPは、Kubernetesにおける内部通信用のサービスタイプです。クラスタ内のアプリケーション間で通信できます。

ClusterIP

NodePort
NodePortはNodeのIPアドレスに公開ポート番号を開放して、クラスタ外部からのアクセスを受け付けます。Service はkube-proxyと連携して各ノードにポートを開き、ノード横断でPodにリクエストを送信します。

NodePort

LoadBalancer
クラスタ外のロードバランサと連携して外部からのアクセスを受け付けます。クラウドプロバイダーが管理するクラウドリソースと連携して、外部ロードバランサーを自動的にプロビジョニングします。

LoadBalancer

Ingress

Ingressは外部からのHTTP(S)トラフィックを内部Serviceにルーティングして、レイヤ7のロードバランシングを提供します。また、パスベースルーティング、SSL/TLS終端、名前ベースのバーチャルホスティングなども実装しています。

Ingress

Ingress Official Documentation

Volume & PersistentVolume & PersistentVolumeClaim

Volume
Volumeはコンテナ側からマウント可能なボリューム領域で、保存領域の実態をポイントします。あらかじめ用意された利用可能なVolumeをPodのマニフェストファイルから直接指定して利用できます。

Volume

Volumes Official Documentation

PersistentVolume & PersistentVolumeClaim
PersistentVolumeは、永続ボリュームと連携してKubernetesクラスタにボリュームを登録するリソースです。

PersistentVolumeClaimは、PersistentVolumeをアサインするリソースです。PodからPersistentVolumeを利用する場合、PodのマニフェストにPersistentVolumeClaimを定義して利用します。

PersistentVolume

下図は、PersistentVolumeとPersistentVolumeClaim利用手順の一例です。

利用手順

PersistentVolumes & PersistentVolumeClaims Official Documentation

ConfigMap & Secret

ConfigMap
ConfigMapは環境変数、引数等の設定情報(Key-Value保持)をコンテナに渡すために使用します。Volumeとしてコンテナにマウントし、コンテナからはファイルとして認識できます。

ConfigMap

ConfigMaps Official Documentation

Secret
Secretは、機密性の高いデータ(ID/Password情報、SSL/TLS証明書、アクセストークン等)を保持する上で使用するVolumeです。

Secret

Secretはbase64でエンコードされていますが、暗号化はされていません。GitリポジトリにSecretの設定が定義されているマニフェストファイルをアップロードするのはセキュリティリスクがあるため、マニフェストファイルを暗号化するオープンソースソフトウェアやベンダーのサービス、プロダクトを利用します。以下はオープンソースソフトウェアです。

Secrets Official Documentation

Label & Namespace

Label & Label Selector
LabelとSelectorは、Kubernetes上のオブジェクトにタグのような属性を設定してグループ化したり、特定のオブジェクトを抽出できるようにする仕組みです。

LabelはKey/Valueペアの文字列で、Podなどのオブジェクトに任意のメタ情報を付与して識別用途として利用できます。Label Selector は、Label設定値の条件に該当するものをグループとして識別用途で利用できます。

Labels and Selectors Official Documentation

Namespace
Namespaceは、複数のユーザ間で(リソース割り当てを介して)クラスタリソースを分割する仕組みです。Namespace の主な特性は以下です。

  • 1ユーザーに1個のNamespace
  • Namespaceにおけるリソース名はNamespace内で一意である必要があり、Namespace間では一意である必要はない
  • Namespace毎にリソースの利用上限を設定可能

Namespace

Namespaces Official Documentation

この記事のキーワード

この記事をシェアしてください

人気記事トップ10

人気記事ランキングをもっと見る