


Kami secara aktif mencari kontributor dan pengelola untuk proyek ini. Jika Anda memiliki pengalaman di internal kontainer misalnya cgroup, namespaces, atau telah berkontribusi pada setiap proyek open source di sekitar wadah misalnya docker , containerd , nerdctl , podman dll atau membangun alat yang melibatkan berurusan dengan internal kontainer, dan tertarik untuk berkontribusi pada proyek ini, saya ingin berbicara dengan Anda! Pengalaman Golang lebih disukai tetapi tidak diperlukan.
Harap hubungi saya @_shishir_m atau buka masalah di repositori ini dengan detail kontak Anda, jika Anda tertarik untuk berkontribusi pada proyek ini.
Driver Tugas Nomad untuk meluncurkan kontainer menggunakan ContainerD.
Containerd (containerd.io) adalah daemon kontainer ringan untuk menjalankan dan mengelola siklus hidup wadah.
Docker Daemon juga menggunakan Containerd.
dockerd (docker daemon) --> containerd --> containerd-shim --> runc
Nomad-driver-containerd memungkinkan klien Nomad untuk meluncurkan kontainer secara langsung menggunakan Containerd, tanpa Docker!
Docker Daemon tidak diperlukan pada sistem host.

Pastikan $ gopath Anda diatur dengan benar.
$ mkdir -p $GOPATH/src/github.com/Roblox
$ cd $GOPATH/src/github.com/Roblox
$ git clone [email protected]:Roblox/nomad-driver-containerd.git
$ cd nomad-driver-containerd
$ make build (This will build your containerd-driver binary)
Jika Anda ingin mengkompilasi untuk arm64 , Anda dapat menjalankan:
make -f Makefile.arm64
$ vagrant up
atau vagrant provision jika VMAGRAN VM sudah berjalan.
Setelah pengaturan ( vagrant up atau vagrant provision ) selesai dan server NOMAD sedang berjalan dan berjalan, Anda dapat memeriksa driver tugas terdaftar (yang juga akan menunjukkan containerd-driver ) menggunakan:
$ nomad node status (Note down the <node_id>)
$ nomad node status <node_id> | grep containerd-driver
Catatan: setup.sh adalah bagian dari pengaturan Vagrant dan tidak boleh dieksekusi secara langsung.
Ada beberapa contoh pekerjaan di Direktori example .
$ nomad job run <job_name.nomad>
akan meluncurkan pekerjaan.
Instruksi yang lebih rinci ada dalam example README.md
Untuk berinteraksi dengan images dan containers secara langsung, Anda dapat menggunakan nerdctl yang merupakan CLI yang kompatibel dengan Docker untuk containerd . nerdctl sudah diinstal di Vagrant VM AT /usr/local/bin .
Konfigurasi Driver
| Pilihan | Jenis | Diperlukan | Bawaan | Keterangan |
|---|---|---|---|---|
| diaktifkan | bool | TIDAK | BENAR | Aktifkan/Nonaktifkan Driver Tugas. |
| containerd_runtime | rangkaian | Ya | N/a | Runtime untuk containerd io.containerd.runc.v1 io.containerd.runc.v2 |
| Stats_interval | rangkaian | TIDAK | 1s | Interval untuk mengumpulkan TaskStats . |
| Izin_priviled | bool | TIDAK | BENAR | Jika diatur ke false , Driver akan menolak menjalankan pekerjaan istimewa. |
| auth | memblokir | TIDAK | N/a | Memberikan otentikasi untuk pendaftaran pribadi. Lihat otentikasi untuk lebih jelasnya. |
Konfigurasi Tugas
| Pilihan | Jenis | Diperlukan | Keterangan |
|---|---|---|---|
| gambar | rangkaian | Ya | Image OCI (Docker juga kompatibel dengan OCI) untuk wadah Anda. |
| image_pull_timeout | rangkaian | TIDAK | Durasi waktu yang mengontrol berapa lama containerd-driver akan menunggu sebelum membatalkan tarikan yang sedang berlangsung dari gambar OCI sebagaimana ditentukan dalam image . Default ke "5m" . |
| memerintah | rangkaian | TIDAK | Perintah untuk mengganti perintah yang ditentukan dalam gambar. |
| args | []rangkaian | TIDAK | Argumen ke perintah. |
| titik masuk | []rangkaian | TIDAK | Daftar string yang mengesahkan titik masuk gambar. |
| CWD | rangkaian | TIDAK | Tentukan direktori kerja saat ini untuk proses kontainer Anda. Jika direktori tidak ada, seseorang akan dibuat untuk Anda. |
| hak istimewa | bool | TIDAK | Jalankan wadah dalam mode istimewa. Wadah Anda akan memiliki semua kemampuan Linux saat berjalan dalam mode istimewa. |
| PIDS_LIMIT | int64 | TIDAK | Nilai integer yang menentukan batas PID untuk wadah. Default ke tidak terbatas. |
| pid_mode | rangkaian | TIDAK | host atau tidak diatur (default). Setel ke host untuk berbagi namespace PID dengan host. |
| nama host | rangkaian | TIDAK | Nama host untuk ditugaskan ke wadah. Saat meluncurkan lebih dari satu tugas (menggunakan count ) dengan set opsi ini, setiap wadah tugas dimulai akan memiliki nama host yang sama. |
| host_dns | bool | TIDAK | Default ( true ). Secara default, sebuah wadah yang diluncurkan menggunakan containerd-driver akan menggunakan host /etc/resolv.conf . Ini mirip dengan docker behavior . Namun, jika Anda tidak ingin menggunakan DNS host, Anda dapat mematikan bendera ini dengan mengatur host_dns=false . |
| SECCOMP | bool | TIDAK | Aktifkan profil SECCOMP default. Daftar allowed syscalls . |
| SECCOMP_PROFILE | rangkaian | TIDAK | Jalur ke profil SECCOMP khusus. seccomp harus diatur ke true untuk menggunakan seccomp_profile . Profil SecComp docker default yang ditemukan here dapat digunakan sebagai referensi, dan dimodifikasi untuk membuat profil SECCOMP khusus. |
| shm_size | rangkaian | TIDAK | Ukuran /dev /shm misalnya "128m" jika Anda ingin 128 mb /dev /shm. |
| sysctl | Peta [String] String | TIDAK | Peta nilai kunci dari konfigurasi sysctl untuk disetel ke wadah pada awal. |
| readonly_rootfs | bool | TIDAK | Sistem file root container akan hanya baca. |
| host_network | bool | TIDAK | Aktifkan jaringan host. Ini setara dengan --net=host di Docker. |
| Extra_hosts | []rangkaian | TIDAK | Daftar host, diberikan sebagai host: IP, untuk ditambahkan ke /etc /hosts. |
| cap_add | []rangkaian | TIDAK | Tambahkan kemampuan individu. |
| cap_drop | []rangkaian | TIDAK | Jatuhkan kemampuan invidual. |
| perangkat | []rangkaian | TIDAK | Daftar perangkat yang akan terkena wadah. |
| auth | memblokir | TIDAK | Memberikan otentikasi untuk pendaftaran pribadi. Lihat otentikasi untuk lebih jelasnya. |
| dudukan | []memblokir | TIDAK | Daftar dudukan yang akan dipasang di wadah. Volume, mount tipe volume, bind dan TMPFS didukung. mount options gaya fstab didukung. |
Blok gunung
{
- type (string) (opsional): Nilai yang didukung adalah volume , bind atau tmpfs . Default: Volume.
- Target (String) (Diperlukan): Jalur target dalam wadah.
- Sumber (String) (Opsional): Jalur sumber pada host.
- Opsi ([] String) (Opsional): mount options Gaya Fstab. Catatan : Untuk bind mounts, setidaknya rbind dan ro diperlukan.
}
Contoh Bind Mount
mounts = [
{
type = "bind"
target = "/target/t1"
source = "/src/s1"
options = ["rbind", "ro"]
}
]
Di Additon ke opsi mounts di Task Config , Anda juga dapat memasang volume ke dalam wadah menggunakan Nomad volume_mount stanza
Lihat example job untuk volume_mount .
Contoh Profil SECCOM Kustom
Profil SecComp docker default yang ditemukan here dapat diunduh, dan dimodifikasi (dengan menghapus/menambahkan syscall) untuk membuat profil SECCOMP khusus.
Profil SECCOMP khusus kemudian dapat disimpan di bawah /opt/seccomp/seccomp.json pada node klien Nomad.
Pekerjaan nomad dapat diluncurkan menggunakan profil SECCOMP khusus ini.
config {
seccomp = true
seccomp_profile = "/opt/seccomp/seccomp.json"
}
Contoh sysctl
config {
sysctl = {
"net.core.somaxconn" = "16384"
"net.ipv4.ip_forward" = "1"
}
}
auth STANZA memungkinkan Anda untuk mengatur kredensial untuk registri pribadi Anda misalnya jika Anda ingin menarik gambar dari repositori pribadi di hub Docker.
Stanza auth dapat diatur dalam Driver Config atau Task Config atau keduanya.
Jika diatur di kedua tempat, Task Config Auth akan diutamakan daripada Driver Config auth.
Catatan : Dalam contoh di bawah ini, user dan pass hanyalah nilai -nilai placeholder yang perlu diganti dengan username dan password yang sebenarnya, ketika menentukan kredensial. Di bawah ini auth STANZA dapat digunakan untuk Driver Config dan Task Config .
auth {
username = "user"
password = "pass"
}
nomad-driver-containerd mendukung jaringan host dan jembatan .
Catatan: host dan bridge adalah opsi yang saling eksklusif, dan hanya satu dari mereka yang harus digunakan sekaligus.
Jaringan host dapat diaktifkan dengan mengatur host_network ke true di konfigurasi tugas spesifikasi pekerjaan (lihat di bawah Supported options ).
Jaringan jembatan dapat diaktifkan dengan mengatur bait network di bagian grup tugas spesifikasi pekerjaan.
network {
mode = "bridge"
}
Anda perlu menginstal plugin CNI pada node klien Nomad di bawah /opt/cni/bin sebelum Anda dapat menggunakan jaringan bridge .
Instruksi untuk menginstal plugin CNI.
$ curl -L -o cni-plugins.tgz https://github.com/containernetworking/plugins/releases/download/v0.8.6/cni-plugins-linux-amd64-v0.8.6.tgz
$ sudo mkdir -p /opt/cni/bin
$ sudo tar -C /opt/cni/bin -xzf cni-plugins.tgz
Juga, pastikan distribusi sistem operasi Linux Anda telah dikonfigurasi untuk memungkinkan lalu lintas kontainer melalui jaringan jembatan dialihkan melalui ptables. Tunable ini dapat diatur sebagai berikut:
$ echo 1 > /proc/sys/net/bridge/bridge-nf-call-arptables
$ echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables
$ echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
Untuk melestarikan pengaturan ini pada startup simpul klien NOMAD, tambahkan file termasuk yang berikut ke /etc/sysctl.d/ atau hapus file yang distribusi Linux yang Anda masukkan ke dalam direktori itu.
net.bridge.bridge-nf-call-arptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
NOMAD mendukung pemetaan port statis dan dinamis .
Pemetaan port statis dapat ditambahkan dalam bait network .
network {
mode = "bridge"
port "lb" {
static = 8889
to = 8889
}
}
Di sini, port host 8889 dipetakan ke port container 8889 .
Catatan : Port statis biasanya tidak disarankan, kecuali untuk system atau pekerjaan khusus seperti penyeimbang beban.
Pemetaan port dinamis juga diaktifkan dalam bait network .
network {
mode = "bridge"
port "http" {
to = 8080
}
}
Di sini, Nomad akan mengalokasikan port dinamis pada host dan port itu akan dipetakan ke 8080 di dalam wadah.
Anda juga dapat membaca lebih lanjut tentang network stanza di nomad official documentation
Nomad menjadwalkan beban kerja dari berbagai jenis di seluruh sekelompok host generik. Karena itu, penempatan tidak diketahui sebelumnya dan Anda perlu menggunakan penemuan layanan untuk menghubungkan tugas ke layanan lain yang digunakan di seluruh cluster Anda. NOMAD terintegrasi dengan konsul untuk memberikan penemuan dan pemantauan layanan.
Bait service dapat ditambahkan ke spec pekerjaan Anda, untuk memungkinkan penemuan layanan.
STANZA LAYANAN menginstruksikan Nomad untuk mendaftarkan layanan dengan konsul.
Jika Anda menjalankan tes secara lokal, gunakan vagrant VM yang disediakan di repositori.
$ vagrant up
$ vagrant ssh containerd-linux
$ sudo make test
Catatan : Ini adalah tes destruktif dan dapat meninggalkan sistem dalam keadaan yang berubah.
Sangat disarankan untuk menjalankan tes ini baik sebagai bagian dari sistem CI/CD misalnya Circleci atau pada infrastruktur yang tidak dapat diubah misalnya VM VAGRAN.
Anda juga dapat menjalankan tes individual dengan menentukan nama tes. misalnya
$ cd tests
$ sudo ./run_tests.sh 001-test-redis.sh
make clean
Ini akan menghapus biner Anda: containerd-driver
vagrant destroy
Ini akan menghancurkan VM Vagrant Anda.
Ubuntu (> = 16.04)
Hak Cipta 2020 Roblox Corporation
Dilisensikan di bawah lisensi Apache, versi 2.0 ("lisensi"). Untuk informasi lebih lanjut, baca lisensi.