クラウドネイティブで行こう
[IT研修]注目キーワード
Python
UiPath(RPA)
最新技術動向
Microsoft Azure
Docker
Kubernetes
第4回 kubernetesとは
(宮崎悟)
2022年10月
前回は、コンテナを操作するために使用する、コンテナオーケストレーションのdocker compose/swarm について説明しました。今回は、コンテナオーケストレーションのデファクトスタンダードであるkubernetesについて説明します。
kubernetes
kubernetesは複数ホスト内で、複数のコンテナを制御するソフトウェアです。コンテナの設定、実行、運用を自動的かつ統合的に実行するため、コンテナオーケストレーションツールと呼ばれます。kubernetesは、ホストのことをノード(Node)と呼び、複数のノードで構成可能です。また、kubernetesが扱うコンテナの最小単位であるポッド(Pod)は、1つ以上のコンテナの組み合わせで、Podは1つのローカルIPアドレスを持ちます。kubernetesは、ノード上で複数のポッドを起動することでサービスを提供し、自動的にスケールアウト・インすることで可用性のあるサービスを提供します。
以下は、kubernetesのクラスタの概念図です。
コントロールプレーン
kubernetesを管理するのは、コントロールプレーン(Control Plain)と呼ばれるポッド群です。コントロールプレーンは、クラスタ全体のポッドのスケージューリングや、イベントの検出・応答を行います。コントロールプレーン自体もポッドで構成されますが、重要度が高いため、通常のポッドとは別のノードで動作させることが多いです。コントロールプレーンを動作させるノードをマスターノードと呼び、それ以外をワーカーノードと呼びます。マスターノードは、その重要性から高可用性クラスター構成を取ることができます。
コントロールプレーンは、以下の要素から構成されます。
- APIサーバ
APIサーバ は、kubernetes APIを外部に提供するコンポーネントで、コントロールプレーンのフロントエンドの役割を持ちます。APIサーバは、スケールアウトすることでAPIのトラフィックを分散できます。
- etcd
クラスタ内の構成要素や設定情報を保存する、一貫性を持つキーバリューストアです。
- スケジューラ
新しく作成されたPodを監視し、最適なNodeに割り当てます。
- コントローラマネージャー
以下のコントローラプロセスを実行します。
- ノードコントローラ
ノードがダウンした場合の、通知・対応を行います
- レプリケーションコントローラ
設定されたポッド数を維持します。
- エンドポイントコントローラ
kubernetes 外部と接続するためのエンドポイントオブジェクトを作成します。
- サービスアカウント・トークンコントローラ
kubernetes が使用する名前空間に対する、デフォルトアカウントとAPIアクセストークンを作成します。
- クラウドコントロールマネージャー
クラウドプロバイダが提供するリソースをAPI経由で制御します。クラウドコントロールマネージャは、主にクラウドプロバイダから提供されます。
ノードコンポーネント
各ノードには、ノードコンポーネントと呼ばれるポッドが実行されます。ノードコンポーネントは、kubernetes の実行環境を提供し、稼働中のポッドを管理します。
- kubelet
クラスタの各ノードで実行されるエージェントです。kubernetes が管理しているポッドを管理し、正常に実行されていることを保証します。kubelet は、kubernetesで管理されていないコンテナを管理しません。
- kube-proxy
クラスタの各ノードで実行されるネットワークプロキシです。ノードのネットワークルールを管理します。ネットワークルールに従って、クラスタの内部・外部からポッドへの通信を可能にします。kube-proxyは、OSのパケットフィルタリング層を優先して使用します。
- コンテナランタイム
コンテナを実行するソフトウェアです。kubernetesでは、kubernetes CRI(Container Runtime Interface)に沿って実装されたコンテナランタイムを使用します。代表的なものとして、docker、containerd、CRI-Oがあります。
アドオン
アドオンは、kubernetesクラスタの機能を拡張します。アドオンにはいくつかの種類があります。
- ネットワークとネットワークポリシー
CNI(Container Network Interface)に沿って実装されており、L2からL7までのスイッチングハブの機能を持ちます。実装により機能は異なりますが、ロードバランサや、ノード間通信の暗号化などの機能を含みます。
- クラスタDNS
ポッド向けの内部DNSサーバで、ポッドのIPアドレスがすべて管理されます。
- Web UI
ダッシュボードとしてWeb UIを提供し、クラスタ、クラスタ内で実行中のポッド、アプリケーションについて管理できます。
終わりに
今回は、kubernetesについて説明しました。現在のコンテナ実行環境は、kubernetesを使用したものが多くなっています。クラウドネイティブでは必須の知識で、公式ドキュメント(日本語)も存在するのでご参照ください。
次回は、マイクロサービスの概要について説明します。次回をお楽しみに。
CTC教育サービス 関連コース
[IT研修]注目キーワード
Python
UiPath(RPA)
最新技術動向
Microsoft Azure
Docker
Kubernetes
「クラウドネイティブで行こう」コラム一覧へ
コラム一覧へ