GNU/Linux >> Belajar Linux >  >> Linux

Pengantar sysadmin Linux untuk cgroups

Jadi, Anda pernah mendengar tentang hal yang disebut cgroups, dan Anda tertarik untuk mengetahui lebih lanjut. Mungkin Anda mengetahuinya saat mendengarkan ceramah tentang containerization. Mungkin Anda sedang mencari penyetelan kinerja Linux, atau mungkin Anda kebetulan melintasi sistem file Anda suatu hari dan menemukan /sys/fs/cgroups . Either way, Anda ingin mempelajari lebih lanjut tentang fungsi ini yang telah dimasukkan ke dalam kernel selama beberapa waktu. Jadi, duduklah, ambil popcorn, dan bersiaplah untuk (semoga) mempelajari sesuatu yang mungkin belum Anda ketahui sebelumnya.

Apa itu cgroup?

Kamus Webster mendefinisikan cgroups sebagai... Hanya bercanda. Saya selalu benci mendengarkan pembicaraan yang dimulai dengan definisi kamus yang membosankan. Sebagai gantinya, saya akan mencoba menyaring definisi teknis cgroup menjadi sesuatu yang mudah dipahami.

Cgroups adalah topik besar. Saya telah memecah diskusi ini menjadi seri empat bagian. Bagian satu, artikel ini, mencakup konsep dasar cgroup. Bagian kedua membahas CPUShare secara lebih mendalam. Bagian ketiga, berjudul "Melakukan cgroup dengan cara yang sulit", membahas tugas-tugas administratif cgroup. Akhirnya, bagian empat mencakup cgroup yang dikelola oleh systemd.

Seperti yang mungkin Anda ketahui atau mungkin tidak, kernel Linux bertanggung jawab atas semua perangkat keras yang berinteraksi secara andal pada suatu sistem. Itu berarti, selain dari hanya bit kode (driver) yang memungkinkan sistem operasi (OS) untuk memahami perangkat keras, itu juga menetapkan batasan berapa banyak sumber daya yang dapat diminta oleh program tertentu dari sistem. Ini paling mudah dipahami ketika berbicara tentang jumlah memori (RAM) yang harus dibagi sistem di antara semua aplikasi yang dapat dijalankan komputer Anda. Dalam bentuknya yang paling dasar, sistem Linux diizinkan untuk menjalankan sebagian besar aplikasi tanpa batasan. Ini bisa sangat bagus untuk komputasi umum jika semua aplikasi bermain bersama dengan baik. Tetapi apa yang terjadi jika ada bug dalam suatu program, dan program tersebut mulai menghabiskan semua memori yang tersedia? Kernel memiliki fasilitas yang disebut Out Of Memory (OOM) Killer. Tugasnya adalah menghentikan aplikasi untuk mengosongkan RAM yang cukup sehingga OS dapat terus berfungsi tanpa mogok.

Itu bagus, katamu, tapi apa hubungannya ini dengan cgroups? Nah, proses OOM bertindak sebagai garis pertahanan terakhir sebelum sistem Anda runtuh di sekitar Anda. Ini berguna untuk satu hal, tetapi karena kernel dapat mengontrol proses mana yang harus bertahan dari OOM, kernel juga dapat menentukan aplikasi mana yang tidak dapat menggunakan terlalu banyak RAM.

Oleh karena itu, Cgroup adalah fasilitas yang ada di dalam kernel yang memungkinkan administrator menetapkan batas pemanfaatan sumber daya pada proses apa pun di sistem. Secara umum, kontrol cgroup:

  • Jumlah pembagian CPU per proses.
  • Batas memori per proses.
  • Blokir I/O Perangkat per proses.
  • Paket jaringan mana yang diidentifikasi sebagai jenis yang sama sehingga aplikasi lain dapat menerapkan aturan lalu lintas jaringan.

Ada lebih banyak aspek daripada hanya ini, tetapi itu adalah kategori utama yang paling diperhatikan oleh sebagian besar administrator.

Awal grup yang sederhana

Grup kontrol (cgroups) adalah mekanisme kernel Linux untuk kontrol sumber daya yang halus. Awalnya diajukan oleh insinyur Google pada tahun 2006, cgroup akhirnya digabungkan ke dalam kernel Linux sekitar tahun 2007. Meskipun saat ini ada dua versi cgroup, sebagian besar distribusi dan mekanisme menggunakan versi 1, seperti yang telah ada di kernel sejak 2.6.24. Seperti kebanyakan hal yang ditambahkan ke kernel arus utama, pada awalnya tidak ada tingkat adopsi yang besar. Versi 2 melanjutkan tren ini, yang telah ada selama hampir setengah dekade tetapi masih belum digunakan secara luas.

