SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Developers Summit 2024 セッションレポート(AD)

アーキテクチャから読み解くKubernetes~Controllerの仕組み~

【15-A-6】アーキテクチャから学ぶKubernetesの全体像

  • このエントリーをはてなブックマークに追加

Kubernetes Controllerの仕組み

 次はKubernetesがどのようにControllerを利用しているのかを見ていこう。

 先述したように、コントロールプレーンには「kube-controller-manager」と「cloud-controller-manager」がある。基本は前者でControllerを大量(大抵30〜40個)に実行している。後者はKubernetes実行基盤(クラウド)と何らかの連携するためのControllerになる。例えばクラスタに参加しているワーカーノードにノードのラベルを設定するとか、クラウド側のロードバランサーと連携するなどだ。

 前者の「kube-controller-manager」では、実際にどのようなものがあるか見ていこう。Pod関連のControllerには下図のようなものがある。

Pod関連 Controller
Pod関連 Controller

 例えばKubernetesでPodをデプロイする時なら、図の左上から下に向かって処理が流れていく。Deploymentというリソースが作られると、deployment-controllerがReplicaSetを作る。続いてReplicaSetのリソースを監視しているreplicaset-controllerがPodのリソースを作る。

 実際はローリングアップデートなどで複雑になるものの、基本的にはこのような数珠つなぎでいろんな機能を実現している。他にもDaemonSetやStatefulSetのような他リソース管理でも対応するControllerがいて、Jobを実行するCronJobリソースに対しても対応するControllerがいる。なおControllerとリソースは必ずしも1対1ではなく、1つのリソースに対して複数のControllerが働くこともある。

 今度はkube-proxy、ワーカーノードで動作するコアコンポーネントの1つ。主にServiceリソースとEndpointSliceリソースを基にネットワーク設定を行い、Serviceのエンドポイントにアクセスした際にPodにリクエストが届くようにする。動作モードは3種類あり、デフォルトはiptablesとなる。他にはipvsと、Windows用のkernelspaceがある。なおIPv4とIPv6のデュアルスタックもサポートされている。

 kube-proxyは主にNATの設定を行う。外部ネットワークからパケットを受信すると、まずはNATのPREROUTINGが動き、KUBE-SERVICESというkube-proxyが設定するチェーンにジャンプし、CNI(Container Network Interface)プラグインによりPodに割り当てられる。

iptablesが設定するNAT設定によるパケット処理フローの例
NAT設定によるパケット処理フローの例

 iptablesの設定の流れは下図のようになる。先述したEndpointSlice(画面上、右から2つ目のリソース)があり、これを監視しているendpointSliceConfigがサービスリソースの変更やエンドポイントサービスの変更を検知すると、それをトリガーにproxier.syncRunnerなどが次々に呼ばれてiptables設定が適切になるように調整される。

Service/EndpointSliceリソースを元にControllerによってiptablesの設定を行う
Service/EndpointSliceリソースを基にControllerによってiptablesの設定を行う

 こうした仕組みがあるため、もし手動でiptablesの設定が書き換えられたとしても、たとえ壊されたとしても、さほど時間かからず自動的に修復される。Kubernetesにおけるあるべき状態を維持する「セルフヒーリング」と呼ばれるものは、このような形で成り立っている。

次のページ
イベント駆動でリソースを管理するkubelet、ボリュームを利用可能にするCSI Driver

関連リンク

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Developers Summit 2024 セッションレポート連載記事一覧

もっと読む

この記事の著者

加山 恵美(カヤマ エミ)

フリーランスライター。茨城大学理学部卒。金融機関のシステム子会社でシステムエンジニアを経験した後にIT系のライターとして独立。エンジニア視点で記事を提供していきたい。EnterpriseZine/DB Onlineの取材・記事や、EnterpriseZine/Security Onlineキュレーターも担当しています。Webサイト:http://emiekayama.net

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

丸毛 透(マルモ トオル)

インタビュー(人物)、ポートレート、商品撮影、料理写真をWeb雑誌中心に活動。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

CodeZine編集部(コードジンヘンシュウブ)

CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

提供:株式会社スリーシェイク

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/19131 2024/04/22 12:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング