GNU/Linux >> Belajar Linux >  >> Linux

Di balik layar dengan wadah Linux

Dapatkah Anda memiliki wadah Linux tanpa Docker? Tanpa OpenShift? Tanpa Kubernetes?

Ya kamu bisa. Bertahun-tahun sebelum Docker menjadikan container sebagai istilah rumah tangga (jika Anda tinggal di pusat data), proyek LXC mengembangkan konsep menjalankan semacam sistem operasi virtual, berbagi kernel yang sama, tetapi berisi dalam kelompok proses yang ditentukan.

Docker dibangun di atas LXC, dan saat ini ada banyak platform yang memanfaatkan kerja LXC baik secara langsung maupun tidak langsung. Sebagian besar platform ini membuat pembuatan dan pemeliharaan container menjadi sangat sederhana, dan untuk penerapan besar, masuk akal untuk menggunakan layanan khusus semacam itu. Namun, tidak semua orang yang mengelola penerapan besar atau memiliki akses ke layanan besar untuk mempelajari penampung. Kabar baiknya adalah Anda dapat membuat, menggunakan, dan mempelajari container hanya dengan PC yang menjalankan Linux dan artikel ini. Artikel ini akan membantu Anda memahami container dengan melihat LXC, cara kerjanya, alasan kerjanya, dan cara memecahkan masalah saat terjadi kesalahan.

Menghindari kesederhanaan

Wadah Linux

  • Apa itu container Linux?
  • Pengantar terminologi wadah
  • Unduh:Containers Primer
  • Operator Kubernetes:Mengotomatiskan platform orkestrasi container
  • eBook:Pola Kubernetes untuk mendesain aplikasi cloud-native
  • Apa itu Kubernetes?

Jika Anda mencari panduan memulai cepat untuk LXC, lihat situs web Linux Containers yang sangat baik.

Menginstal LXC

Jika belum terinstal, Anda dapat menginstal LXC dengan manajer paket Anda.

Di Fedora atau yang serupa, masukkan:

$ sudo dnf install lxc lxc-templates lxc-doc 

Di Debian, Ubuntu, dan sejenisnya, masukkan:

$ sudo apt install lxc 

Membuat jembatan jaringan

Sebagian besar wadah menganggap jaringan akan tersedia, dan sebagian besar alat wadah mengharapkan pengguna untuk dapat membuat perangkat jaringan virtual. Unit paling dasar yang diperlukan untuk container adalah jembatan jaringan, yang kurang lebih merupakan perangkat lunak yang setara dengan sakelar jaringan. Sakelar jaringan sedikit mirip dengan adaptor Y pintar yang digunakan untuk memisahkan soket headphone sehingga dua orang dapat mendengar hal yang sama dengan headset terpisah, kecuali alih-alih sinyal audio, sakelar jaringan menjembatani data jaringan.

Anda dapat membuat jembatan jaringan perangkat lunak Anda sendiri sehingga komputer host dan OS kontainer Anda dapat mengirim dan menerima data jaringan yang berbeda melalui satu perangkat jaringan (baik port Ethernet atau kartu nirkabel Anda). Ini adalah konsep penting yang sering hilang setelah Anda lulus dari pembuatan container secara manual, karena tidak peduli ukuran penerapan Anda, sangat tidak mungkin Anda memiliki kartu jaringan fisik khusus untuk setiap container yang Anda jalankan. Sangat penting untuk memahami bahwa container berbicara dengan perangkat jaringan virtual, sehingga Anda tahu dari mana harus memulai pemecahan masalah jika container kehilangan koneksi jaringannya.

Untuk membuat jembatan jaringan di mesin Anda, Anda harus memiliki izin yang sesuai. Untuk artikel ini, gunakan sudo perintah untuk beroperasi dengan hak akses root. (Namun, dokumen LXC menyediakan konfigurasi untuk memberikan izin kepada pengguna untuk melakukan ini tanpa menggunakan sudo .)

$ sudo ip link add br0 type bridge 

Verifikasi bahwa antarmuka jaringan imajiner telah dibuat:

$ sudo ip addr show br0
7:br0: mtu 1500 qdisc
   noop state DOWN group default qlen 1000
   link/ether 26:fa:21:5f :cf:99 brd ff:ff:ff:ff:ff:ff

Sejak br0 dilihat sebagai antarmuka jaringan, memerlukan alamat IP sendiri. Pilih alamat IP lokal yang valid yang tidak bertentangan dengan alamat IP yang ada di jaringan Anda dan tetapkan ke br0 perangkat:

$ sudo ip addr add 192.168.168.168 dev br0 

Dan terakhir, pastikan bahwa br0 aktif dan berjalan:

$ sudo ip link set br0 up 

Mengatur konfigurasi kontainer

File konfigurasi untuk wadah LXC bisa serumit yang diperlukan untuk menentukan tempat wadah di jaringan Anda dan sistem host, tetapi untuk contoh ini konfigurasinya sederhana. Buat file di editor teks favorit Anda dan tentukan nama untuk wadah dan pengaturan yang diperlukan jaringan:

lxc.utsname =opensourcedotcom
lxc.network.type =veth
lxc.network.flags =up
lxc.network.link =br0
lxc.network.hwaddr =4a:49:43:49:79:bd
lxc.network.ipv4 =192.168.168.1/24
lxc.network.ipv6 =2003:db8:1:0:214:1234:fe0b :3596

Simpan file ini di direktori home Anda sebagai mycontainer.conf .

lxc.utsname adalah sewenang-wenang. Anda dapat memanggil wadah Anda apa pun yang Anda suka; itu adalah nama yang akan Anda gunakan saat memulai dan menghentikannya.

Jenis jaringan disetel ke veth , yang merupakan sejenis kabel patch Ethernet virtual. Idenya adalah bahwa veth koneksi berpindah dari wadah ke perangkat jembatan, yang ditentukan oleh lxc.network.link properti, disetel ke br0 . Alamat IP container berada di jaringan yang sama dengan perangkat bridge tetapi unik untuk menghindari tabrakan.

Dengan pengecualian veth jenis jaringan dan naik bendera jaringan, Anda menemukan semua nilai dalam file konfigurasi. Daftar properti tersedia dari man lxc.container.conf . (Jika tidak ada di sistem Anda, periksa manajer paket Anda untuk mengetahui paket dokumentasi LXC yang terpisah.) Ada beberapa contoh file konfigurasi di /usr/share/doc/lxc/examples , yang harus Anda tinjau nanti.

Meluncurkan shell container

Pada titik ini, Anda dua pertiga dari jalan ke wadah yang dapat dioperasikan:Anda memiliki infrastruktur jaringan, dan Anda telah menginstal kartu jaringan imajiner di PC imajiner. Yang Anda butuhkan sekarang adalah menginstal sistem operasi.

Namun, bahkan pada tahap ini, Anda dapat melihat LXC bekerja dengan meluncurkan shell di dalam ruang kontainer.

$ sudo lxc-execute --name basic \
--rcfile ~/mycontainer.conf /bin/bash \
--logfile mycontainer.log
#

Dalam wadah yang sangat kosong ini, lihat konfigurasi jaringan Anda. Seharusnya terlihat familier, namun unik, bagi Anda.

# /usr/sbin/ip addr show
1:lo: mtu 65536 qdisc noqueue state [...]
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 lingkup host lo
[...]
22:eth0@if23: [...] qlen 1000
link/ether 4a:49:43:49:79:bd brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 192.168.168.167/24 brd 192.168.168.255 lingkup global eth0
   valid_lft selamanya lebih disukai_lft selamanya
inet6 2003:db8:1:0:214:1234:fe0b:3596/64 lingkup global
   valid_lft selamanya lebih disukai_lft selamanya
[...]

Container Anda mengetahui infrastruktur jaringan palsunya dan kernel yang familier namun unik.

# uname -av
Linux opensourcedotcom 4.18.13-100.fc27.x86_64 #1 SMP Rab 10 Okt 18:34:01 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

Gunakan keluar perintah untuk meninggalkan wadah:

# exit 

Menginstal sistem operasi kontainer

