※当サイトの記事には、広告・プロモーションが含まれます。

Kubernetesでコンテナランタイムとcgroup driverの設定などの対応が分り辛い...

www.itmedia.co.jp

 米ノースウェスタン大学などに所属する研究者らが発表した論文「Quantum teleportation coexisting with classical communications in optical fiber」は、世界中のインターネット網で使われている既存の光ファイバーケーブルを、量子通信にも利用できる可能性が示された研究報告である。

「光通信」と「量子通信」の同時伝送に成功、世界初 インターネットを邪魔せず同じケーブル内で量子テレポーテーション:Innovative Tech - ITmedia NEWS

⇧ amazing...

Kubernetesでcontainerdとkubeletが利用するcgroup driverが異なる罠

前回、

ts0818.hatenablog.com

Kubernetes環境が動作しなかったのだが、

qiita.com

⇧ 上記サイト様によりますと、「コンテナランタイム」によって「cgroup driver」が異なることで、KubernetesAPI Serverに関する接続で問題が起こるということらしい。

コンテナランタイムとcgroup driver

Kubernetesの公式のドキュメントによりますと、

kubernetes.io

⇧ とありますと。

「CRI(Container Runtime Interface)」という仕様に準拠した「コンテナランタイム」のインストールが必要なのだが、「コンテナランタイム」には種類がありますと。

「CRI(Container Runtime Interface)」はというと、

github.com

What is CRI?

CRI (Container Runtime Interface) consists of a specifications/requirements (to-be-added), protobuf API, and libraries for container runtimes to integrate with kubelet on a node. The CRI API is currently in Alpha, and the CRI-Docker integration is used by default as of Kubernetes 1.7+.

https://kubernetes.io/ja/docs/setup/production-environment/container-runtimes/

⇧イメージしにくい...

「kubelet」で「コンテナランタイム」を操作するための「protobuf API」や「libraries」、仕様/要件などを定義したものが、「CRI(Container Runtime Interface)」ということらしい。

Kubernetes」における「コンテナランタイム」はというと、

kubernetes.io

kubernetes.io

kubernetes.io

⇧ 上図のような構成になっているらしい。

Kubernetes」においては「kubelet」で「コンテナランタイム」にアクセスしていますと。

で、「cgroup driver」はというと、

kubernetes.io

⇧ とありますと。

で、「cgroup」はというと、

cgroups (control groups) とは、プロセスグループのリソース(CPU、メモリ、ディスクI/Oなど)の利用を制限・隔離するLinuxカーネルの機能。"process containers" という名称で Rohit Seth が2006年9月から開発を開始し2007年に cgroups と名称変更され、2008年1月に Linux カーネル 2.6.24 にマージされた。

https://ja.wikipedia.org/wiki/Cgroups

名前空間の隔離

技術的には cgroups の一部ではないが、関連する機能として、名前空間の隔離があり、グループ内のプロセスから他のグループのリソースを見えないようにすることができる。例えば、PID 名前空間を使うとそれぞれの名前空間ごとに重複したプロセス番号を割り振ることが可能になる。マウント、UTS、ネットワーク、SysV IPC などの名前空間が利用可能。もし、"ns" cgroup がマウントされている場合、それぞれの名前空間は cgroup 階層構造内で新しいグループを作る。

https://ja.wikipedia.org/wiki/Cgroups

利用法

cgroups とは、同じ基準で集められたプロセスの集合である。グループは階層構造を持ち、それぞれのグループは親グループの制限を引き継ぐ。カーネルは複数のコントローラ(サブシステム)に cgroup のインターフェイスを通じてアクセスできる

https://ja.wikipedia.org/wiki/Cgroups

⇧ とあるのだが、「cgroup」と「cgroups」の関係がいまいち分からない...

Kubernetesでコンテナランタイムとcgroup driverの設定などの対応が分り辛い...

で、

kubernetes.io

⇧ 公式のドキュメントによりますと、

  1. kubeletの設定
  2. コンテナランタイムの種類
  3. cgroupのバージョン
  4. cgroup driverの種類
  5. cgroupの設定

あたりを考慮する必要が出てくるっぽいのだが、関係性がサッパリ分からないので、ChatGPTに質問してみたところ、以下のような回答が返ってきた。

No コンテナランタイム cgroup 設定ファイル 関連設定
バージョン ドライバー
1 Docker Engine v1 cgroupfs

/etc/docker/daemon.json

"exec-opts": ["native.cgroupdriver=cgroupfs"]

2 Docker Engine v2 systemd

/etc/docker/daemon.json

"exec-opts": ["native.cgroupdriver=systemd"]

3 containerd v1 cgroupfs

/etc/containerd/config.toml

SystemdCgroup = false

4 containerd v2 systemd

/etc/containerd/config.toml

SystemdCgroup = true

5 cri-o v1 cgroupfs

/etc/crio/crio.conf

cgroup_manager = "cgroupfs"

6 cri-o v2 systemd

/etc/crio/crio.conf

cgroup_manager = "systemd"

7 Mirantis Container Runtime v1 cgroupfs

/etc/mcr/config.json

"exec-opts": ["native.cgroupdriver=cgroupfs"]

8 Mirantis Container Runtime v2 systemd

/etc/mcr/config.json

"exec-opts": ["native.cgroupdriver=systemd"]

9 kubelet v1 cgroupfs

/var/lib/kubelet/config.yaml

cgroupDriver: cgroupfs

10 kubelet v2 systemd

/var/lib/kubelet/config.yaml

cgroupDriver: systemd

「幻覚(ハルシネーション)」な回答なのか、正確な回答なのかが分らないのだが、少なくとも、前回の「kubeadm」による「Kubernetes」環境の構築で「Kubernetes」環境が動作しなかったところを見ると、設定が関わってくるとは思うのだけど、公式のドキュメントが曖昧なこともあって、どの設定ファイルをどういう設定にすれば正解なのかが分らなさ過ぎる...

そもそも、「kubeadm」って「Kubernetes」環境の構築を手軽にしてくれるツールじゃないのかね?

公式のドキュメントがイケてなさ過ぎる気がして致し方無い...

毎度モヤモヤ感が半端ない…

今回はこのへんで。