Pekerja pelabuhan sumber mana yang diasingkan

青灯夜游
Lepaskan: 2022-01-28 15:35:51
asal
4331 orang telah melayarinya

Docker mengasingkan sumber: 1. Sistem fail 3. Komunikasi antara proses 4. Pengguna dan kumpulan pengguna untuk kebenaran 5. PID dan hos dalam proses PID; nama, dsb.

Pekerja pelabuhan sumber mana yang diasingkan

Persekitaran pengendalian tutorial ini: sistem linux5.9.8, versi docker-1.13.1, komputer Dell G3.

Intipati bekas Docker

Intipati bekas docker ialah proses pada mesin hos.

Docker mencapai pengasingan sumber melalui ruang nama, pengehadan sumber melalui cgroup dan kecekapan tinggi melalui operasi fail *copy-on-write*.

Mekanisme ruang nama Linux

Mekanisme ruang nama menyediakan penyelesaian pengasingan sumber.

PID, IPC, Rangkaian dan sumber sistem lain tidak lagi global, tetapi tergolong dalam Ruang Nama tertentu.

Sumber di bawah setiap ruang nama berkaitan dengan sumber di bawah ruang nama lain yang Telus, tidak kelihatan .

Salah satu tujuan utama ruang nama melaksanakan kernel Linux adalah untuk melaksanakan perkhidmatan (bekas) ringan Proses dalam ruang nama yang sama boleh melihat perubahan satu sama lain dan tidak tahu apa-apa tentang proses luaran.

Apakah ruang nama yang boleh diasingkan

Agar bekas tidak mengganggu bekas lain, ia perlu dapat:

  • Sistem fail perlu diasingkan

  • Rangkaian juga perlu diasingkan

  • Antara-proses komunikasi juga perlu diasingkan

  • Pengguna dan kumpulan pengguna juga perlu diasingkan untuk mendapatkan kebenaran

  • PID dalam proses juga perlu diasingkan daripada PID dalam hos

  • Bekas juga mesti mempunyai nama hos mereka sendiri

Dengan pengasingan di atas, kami percaya bahawa bekas boleh diasingkan daripada perumah dan bekas lain.

Kebetulan ruang nama Linux boleh melakukan ini.

namespace 隔离内容 系统调用参数
UTS 主机名与域名 CLONE_NEWUTS
IPC 信号量、消息队列和共享内存 CLONE_NEWIPC
Network 网络设备、网络栈、端口等 CLONE_NEWNET
PID 进程编号 CLONE_NEWPID
Mount 挂载点(文件系统) CLONE_NEWNS
User 用户和用户组 CLONE_NEWUSER

Ruang nama UTS

Ruang nama UTS (Sistem perkongsian MASA UNIX) menyediakan pengasingan nama hos dan domain, supaya setiap bekas Docker boleh mempunyai nama hos dan nama domain bebas, dalam rangkaian boleh dilihat sebagai nod bebas dan bukannya proses pada mesin hos.
Dalam Docker, setiap imej pada asasnya dinamakan nama hos selepas nama perkhidmatan yang diberikannya dan tidak akan memberi kesan kepada hos.

Ruang nama IPC

Sumber IPC yang direka untuk Komunikasi Antara Proses (IPC) termasuk semafor biasa, baris gilir mesej dan memori dikongsi.
Apabila memohon sumber IPC, anda memohon ID 32-bit yang unik secara global.
Ruang nama IPC mengandungi pengecam IPC sistem dan sistem fail yang melaksanakan baris gilir mesej POSIX.
Proses dalam ruang nama IPC yang sama boleh dilihat antara satu sama lain, tetapi proses dalam ruang nama yang berbeza tidak kelihatan antara satu sama lain.

Ruang nama PID