Membangun lingkungan yang sepenuhnya kemas jauh lebih kompleks daripada langkah-langkah jaringan dan konfigurasi, sehingga Anda dapat meminjam template kontainer dari LXC. Jika Anda tidak memiliki template, cari paket template LXC terpisah di repositori perangkat lunak Anda.

Template LXC default tersedia di /usr/share/lxc/templates .

$ ls -m /usr/share/lxc/templates/
lxc-alpine, lxc-altlinux, lxc-archlinux, lxc-busybox, lxc-centos, lxc-cirros, lxc-debian, lxc- unduh, lxc-fedora, lxc-gentoo, lxc-openmandriva, lxc-opensuse, lxc-Oracle, lxc-plamo, lxc-slackware, lxc-sparclinux, lxc-sshd, lxc-ubuntu, lxc-ubuntu-cloud

Pilih favorit Anda, lalu buat wadahnya. Contoh ini menggunakan Slackware.

$ sudo lxc-create --name slackware --template slackware 

Menyaksikan template dieksekusi hampir sama mendidiknya dengan membangunnya dari awal; itu sangat bertele-tele, dan Anda dapat melihat bahwa lxc-create menyetel "root" wadah ke /var/lib/lxc/slackware/rootfs dan beberapa paket sedang diunduh dan diinstal ke direktori itu.

Membaca file template memberi Anda ide yang lebih baik tentang apa yang terlibat:LXC menyiapkan pohon perangkat minimal, file spool umum, tabel sistem file (fstab), file init, dan sebagainya. Ini juga mencegah beberapa layanan yang tidak masuk akal dalam wadah (seperti udev untuk deteksi perangkat keras) untuk memulai. Karena template mencakup spektrum yang luas dari konfigurasi Linux yang khas, jika Anda berniat untuk mendesain sendiri, adalah bijaksana untuk mendasarkan pekerjaan Anda pada template yang paling dekat dengan apa yang ingin Anda atur; jika tidak, Anda pasti membuat kesalahan penghilangan (jika tidak ada yang lain) bahwa proyek LXC telah tersandung dan diperhitungkan.

Setelah Anda menginstal lingkungan sistem operasi minimal, Anda dapat memulai container Anda.

$ sudo lxc-start --name slackware \
--rcfile ~/mycontainer.conf

Anda telah memulai penampung, tetapi Anda belum melampirkannya. (Tidak seperti contoh dasar sebelumnya, kali ini Anda tidak hanya menjalankan shell, tetapi juga sistem operasi dalam wadah.) Lampirkan dengan nama.

$ sudo lxc-attach --name slackware
#

Periksa apakah alamat IP lingkungan Anda cocok dengan yang ada di file konfigurasi Anda.

# /usr/sbin/ip addr TAMPILKAN | grep eth
34:eth0@if35: mtu 1500 [...] 1000
link/ether 4a:49:43:49:79:bd brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 192.168.168.167/24 brd 192.168.168.255 lingkup eth0 global

Keluar dari wadah, dan matikan.

# exit
$ sudo lxc-stop slackware

Menjalankan container dunia nyata dengan LXC

Dalam kehidupan nyata, LXC memudahkan untuk membuat dan menjalankan container yang aman dan terlindungi. Kontainer telah berkembang pesat sejak diperkenalkannya LXC pada tahun 2008, jadi gunakan keahlian pengembangnya untuk keuntungan Anda.

Sementara instruksi LXC di linuxcontainers.org mempermudah prosesnya, tur sisi manual ini akan membantu Anda memahami apa yang terjadi di balik layar.


Linux
  1. Memulai NetworkManager di Linux

  2. Menjadwalkan tugas dengan perintah cron Linux

  3. Lakukan matematika di shell Linux dengan GNU bc

  1. Kelola koneksi jaringan dari baris perintah Linux dengan nmcli

  2. Memulai dengan firewall Linux

  3. Apakah distribusi Linux masih penting dengan container?

  1. Jadwalkan tugas dengan Linux pada perintah

  2. Analisis kernel Linux dengan ftrace

  3. Pemikiran tentang Memantau perubahan file dengan Linux melalui jaringan