GNU/Linux >> Belajar Linux >  >> Linux

Mengelola cgroup dengan systemd

Dalam angsuran terakhir dari seri artikel cgroups empat bagian saya, saya membahas integrasi cgroup dengan systemd. Pastikan Anda juga melihat bagian satu, dua, dan tiga dalam seri ini.

Grup dengan systemd

Secara default, systemd membuat cgroup baru di bawah system.slice untuk setiap layanan yang dipantaunya. Kembali ke host OpenShift Control Plane kami, menjalankan systemd-cgls menunjukkan layanan berikut di bawah system.slice (keluaran dipotong untuk singkatnya):

└─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]

Anda dapat mengubah perilaku ini dengan mengedit file layanan systemd. Ada tiga opsi yang berkaitan dengan manajemen cgroup dengan systemd:

  • Mengedit file layanan itu sendiri.
  • Menggunakan file drop-in.
  • Menggunakan systemctl set-property perintah, yang sama dengan mengedit file secara manual, tetapi systemctl membuat entri yang diperlukan untuk Anda.

Saya membahasnya secara lebih rinci di bawah ini.

Mengedit file layanan

Mari kita edit file unit itu sendiri. Untuk melakukan ini, saya membuat file unit yang sangat sederhana yang menjalankan skrip:

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

[Install]
WantedBy=multi-user.target

Skrip bash hanya memiliki dua baris:

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

Saat Anda memeriksa keluaran systemd-cgls , Anda melihat bahwa layanan baru kami bersarang di bawah system.slice (keluaran terpotong):

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

Apa yang terjadi jika saya menambahkan baris berikut ke file layanan systemd?

Slice=my-beautiful-slice.slice

Keluaran dari systemd-cgls menunjukkan sesuatu yang penasaran. cat.service file sekarang sangat bersarang:

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

Kenapa ini? Jawabannya berkaitan dengan cara systemd menginterpretasikan kelompok-kelompok bersarang. Anak-anak dideklarasikan dengan cara berikut:-.slice . Karena systemd mencoba membantu, jika orang tua tidak ada, systemd membuatnya untuk Anda. Jika saya menggunakan garis bawah _ bukannya tanda hubung - hasilnya akan seperti yang Anda harapkan:

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

Menggunakan file drop-in

File drop-in untuk systemd cukup sepele untuk diatur. Mulailah dengan membuat direktori yang sesuai berdasarkan nama layanan Anda di /etc/systemd/system . Dalam cat contoh, jalankan perintah berikut:

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

File-file ini dapat diatur sesuai keinginan Anda. Mereka ditindaklanjuti berdasarkan urutan numerik, jadi Anda harus memberi nama file konfigurasi Anda seperti 10-CPUSettings.conf . Semua file dalam direktori ini harus memiliki ekstensi file .conf dan mengharuskan Anda untuk menjalankan systemctl daemon-reload setiap kali Anda menyesuaikan salah satu file ini.

Saya telah membuat dua file drop-in untuk menunjukkan bagaimana Anda dapat membagi konfigurasi yang berbeda. Yang pertama adalah 00-slice.conf . Seperti yang terlihat di bawah, ia menyiapkan opsi default untuk irisan terpisah untuk cat layanan:

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

File lain mengatur jumlah CPUShares, dan itu disebut 10-CPUSettings.conf .

[Service]
CPUShares=256

Untuk menunjukkan bahwa metode ini berfungsi, saya membuat layanan kedua di irisan yang sama. Untuk memudahkan membedakan prosesnya, skrip kedua sedikit berbeda:

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

Saya kemudian membuat salinan cat file, mengganti skrip dan mengubah nilai 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

Terakhir, muat ulang daemon dan mulai layanan:

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

[ Pembaca juga menyukai:Apa yang terjadi di balik layar wadah Podman tanpa akar? ]

