GNU/Linux >> Linux の 問題 >  >> Linux

Linuxシステム管理者によるcgroupsの紹介

つまり、cgroupsと呼ばれるこのことを聞いたことがあるので、もっと知りたいと思っています。コンテナ化についての話を聞いているときに、おそらくあなたはそれについて言及しました。 Linuxのパフォーマンスチューニングを検討していたのかもしれませんし、ある日ファイルシステムをたまたまトラバースして/sys/fs/cgroupsを発見したのかもしれません。 。いずれにせよ、かなり長い間カーネルに組み込まれているこの機能についてもっと知りたいと思うでしょう。だから、座ってポップコーンを手に取り、(願わくば)今まで知らなかったかもしれないことを学ぶ準備をしてください。

cgroupsとは何ですか?

Websterの辞書はcgroupsを定義します として...冗談です。退屈な辞書の定義から始まる話を聞くのはいつも嫌いでした。代わりに、cgroupsの技術的な定義をわかりやすいものに抽出しようと思います。

Cgroupsは大きなトピックです。私はこの議論を4部構成のシリーズに分けました。この記事のパート1では、cgroupの基本的な概念について説明します。第2部では、CPUShareをさらに詳しく調べます。 「ハードウェイでcgroupを実行する」というタイトルのパート3では、cgroupの管理タスクについて説明します。最後に、パート4ではsystemdによって管理されるcgroupについて説明します。

ご存知かもしれませんが、Linuxカーネルは、システム上で確実に相互作用するすべてのハードウェアに責任があります。つまり、オペレーティングシステム(OS)がハードウェアを理解できるようにするコード(ドライバー)のビットだけでなく、特定のプログラムがシステムに要求できるリソースの数にも制限を設定します。これは、コンピュータが実行する可能性のあるすべてのアプリケーション間でシステムが分割する必要のあるメモリ(RAM)の量について話すときに最も簡単に理解できます。最も基本的な形式では、Linuxシステムはほとんどのアプリケーションを制限なく実行できます。これは、すべてのアプリケーションがうまく連携している場合、一般的なコンピューティングに最適です。しかし、プログラムにバグがあり、利用可能なすべてのメモリを消費し始めた場合はどうなりますか?カーネルには、メモリ不足(OOM)キラーと呼ばれる機能があります。その仕事は、OSがクラッシュすることなく機能し続けることができるように、十分なRAMを解放するためにアプリケーションを停止することです。

それは素晴らしいことだとあなたは言いますが、これはcgroupsと何の関係があるのでしょうか?さて、OOMプロセスは、システムがクラッシュする前の最後の防衛線として機能します。ある程度は便利ですが、カーネルはどのプロセスがOOMを生き残る必要があるかを制御できるため、そもそもどのアプリケーションがあまり多くのRAMを消費できないかを判断することもできます。

したがって、Cgroupはカーネルに組み込まれた機能であり、管理者がシステム上の任意のプロセスにリソース使用率の制限を設定できるようにします。一般に、cgroupsは以下を制御します:

  • プロセスごとのCPU共有の数。
  • プロセスごとのメモリの制限。
  • プロセスごとにデバイスI/Oをブロックします。
  • 別のアプリケーションがネットワークトラフィックルールを適用できるように、どのネットワークパケットが同じタイプとして識別されるか。

これら以外にもさまざまな側面がありますが、これらはほとんどの管理者が関心を持っている主要なカテゴリです。

Cgroupsの謙虚な始まり

コントロールグループ(cgroups)は、リソースをきめ細かく制御するためのLinuxカーネルメカニズムです。もともとは2006年にGoogleのエンジニアによって提案されましたが、cgroupは最終的に2007年頃にLinuxカーネルに統合されました。現在cgroupには2つのバージョンがありますが、2.6.24以降のカーネルにあるように、ほとんどのディストリビューションとメカニズムはバージョン1を使用します。メインラインカーネルに追加されたほとんどのものと同様に、最初は大きな採用率はありませんでした。バージョン2はこの傾向を継続しており、ほぼ5年間存在していますが、まだ広く展開されていません。

