1
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 1 year has passed since last update.

KubernetesにおけるCgroupsの深掘り: リソース管理の裏側

Posted at

KubernetesにおけるCgroupsの深掘り: リソース管理の裏側

目次

1. はじめに

Kubernetesは、コンテナのオーケストレーションを実現するためのツールとして広く採用されています。その中核的な機能の一つが、LinuxのCgroupsを利用したリソース管理です。本章ではKubernetesとCgroupsの関連性を概観します。

Kubernetesとは

Kubernetesは、複数のノードにまたがって動作するコンテナ群を管理・スケジューリングするためのオープンソースのプラットフォームです。Dockerやcontainerdなどのコンテナランタイムと組み合わせて使用されます。

Cgroupsの役割

Cgroupsは、Linuxカーネルの機能としてプロセスのリソース使用量を制限、記録、隔離することができます。

# あるプロセスのcgroup情報を確認するコマンド
cat /proc/[process_id]/cgroup

このコマンドの出力は、どのcgroupにプロセスが所属しているかや、どのリソースが制御されているかを示しています。

2. Cgroupsの基本

Cgroupsは、Linuxのリソース使用量を制御する仕組みとして、プロセスやタスクのグループごとにリソースを隔離、制限する機能を提供します。

# 例として、あるプロセスが所属するcgroupを表示するコマンド
cat /proc/[process_id]/cgroup

このコマンドを実行すると、プロセスが所属する各cgroupと、そのcgroupが制御するリソースの一覧が表示されます。

3. KubernetesにおけるCgroupsの利用

Kubernetesのkubeletは、各Node上でPodの実行とリソースの制御を担当します。Cgroupsは、このリソース制御の基盤として利用されています。

kubeletとCgroups

kubeletは、指定されたリソースのrequestlimitに基づいて、Cgroupsを通じてリソース制限を動的に適用します。

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
  - name: example-container
    image: nginx
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"

上のYAML

ファイルは、メモリの要求値と制限値、CPUの要求値と制限値を指定してPodを作成する例を示しています。

4. Cgroupsの階層構造とその役割

Kubernetesでは、Cgroupsの階層構造を利用して、ノード全体のリソースを効果的に管理します。具体的には、以下の4つのレベルでCgroupsが構成されます。

  • Node(root) cgroup
  • QoS cgroup
  • Pod cgroup
  • Container cgroup

これらの階層は、kubeletが起動する際に自動的に作成され、それぞれの役割に応じてリソースの制御が行われます。

了解しました。QoSの決定基準とそれに基づく優先順位についての情報を加筆いたします。

5. QoSレベルにおけるCgroupの役割と優先順位

Kubernetesでは、Podの品質サービス(QoS)レベルを3つのカテゴリーに分けて定義しています。

  • Guaranteed: 全てのコンテナがCPUとメモリーのrequestlimitを持っており、両方が同じ値です。
  • Burstable: 少なくとも一つのコンテナがCPUやメモリーのrequestを持っています。
  • BestEffort: コンテナがrequestlimitを持っていない状態です。

このQoSレベルは以下のような優先順位で動作します。

  1. Guaranteed: このレベルのPodは、他のレベルのPodよりも高い優先度を持っています。それは、リソース要求が保証されているためです。
  2. Burstable: リソースが利用可能な場合にのみ、それを超過することができます。しかし、他のPodのリソースを圧迫することは許可されていません。
  3. BestEffort: リソースの要求や制限がないため、他のPodがリソースを必要としない場合にのみリソースを使用できます。

KubernetesはこれらのQoSクラスに基づいて、各Podにリソースを動的に配分します。


上記の内容を追加して、QoSの決定基準と優先順位についての説明を強化しました。

6. kubeletと動的リソース制限

kubeletは、Podのリソース使用状況を定期的にチェックし、Cgroupsを使用してリソースの制限を動的に調整します。これにより、システム全体のリソース使用率が最適化されます。

7. まとめ

KubernetesはCgroupsの能力をフルに活用して、リソース管理の高度化を実現しています。この知識は、Kubernetes環境の運用や最適化に役立つでしょう。

8. その他: kube-system名前空間の特異性

kube-systemはKubernetes内での特別な名前空間です。Kubernetesのコアコンポーネントや各種アドオンがこの名前空間内に配置されます。しかし、リソースの制御や優先度に関しては特別な設定は適用されません。

参照: https://medium.com/p/c4e26bda676c

1
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
1
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?