Alih-alih menunjukkan kepada Anda output dari top , sekarang adalah saat yang tepat untuk memperkenalkan Anda ke systemd-cgtop . Ini bekerja dengan cara yang mirip dengan top biasa kecuali itu memberi Anda perincian per irisan, dan sekali lagi oleh layanan di setiap irisan. Ini sangat membantu dalam menentukan apakah Anda memanfaatkan cgroups secara umum di sistem Anda dengan baik. Seperti yang terlihat di bawah, systemd-cgtop menunjukkan agregasi untuk semua layanan dalam irisan tertentu sebagai bagian dari sistem keseluruhan dan pemanfaatan sumber daya setiap layanan dalam irisan:

Menggunakan systemctl set-property

Metode terakhir yang dapat digunakan untuk mengkonfigurasi cgroups adalah systemctl set-property memerintah. Saya akan mulai dengan file layanan dasar md5sum.service :

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

[Install]
WantedBy=multi-user.target

Menggunakan systemctl set-property perintah menempatkan file di /etc/systemd/system.control . File-file ini tidak boleh diedit dengan tangan. Tidak setiap properti dikenali oleh set-property perintah, jadi Slice definisi dimasukkan ke dalam file layanan itu sendiri.

Setelah saya menyiapkan file unit dan memuat ulang daemon, saya menggunakan systemctl perintah yang mirip dengan berikut ini:

# systemctl set-property md5sum.service CPUShares=1024

Ini membuat file drop-in untuk Anda yang terletak di /etc/systemd/system.control/md5sum.service.d/50-CPUShares.conf . Jangan ragu untuk melihat file jika Anda penasaran dengan isinya. Karena file ini tidak dimaksudkan untuk diedit dengan tangan, saya tidak akan menghabiskan waktu untuk itu.

Anda dapat menguji untuk melihat apakah perubahan telah diterapkan dengan menjalankan:

systemctl start md5sum.service cat.service sha256sum.service

Seperti yang Anda lihat pada tangkapan layar di bawah, perubahan tampaknya berhasil. sha256sum.service dikonfigurasi untuk 2048 CPUShares, sedangkan md5sum.service memiliki 1024. Terakhir, cat.service memiliki 256.

[ Memikirkan keamanan? Lihat panduan gratis ini untuk meningkatkan keamanan cloud hybrid dan melindungi bisnis Anda. ] 

Menutup

Semoga, Anda belajar sesuatu yang baru sepanjang perjalanan kita bersama. Ada banyak hal yang harus ditangani, dan kami bahkan hampir tidak memahami apa yang mungkin dilakukan dengan cgroups. Selain peran yang dimainkan cgroup dalam menjaga sistem Anda tetap sehat, mereka juga berperan dalam strategi "pertahanan mendalam". Selain itu, cgroup adalah komponen penting untuk beban kerja Kubernetes modern, di mana mereka membantu dalam menjalankan proses dalam container dengan benar. Cgroup bertanggung jawab atas banyak hal, termasuk:

  • Membatasi sumber daya proses.
  • Memutuskan prioritas ketika perselisihan muncul.
  • Mengontrol akses ke perangkat baca/tulis dan mknod.
  • Menyediakan akuntansi tingkat tinggi untuk proses yang berjalan di sistem.

Orang dapat berargumen bahwa containerisasi, Kubernetes, dan sejumlah implementasi penting bisnis lainnya tidak akan mungkin terjadi tanpa memanfaatkan cgroups.

Jika Anda memiliki pertanyaan atau komentar atau mungkin ide artikel lainnya, jangan ragu untuk menghubungi saya di Twitter. Saya berharap untuk mendengar semua tanggapan Anda.

Sumber

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. Cara membuat layanan Systemd di Linux

  2. Menambahkan layanan baru ke sistem Linuxd

  3. Bagaimana Mengkonfigurasi Systemd Untuk Menghidupkan Script Sederhana Dengan Standardio Dalam Layanan Jaringan?

  1. Bagaimana cara menjalankan skrip dengan systemd tepat sebelum dimatikan?

  2. aktivasi soket systemd vs xinetd

  3. Mengonfigurasi Layanan Systemd untuk dijalankan dengan akses root

  1. Mengelola sumber daya dengan cgroups di systemd

  2. Cara Mengelola Layanan Systemd dengan Systemctl di Linux

  3. 10 perintah systemd yang berguna:Referensi