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

systemdを使用したcgroupの管理

4部構成のcgroups記事シリーズのこの最終回では、cgroupとsystemdの統合について説明します。シリーズのパート1、2、3も必ずチェックしてください。

systemdを使用したCgroups

デフォルトでは、systemdはsystem.sliceの下に新しいcgroupを作成します 監視するサービスごとに。 OpenShift Control Planeホストに戻り、systemd-cglsを実行します は、system.sliceの下にある次のサービスを示しています (簡潔にするために出力は切り捨てられます):

└─system.slice
  ├─sssd.service
  ├─lvm2-lvmetad.service
  ├─rsyslog.service
  ├─systemd-udevd.service
  ├─systemd-logind.service
  ├─systemd-journald.service
  ├─crond.service
  ├─origin-node.service
  ├─docker.service
  ├─dnsmasq.service
  ├─tuned.service
  ├─sshd.service
  ├─NetworkManager.service
  ├─dbus.service
  ├─polkit.service
  ├─chronyd.service
  ├─auditd.service
    └─[email protected]

systemdサービスファイルを編集することで、この動作を変更できます。 systemdを使用したcgroup管理に関しては、次の3つのオプションがあります。

  • サービスファイル自体の編集。
  • ドロップインファイルの使用。
  • systemctl set-propertyの使用 コマンド。ファイルを手動で編集するのと同じですが、systemctl 必要なエントリを作成します。

これらについては、以下で詳しく説明します。

サービスファイルの編集

ユニットファイル自体を編集してみましょう。これを行うために、スクリプトを実行する非常に単純なユニットファイルを作成しました:

[Service]
Type=oneshot
ExecStart=/root/generate_load.sh
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

bashスクリプトには2行しかありません:

#!/bin/bash
/usr/bin/cat /dev/urandom > /dev/null &

systemd-cglsの出力を調べるとき 、新しいサービスがsystem.sliceの下にネストされていることがわかります (出力は切り捨てられます):

└─system.slice
  ├─cat.service
  ├─tuned.service
  ├─sshd.service
  ├─NetworkManager.service
  ├─sssd.service
  ├─dbus.service
  │ └─[email protected]
  └─systemd-logind.service

systemdサービスファイルに次の行を追加するとどうなりますか?

Slice=my-beautiful-slice.slice

systemd-cglsの出力 何か不思議なことを示しています。 cat.service ファイルが深くネストされました:

Control group /:
├─my.slice
│ └─my-beautiful.slice
│   └─my-beautiful-slice.slice
│     └─cat.service
│       └─4010 /usr/bin/cat /dev/urandom

どうしてこれなの?答えは、systemdがネストされたcgroupを解釈する方法と関係があります。子は次の方法で宣言されます:-.slice 。 systemdは役立つように努めているため、親が存在しない場合は、systemdが親を作成します。アンダースコアを使用した場合_ ダッシュの代わりに- 結果はあなたが期待したものだったでしょう:

Control group /:
├─my_beautiful_slice.slice
│ └─cat.service
│   └─4123 /usr/bin/cat /dev/urandom

ドロップインファイルの使用

systemdのドロップインファイルの設定は非常に簡単です。 /etc/systemd/systemにあるサービスの名前に基づいて適切なディレクトリを作成することから始めます。 。 cat内 たとえば、次のコマンドを実行します。

# mkdir -p /etc/systemd/system/cat.service.d/

これらのファイルは、好きなように整理できます。これらは番号順に基づいて動作するため、構成ファイルには10-CPUSettings.confのような名前を付ける必要があります。 。このディレクトリ内のすべてのファイルのファイル拡張子は.confである必要があります systemctl daemon-reloadを実行する必要があります これらのファイルの1つを調整するたび。

異なる構成を分割する方法を示すために、2つのドロップインファイルを作成しました。 1つ目は00-slice.confです 。以下に示すように、catの個別のスライスのデフォルトオプションを設定します サービス:

[Service]
Slice=AWESOME.slice
MemoryAccounting=yes
CPUAccounting=yes

もう1つのファイルは、CPUSharesの数を設定し、10-CPUSettings.confと呼ばれます。 。

[Service]
CPUShares=256

この方法が機能することを示すために、同じスライスに2番目のサービスを作成します。プロセスを区別しやすくするために、2番目のスクリプトは少し異なります。

#!/bin/bash
/usr/bin/sha256sum /dev/urandom > /dev/null &

次に、catのコピーを作成しました。 ファイル、スクリプトの置き換え、CPUShares値の変更:

# sed 's/load\.sh/load2\.sh/g' cat.service > sha256sum.service
# cp -r cat.service.d sha256sum.service.d
# sed -i 's/256/2048/g' sha256sum.service.d/10-CPUSettings.conf

最後に、デーモンをリロードしてサービスを開始します:

# systemctl daemon-reload
# systemctl start cat.service
# systemctl start sha256sum.service