Pengasingan ruang nama PID sangat praktikal, ia menomborkan semula proses PID, iaitu, dua proses di bawah ruang nama yang berbeza boleh mempunyai PID yang sama, setiap satu Ruang nama PID mempunyai prosedur pengiraan sendiri.
Kernel mengekalkan struktur pokok untuk semua ruang nama PID Yang paling atas dicipta apabila sistem dimulakan dan dipanggil ruang nama akar. Ruang nama PID yang baru dibuat dipanggil ruang nama kanak-kanak, dan ruang nama PID asal ialah ruang nama kanak-kanak bagi ruang nama PID yang baru dibuat, dan ruang nama PID asal ialah ruang nama induk bagi ruang nama PID yang baru dibuat.
Dengan cara ini, ruang nama PID yang berbeza akan membentuk sistem hierarki Nod induk yang dimilikinya boleh melihat proses dalam nod anak dan boleh menjejaskan proses dalam nod anak melalui isyarat dan kaedah lain. Walau bagaimanapun, nod anak tidak dapat melihat apa-apa dalam ruang nama PID nod induk.

ruang nama lekapkan

ruang nama lekapkan menyediakan sokongan untuk mengasingkan sistem fail melalui mata lekap sistem fail yang diasingkan.
Selepas pengasingan, perubahan dalam struktur fail dalam ruang nama pelekap yang berbeza tidak akan menjejaskan satu sama lain.

ruang nama rangkaian

Ruang nama rangkaian terutamanya menyediakan pengasingan sumber rangkaian, termasuk peralatan rangkaian, IPv4, timbunan protokol IPv6, jadual penghalaan IP, tembok api, /proc/ direktori bersih , /sys/class/net direktori, soket, dsb.

ruang nama pengguna

ruang nama pengguna mengasingkan pengecam dan atribut berkaitan pemasangan

operasi ruang nama

API ruang nama termasuk clone() setns() unshare() dan beberapa fail di bawah /proc
Untuk menentukan ruang nama yang diasingkan, anda perlu menentukan satu atau lebih daripada 6 parameter berikut yang diasingkan oleh | 6 parameter ialah CLONE_NEWUTS, CLONE_NEWIPC, CLONE_NEWPID, CLONE_NEWNET, CLONE_NEWUSER yang dinyatakan dalam jadual di atas Proses ialah pendekatan yang paling biasa dan cara paling asas untuk Docker menggunakan ruang nama.

clone() ialah pelaksanaan yang lebih umum bagi fork() panggilan sistem Linux Anda boleh mengawal bilangan fungsi yang digunakan melalui bendera. Terdapat lebih daripada 20 jenis bendera CLONE_*, yang mengawal semua aspek proses klon.

child_func diluluskan dalam fungsi utama program yang dijalankan oleh proses kanak-kanak
int clone(int(*child_func)(void *),void *child_stack,int flags, void *arg);
Salin selepas log masuk

child_stack diluluskan dalam ruang tindanan yang digunakan oleh proses kanak-kanak

bendera mengenal pasti bit bendera CLONE_* yang mana digunakan, dan Bit utama yang berkaitan dengan ruang nama ialah 6 yang dinyatakan di atas.
  1. args digunakan untuk menghantar parameter pengguna
  2. /proc/[pid]/ns
  3. Pengguna boleh memasukkan /proc/[ pid ]/ns, anda boleh melihat fail yang menunjuk ke ruang nama yang berbeza.

Nombor ruang nama dalam kurungan segi empat sama

ls -l /proc/10/ns
Salin selepas log masuk

Jika nombor ruang nama yang ditunjuk oleh dua proses adalah sama, maka ia berada dalam yang sama Tujuan menetapkan pautan dalam ruang namaPekerja pelabuhan sumber mana yang diasingkan

ialah walaupun semua proses di bawah ruang nama ini telah tamat, ruang nama ini akan sentiasa wujud dan proses seterusnya boleh bergabung.

Memasang fail direktori /proc/[pid]/ns menggunakan kaedah --bind juga boleh berfungsi sebagai pautan

setns()