Salah satu masalah yang mengganggu adopsi cgroup adalah kurangnya pengetahuan tentang keberadaannya dan bagiannya dalam sistem Linux modern. Kesadaran dan adopsi yang rendah sering berarti bahwa interaksi dengan antarmuka kernel kikuk, berbelit-belit, atau benar-benar proses manual. Seperti yang terjadi pada cgroups pada awalnya. Tentu, tidak sulit untuk membuat cgroup sekali pakai. Misalnya, jika Anda ingin mensimulasikan hari-hari awal sebelum perkakas di sekitar cgroups dikembangkan, Anda bisa membuat banyak direktori, pasang cgroup sistem file dan mulai mengonfigurasi semuanya dengan tangan. Tapi sebelum kita membahas semua itu, mari kita bicara sedikit tentang mengapa cgroups sangat penting dalam ekosistem Linux saat ini.

Mengapa cgroup itu penting

Cgroups memiliki empat fitur utama yang terkait erat satu sama lain yang menjadikannya sangat penting dalam sistem modern, terutama jika Anda menjalankan beban kerja dalam container.

1. Pembatasan sumber daya

Seperti disinggung sebelumnya, cgroup memungkinkan administrator untuk memastikan bahwa program yang berjalan pada sistem tetap berada dalam batas tertentu yang dapat diterima untuk CPU, RAM, blok I/O perangkat, dan grup perangkat.

CATATAN :Grup perangkat CGroup dapat menjadi komponen utama dalam strategi keamanan komprehensif sistem Anda. Grup perangkat termasuk mengontrol izin untuk membaca, menulis, dan mknod operasi. Operasi baca/tulis cukup jelas, jadi mari luangkan waktu sejenak untuk melihat mknod fungsionalitas dalam sistem Linux.

mknod awalnya dirancang untuk mengisi semua hal yang muncul di /dev/ . Ini adalah hal-hal seperti hard drive, antarmuka USB untuk perangkat seperti Arduino, mikrokontroler ESP8266, atau perangkat lain yang mungkin ada pada suatu sistem. Kebanyakan sistem Linux modern menggunakan udev untuk secara otomatis mengisi sistem file virtual ini dengan hal-hal yang terdeteksi oleh kernel. mknod juga memungkinkan beberapa program untuk berkomunikasi satu sama lain dengan membuat pipa bernama. Konsep ini berada di luar cakupan penjelasan ini, tetapi cukup untuk dipahami bahwa ini memfasilitasi penyampaian informasi dari satu program ke program lainnya. Apapun, mknod dalam lingkungan yang terkendali adalah sesuatu yang harus diperhatikan oleh administrator dengan cermat.

2. Prioritas

Prioritas sedikit berbeda dari pembatasan sumber daya karena Anda tidak perlu membatasi proses. Sebaliknya, Anda hanya mengatakan bahwa terlepas dari berapa banyak sumber daya yang tersedia, proses X akan selalu memiliki lebih banyak waktu di sistem daripada proses Y .

3. Akuntansi

Sementara akuntansi dimatikan secara default untuk sebagian besar versi perusahaan Linux karena pemanfaatan sumber daya tambahan, akan sangat membantu untuk mengaktifkan pemanfaatan sumber daya untuk pohon tertentu (lebih lanjut tentang ini nanti). Dengan demikian Anda dapat melihat proses apa di dalam cgroup mana yang menggunakan jenis atau sumber daya mana.

4. Kontrol proses

Ada fasilitas di cgroups yang disebut freezer . Meskipun pemahaman mendalam tentang fungsi ini berada di luar cakupan artikel ini, Anda dapat menganggap freezer sebagai kemampuan untuk mengambil snapshot dari proses tertentu dan memindahkannya. Lihat Dokumentasi Kernel untuk pemahaman yang lebih dalam.

Oke, jadi apa maksud dari semua ini? Nah, dari sudut pandang administrator sistem, itu berarti beberapa hal.

Pertama, bahkan tanpa mempelajari teknologi container, ini berarti Anda dapat mencapai kepadatan yang lebih besar pada satu server dengan mengelola jenis beban kerja, aplikasi, dan sumber daya yang dibutuhkan secara hati-hati.

Kedua, ini sedikit meningkatkan postur keamanan Anda. Meskipun instalasi Linux pada umumnya menggunakan cgroups secara default, ia tidak membatasi proses apa pun. Anda dapat memberlakukan batasan secara default jika Anda mau. Anda juga dapat membatasi akses ke perangkat tertentu untuk pengguna, grup, atau proses tertentu, yang selanjutnya membantu mengunci sistem.