cgroupの採用を悩ませている問題の1つは、cgroupの存在と最新のLinuxシステムにおけるその部分についての知識が不足していることです。認識と採用が低いということは、カーネルインターフェースとの相互作用が不格好で、複雑であるか、まったく手動のプロセスであることを意味することがよくあります。これは、最初はcgroupsの場合でした。もちろん、1回限りのcgroupを作成するのはそれほど難しくありません。たとえば、cgroupsを中心としたツールが開発される前の初期の頃をシミュレートしたい場合は、一連のディレクトリを作成し、cgroupをマウントできます。 ファイルシステムを作成し、すべてを手動で構成し始めます。しかし、そのすべてに入る前に、理由について少し話しましょう。 cgroupsは、今日のLinuxエコシステムに不可欠です。

cgroupが重要な理由

Cgroupには、相互に密接に関連する4つの主要な機能があり、特にコンテナー化されたワークロードを実行している場合、最新のシステムでCgroupを非常に重要にします。

1。リソースの制限

前に触れたように、cgroupsを使用すると、管理者は、システムで実行されているプログラムがCPU、RAM、ブロックデバイスI / O、およびデバイスグループの特定の許容範囲内にとどまるようにすることができます。

:デバイスグループCGroupは、システムの包括的なセキュリティ戦略の重要なコンポーネントになる可能性があります。デバイスグループには、読み取り、書き込み、およびmknod のアクセス許可の制御が含まれます オペレーション。読み取り/書き込み操作はかなり自明なので、mknod を見てみましょう。 Linuxシステムの機能。

mknod 当初は、/dev/に表示されるすべてのものを取り込むように設計されていました 。これらは、ハードドライブ、Arduinoなどのデバイス用のUSBインターフェイス、ESP8266マイクロコントローラー、またはシステムに存在する可能性のあるその他のデバイスのようなものです。最近のほとんどのLinuxシステムはudevを使用しています この仮想ファイルシステムに、カーネルによって検出されたものを自動的に入力します。 mknod また、名前付きパイプを作成することにより、複数のプログラムが相互に通信できるようにします。この概念はこの説明の範囲を超えていますが、これにより、あるプログラムから別のプログラムへの情報の受け渡しが容易になることを理解するだけで十分です。とにかく、mknod 管理された環境では、管理者は制限を注意深く検討する必要があります。

2。優先順位付け

プロセスを必ずしも制限していないため、優先順位付けはリソース制限とは少し異なります。代わりに、利用可能なリソースの数に関係なく、 Xを処理すると言っているだけです。 Yを処理するよりも常にシステムに多くの時間を費やします 。

3。会計

Linuxのほとんどのエンタープライズバージョンでは、追加のリソース使用率のためにアカウンティングがデフォルトでオフになっていますが、特定のツリーのリソース使用率をオンにすると非常に役立ちます(これについては後で詳しく説明します)。したがって、どのcgroup内のどのプロセスがどのタイプまたはリソースを消費しているかを確認できます。

4。プロセス制御

cgroupsには冷凍庫と呼ばれる施設があります 。この機能を深く理解することはこの記事の範囲外ですが、フリーザーは特定のプロセスのスナップショットを取り、それを移動する機能と考えることができます。詳細については、カーネルのドキュメントを参照してください。

さて、これはどういう意味ですか?システム管理者の観点からすると、それはいくつかのことを意味します。

まず、コンテナテクノロジーを詳しく調べなくても、ワークロードの種類、アプリケーション、およびそれらが必要とするリソースを注意深く管理することで、単一のサーバーでより高い密度を実現できることを意味します。

第二に、それはあなたのセキュリティ態勢をかなり強化します。通常のLinuxインストールではデフォルトでcgroupsが使用されますが、プロセスに制限はありません。必要に応じて、デフォルトで制限を課すことができます。特定のユーザー、グループ、またはプロセスの特定のデバイスへのアクセスを制限することもできます。これにより、システムをさらにロックダウンできます。