[読者も気に入りました:ルートレスのPodmanコンテナの舞台裏ではどうなりますか? ]

topからの出力を表示する代わりに 、今がsystemd-cgtopを紹介する良い機会です 。通常のtopと同じように機能します ただし、スライスごとの内訳と、各スライスのサービスごとの内訳が表示されます。これは、システムでcgroupを一般的にうまく利用しているかどうかを判断するのに非常に役立ちます。以下に示すように、systemd-cgtop は、システム全体の一部としての特定のスライス内のすべてのサービスの集計と、スライス内の各サービスのリソース使用率の両方を示しています。

systemctlset-propertyの使用

cgroupsの構成に使用できる最後の方法は、systemctl set-propertyです。 指図。基本的なサービスファイルmd5sum.serviceから始めます :

[Service]
Type=oneshot
ExecStart=/root/generate_load3.sh
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
Slice=AWESOME.slice

[Install]
WantedBy=multi-user.target

systemctl set-propertyの使用 コマンドはファイルを/etc/systemd/system.controlに配置します 。これらのファイルは手動で編集しないでください。すべてのプロパティがset-propertyによって認識されるわけではありません コマンドなので、Slice 定義はサービスファイル自体に入れられました。

ユニットファイルを設定してデーモンをリロードした後、systemctlを使用します 次のようなコマンド:

# systemctl set-property md5sum.service CPUShares=1024

これにより、/etc/systemd/system.control/md5sum.service.d/50-CPUShares.confにドロップインファイルが作成されます。 。内容について知りたい場合は、お気軽にファイルをご覧ください。これらのファイルは手動で編集するためのものではないので、私はそれらに時間を費やすことはありません。

次のコマンドを実行して、変更が有効になっているかどうかをテストできます。

systemctl start md5sum.service cat.service sha256sum.service

下のスクリーンショットにあるように、変更は成功したように見えます。 sha256sum.service md5sum.serviceが2048CPUSharesに設定されている間、 1024です。最後に、cat.service 256があります。

[セキュリティについて考えていますか?ハイブリッドクラウドのセキュリティを強化し、ビジネスを保護するためのこの無料ガイドをご覧ください。 ]

まとめ

うまくいけば、あなたは私たちの旅を通して一緒に何か新しいことを学びました。取り組むべきことがたくさんあり、cgroupsで可能なことの表面をかろうじてかじっただけでした。 cgroupsは、システムを正常に保つために果たす役割の他に、「多層防御」戦略にも関与します。さらに、cgroupは、コンテナ化されたプロセスの適切な実行を支援する、最新のKubernetesワークロードにとって重要なコンポーネントです。 Cgroupsは、次のような多くのことに責任があります。

  • プロセスのリソースを制限します。
  • 競合が発生した場合の優先順位の決定。
  • 読み取り/書き込みおよびmknodデバイスへのアクセスを制御します。
  • システムで実行されているプロセスに高レベルのアカウンティングを提供します。

コンテナ化、Kubernetes、およびその他のビジネスクリティカルな実装のホストは、cgroupを活用しないと不可能であると主張する人もいるかもしれません。

ご質問やご意見、その他の記事のアイデアがございましたら、Twitterでお気軽にご連絡ください。皆様からのフィードバックをお待ちしております。

ソース

https://0xax.gitbooks.io/linux-insides/content/Cgroups/linux-cgroups-1.html
https://sysadmincasts.com/episodes/14-introduction-to-linux-control-groups -cgroups
https://itnext.io/chroot-cgroups-and-namespaces-an-overview-37124d995e3d
https://www.certdepot.net/rhel7-get-started-cgroups/
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/resource_management_guide/chap-introduction_to_control_groups
https://oakbytes.wordpress.com/2012/09/02/ cgroup-cpu-allocation-cpu-shares-examples /
https://www.redhat.com/en/blog/world-domination-cgroups-part-1-cgroup-basics
https:/ /www.redhat.com/en/blog/world-domination-cgroups-rhel-8-welcome-cgroups-v2
https://youtu.be/z7mgaWqiV90
https://youtu.be /el7768BNUPw
https://youtu.be/sK5i-N34im8
https://youtu.be/_AODvcO5Q_8
https://youtu.be/x1npPrzyKfs
https:/ /youtu.be/yZpNsDe4Qzg
https://access.redhat.com/solutions/4489171


Linux
  1. Linux – SystemdでTtyを減らす方法は?

  2. systemd - サービスに複数の引数を与える

  3. Systemd で tty を減らすには?

  1. systemdのcgroupsを使用したリソースの管理

  2. systemd ソケットのアクティベーションと xinetd

  3. root アクセスで実行するように Systemd サービスを構成する

  1. LinuxでSystemctlを使用してSystemdサービスを管理する方法

  2. LinuxでSystemdサービスを作成する方法

  3. Linuxsystemdに新しいサービスを追加する