Untuk menggunakan arahan docker exec dalam Docker untuk melaksanakan arahan baharu pada arahan yang sudah berjalan, anda perlu menggunakan setns().
touch ~/utsmount --bind /proc/10/ns/uts ~/uts
Salin selepas log masuk
Melalui panggilan sistem setns(), proses itu bergabung dengan ruang nama sedia ada daripada ruang nama asal

Biasanya untuk tidak menjejaskan pemanggil proses dan untuk menjadikan ruang nama pid yang baru ditambah berkuat kuasa, proses itu akan ditambah dalam setns() Selepas fungsi dilaksanakan, gunakan clone() untuk mencipta proses anak untuk terus melaksanakan arahan dan biarkan proses asal tamat berjalan.

Untuk menggunakan ruang nama yang baru ditambah, adalah perlu untuk memperkenalkan siri execve() fungsi ini boleh melaksanakan perintah pengguna Yang paling biasa digunakan ialah memanggil /bin /bash dan terima parameter



nyahkongsi()

int setns(int fd, in nstype);
#fd 表示要加入namespace的文件描述符。是一个指向/proc/[pid]/ns目录的文件描述符,打开目录链接可以获得
#nstype 调用者可以检查fd指向的namespace类型是否符合实际要求,该参数为0则不检查
Salin selepas log masuk

Pengasingan ruang nama pada proses asal melalui nyahkongsi()

Nyahkongsi sangat serupa dengan Nyahkongsi tidak perlu untuk memulakan proses baru, ia boleh dilakukan pada proses asal untuk digunakan.

docker tidak menggunakan

panggilan sistem fork()



fork bukan milik API ruang nama

Kumpulan alat kernel yang berkuasa

cgroup ialah mekanisme yang disediakan oleh kernel Linux Mekanisme ini boleh menyepadukan (atau memisahkan) satu siri tugasan sistem dan subtugasnya ke dalam sumber hierarki yang berbeza mengikut keperluan , dengan itu menyediakan rangka kerja bersatu untuk pengurusan sumber sistem.

cgroups ialah satu lagi alat kernel yang berkuasa dalam Linux Dengan cgroups, anda bukan sahaja boleh mengehadkan sumber yang diasingkan mengikut ruang nama, tetapi juga menetapkan pemberat untuk sumber, mengira penggunaan dan mengawal permulaan tugas (proses atau daerah). Berhenti dan tunggu. Secara terang-terangan: cgroups boleh mengehadkan dan merekodkan sumber fizikal (termasuk CPU, Memori, IO, dsb.) yang digunakan oleh kumpulan tugas Ia merupakan asas membina satu siri alatan pengurusan virtualisasi seperti Docker.

Peranan cgroup

cgroups menyediakan antara muka bersatu untuk pengurusan sumber pada peringkat pengguna yang berbeza, daripada kawalan sumber individu kepada peringkat sistem pengendalian Untuk virtualisasi, cgroups menyediakan empat fungsi utama.

  • Penghadan Sumber
    • kumpulan c boleh mengehadkan jumlah sumber yang digunakan oleh tugasan.
      • Jika anda menetapkan had atas memori yang digunakan oleh aplikasi semasa berjalan, gesaan OOM akan dikeluarkan setelah kuota melebihi
  • Peruntukan keutamaan
    • Dengan memperuntukkan bilangan kepingan masa CPU dan lebar jalur IO cakera, ia sebenarnya bersamaan dengan mengawal keutamaan tugas berjalan
  • Statistik sumber
    • cgroup boleh mengira penggunaan Sumber sistem
      • seperti masa penggunaan CPU, penggunaan memori, dll. Fungsi ini sangat sesuai untuk pengebilan
  • kawalan tugas
    • kumpulan boleh menggantung dan menyambung semula tugas

Pembelajaran yang disyorkan: "tutorial video buruh pelabuhan"

Atas ialah kandungan terperinci Pekerja pelabuhan sumber mana yang diasingkan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan