9
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

WESEEKAdvent Calendar 2020

Day 9

Kubernetes と Controller

Last updated at Posted at 2020-12-09

この記事は WESEEK Advent Calendar 2020 9日目の記事です。

こんにちは! WESEEK, Inc. で長期インターンをさせていただいております [yamagai] (https://twitter.com/yamagai_0919)と申します。
今月でインターン開始から半年になります。時の流れは早いものですね。。。

今回は、業務で使っている Kubernetes の設計思想の一部に触れてみようと思います!

Kubernetesの構成要素

まずは、Kubernetesクラスタの主なコンポーネントについて簡単に説明します。

components-of-kubernetes.png
引用元(図):https://kubernetes.io/ja/docs/concepts/overview/components/

  • kube-apiserver
    • Kubernetes APIを外部に提供するコンポーネントで、kubectl コマンドの叩き先。
  • etcd
    • Kubernetesの全てのクラスター情報の保存場所。ここにアクセス出来るのはkube-apiserverのみ。
  • kube-controller-manager
    • DeploymentやServiceなどのオブジェクトを管理する複数のControllerプロセスを単一のプロセスとして実行するコンポーネント。
  • cloud-controller-manager
    • kube-controller-managerのうち、実行環境がクラウドの場合のみに使用するControllerプロセスを実行するコンポーネント。
  • kube-scheduler
    • どのノードにどのPodを立ち上げるかを管理してくれるコンポーネント。
  • kubelet
    • コンテナが正常に実行されている状態を保ってくれるコンポーネント。
  • kube-proxy
    • Serviceリソースから作られるエンドポイントをもとにiptablesの設定をしてくれるコンポーネント。

公式ドキュメントにさらに詳しく記載があるのでぜひご覧ください!

今回は、これらの中でも kube-controller-manager が管理する Controller というものに注目します。

その前に基本的なKubernetesのアーキテクチャを再確認しましょう。

Kubernetesのアーキテクチャ

Kubernetesはよく宣言的アーキテクチャと言われます。

  • マニフェストファイルなどでDeploymentなどのリソースのあるべき状態を宣言する
  • 各種Controller がそれらのリソースを管理してくれる

という仕組みになっています。

では、次に Controller について見ていきます。

Controller とは

Controller は Kubernetes のリポジトリではここで定義されています。

Controller とは「リソースの管理をしてくれるプロセス」と書きました。
Controller (1).png

ここでいう管理とは画像のように、

  1. Pod がなんらかの理由で死ぬ
  2. Controller がそれを見つける
  3. Controller がマニフェスト通りの状態になるように調整する

という一連の流れを担うことを指します。

簡単にいうと、「あるべき状態を維持してくれる」ということですね!

Controller の設計思想

基本原理として、**Reconciliation Loop(突き合わせループ)**という考え方があります。

スクリーンショット 2020-12-09 20.40.26.png
引用元(図):https://blog.kubeflow.org/mlops/

画像には3つの工程が書いてありますが、これは上記でも説明した Controller の動きと同じですね!

ちなみに、この3つの工程の一つ一つの中でも Kubernetesのコンポーネントたちが様々な処理をしています。
内部の詳しい処理については、今後コードも載せつつ記事に出来たらと思います!

なにはともあれ、Controller はこのReconciliation Loopによって常に理想の状態を維持してくれています。

我々人間も Controller を見習うべきかもしれませんね。。。

まとめ

  • Kubernetes は様々なコンポーネントで成り立っている
  • 中でも kube-controller-manager が管理する Controller は重要な役割を果たしている
  • Controller の基本原理として、**Reconciliation Loop(突き合わせループ)**という考え方がある

※この記事は WESEEK Tips wiki に 2020/12/09 に投稿された記事の転載です。
Tips wiki では、IT企業の技術的な情報やプロジェクトの情報を公開可能な範囲で公開してます。

参考リンク

9
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?