最後に、cgroupを介してかなりの量のパフォーマンス調整を行うことができます。つまり、調整済みと組み合わせて、個々のワークロードに合わせて特別に調整された環境を作成できることを意味します。大規模な場合、または遅延の影響を受けやすい環境では、これらの調整は、サービスレベルアグリーメント(SLA)を満たすかどうかの違いを意味する可能性があります。

cgroupsはどのように機能しますか?

このディスカッションでは、 cgroups V1について説明します。 。バージョン2はRedHatEnterprise Linux 8(RHEL 8)で使用できますが、デフォルトでは無効になっています。 Kubernetes、OpenShift、Dockerなどのほとんどのコンテナーテクノロジーは、依然としてcgroupsバージョン1に依存しています。

cgroupは、カーネル内の特定のサブシステムを制御するためのメカニズムであることはすでに説明しました。デバイス、CPU、RAM、ネットワークアクセスなどのこれらのサブシステムは、コントローラーと呼ばれます。 cgroupの用語で。

各タイプのコントローラー(cpublkiomemory など)は、木のような構造に細分されます。各枝または葉には、独自の重みまたは制限があります。コントロールグループには複数のプロセスが関連付けられているため、リソースの使用率がきめ細かくなり、微調整が容易になります。

:各子は継承し、親cgroupに設定された制限によって制限されます。

上の図では、PID 1を持つことが可能であることがわかります。 memoryに 、disk i/o 、およびcpu 対照群。 cgroupはリソースタイプごとに作成され、相互に関連付けられていません。つまり、databaseを持つことができます グループはすべてのコントローラーに関連付けられていますが、グループは独立して扱われます。 GIDと同様に、これらのグループには、わかりやすい名前ではなく、作成時に数値が割り当てられます。内部的には、カーネルはこれらの値を使用してリソース割り当てを決定します。別の言い方をすれば、各cgroup名は、コントローラーに接続されると、コントローラーの名前に選択した名前を加えた名前に変更されると想定します。したがって、databaseというグループ memory内 コントローラは実際にはmemory-databaseと考えることができます 。したがって、databaseとは関係ありません。 コントローラに関連付けられたグループcpu わかりやすい名前はcpu-databaseと考えることができます 。

:これは非常に単純化されたものであり、基礎となるcgroupコードに関与しようとしている場合は技術的に正確ではありません。上記の説明は、理解を明確にするためのものです。

まとめ

これで、cgroupとは何か、およびcgroupがパフォーマンスの調整とセキュリティにどのように役立つかについてのアイデアが得られました。また、cgroupがコントローラーとどのように相互作用するかについてもよく理解できます。

この記事は、cgroupsに存在するすべてのコントローラータイプの内訳ではありません。その規模の何かは、適切に説明するために本全体を必要とします。次の記事では、CPUSharesが比較的複雑であり、システムの全体的な状態において重要であるため、CPUSharesについて説明します。他のコントローラーも同様に機能します。したがって、CPUコントローラーから学んだ教訓を取り入れて、残りのほとんどのcgroupコントローラーに適用できるはずです。

パート3では管理タスクを検討し、パート4ではsystemdがcgroupとどのように相互作用するかをまとめることを忘れないでください。

[コンテナを使い始めますか?この無料コースをチェックしてください。コンテナ化されたアプリケーションのデプロイ:技術的な概要。 ]


Linux
  1. KaliLinuxでのNmapの概要

  2. Linuxでホスト名を変更する方法

  3. Linuxシステム管理者になる:販売からシステム管理者まで

  1. Linuxパーミッション:chmodの紹介

  2. 私の5つのお気に入りのLinuxシステム管理者ツール

  3. Linuxシステム管理のためのAnsibleの役割の簡単な紹介

  1. Linux用のbpftraceの紹介

  2. Linuxファイルシステムの概要

  3. KaliLinuxのシステム要件