Terakhir, Anda dapat melakukan sejumlah besar penyetelan kinerja melalui cgroups. Itu, dalam kombinasi dengan yang disetel, berarti Anda dapat menciptakan lingkungan yang secara khusus disesuaikan untuk beban kerja individu Anda. Dalam skala besar, atau dalam lingkungan yang peka terhadap latensi, penyesuaian ini dapat berarti perbedaan antara memenuhi atau melewatkan Perjanjian Tingkat Layanan (SLA).

Bagaimana cara kerja cgroup?

Untuk tujuan diskusi ini, kita berbicara tentang cgroups V1 . Meskipun versi 2 tersedia di Red Hat Enterprise Linux 8 (RHEL 8), versi ini dinonaktifkan secara default. Sebagian besar teknologi container seperti Kubernetes, OpenShift, Docker, dan sebagainya masih mengandalkan cgroups versi 1.

Kita telah membahas bahwa cgroup adalah mekanisme untuk mengontrol subsistem tertentu di kernel. Subsistem ini, seperti perangkat, CPU, RAM, akses jaringan, dan sebagainya, disebut pengontrol dalam terminologi cgroup.

Setiap jenis pengontrol (cpu , blkio , memory , dll.) dibagi lagi menjadi struktur seperti pohon. Setiap cabang atau daun memiliki bobot atau batasnya sendiri. Grup kontrol memiliki beberapa proses yang terkait dengannya, membuat pemanfaatan sumber daya menjadi lebih terperinci dan mudah untuk disesuaikan.

CATATAN :Setiap anak mewarisi dan dibatasi oleh batas yang ditetapkan pada cgroup induk.

Pada diagram di atas, Anda dapat melihat bahwa dimungkinkan untuk memiliki PID 1 di memory , disk i/o , dan cpu kelompok kontrol. Cgroup dibuat per jenis sumber daya dan tidak memiliki hubungan satu sama lain. Itu berarti Anda bisa memiliki database grup yang terkait dengan semua pengontrol, tetapi grup diperlakukan secara independen. Seperti GID, grup ini diberi nilai numerik saat dibuat dan bukan nama yang ramah. Di bawah tenda, kernel menggunakan nilai-nilai ini untuk menentukan alokasi sumber daya. Untuk memikirkannya dengan cara lain, asumsikan bahwa setiap nama cgroup, setelah dilampirkan ke pengontrol, diganti namanya menjadi nama pengontrol ditambah nama yang Anda pilih. Jadi grup yang disebut database di memory controller sebenarnya dapat dianggap sebagai memory-database . Jadi, tidak ada hubungan dengan database grup yang terkait dengan pengontrol cpu sebagai nama yang ramah dapat dianggap sebagai cpu-database .

CATATAN :Ini adalah penyederhanaan kasar dan TIDAK akurat secara teknis jika Anda ingin terlibat dengan kode cgroup yang mendasarinya. Penjelasan di atas dimaksudkan untuk kejelasan pemahaman.

Menutup

Jadi sekarang Anda memiliki gagasan tentang apa itu cgroup dan bagaimana mereka dapat membantu Anda dengan penyetelan kinerja dan keamanan. Anda juga memiliki pemahaman yang lebih baik tentang bagaimana cgroup berinteraksi dengan pengontrol.

Artikel ini bukan rincian dari semua jenis pengontrol yang ada di cgroups. Sesuatu pada skala itu akan membutuhkan seluruh buku untuk dijelaskan dengan benar. Pada artikel berikutnya, saya melihat CPUShares karena kompleksitas relatifnya dan pentingnya peran mereka dalam kesehatan sistem secara keseluruhan. Kontroler lainnya berfungsi sama. Oleh karena itu, Anda harus dapat mengambil pelajaran dari pengontrol CPU dan menerapkannya ke sebagian besar pengontrol cgroup yang tersisa.

Jangan lupa bahwa di bagian tiga kita akan memeriksa tugas-tugas administratif dan di bagian empat kita akan mengakhiri dengan bagaimana systemd berinteraksi dengan cgroups.

[ Memulai container? Lihat kursus gratis ini. Menyebarkan aplikasi kemas:Tinjauan teknis. ]


Linux
  1. Pengenalan Nmap di Kali Linux

  2. 5 alat sysadmin Linux favorit saya

  3. Menjadi administrator sistem Linux:Dari penjualan hingga sysadmin

  1. Cara Mengubah Nama Host di Linux

  2. Izin Linux:Pengantar chmod

  3. Pengantar singkat tentang peran Ansible untuk administrasi sistem Linux

  1. Pengantar bpftrace untuk Linux

  2. Pengantar Sistem File Linux

  3. Persyaratan Sistem Kali Linux