Linux Kapsayıcılarını LXC ve LXD ile Kullanma

Eski güzel günlerde, bir işletim sistemi kurmak, tüm donanım bileşenlerini bir araya getirmek, yeni bilgisayarınızı bir çevre birim sürücüsüne bir kurulum diskiyle ateşlemek ve kurulum sürecini serbest bırakmak anlamına geliyordu. Toplam geçen süre saatler ve haftalar arasında herhangi bir yerde çalışabilir.

Bu günlerde kendi kendime şöyle diyebilirim: "Bunu CentOS'un belirli bir sürümünü çalıştıran bir sunucuda test etmekten çekinmem" ve - bir dizi değişkene bağlı olarak ve orijinal görüntünün zaten indirilmiş olduğunu varsayarsak - tam işlevli 30 saniye içinde sanal sistem hazır. Kesin sonuçlarınız değişebilir, ancak o kadar değil.

Tüm bunların nasıl çalıştığını, bu makalenin dayandığı yeni Pluralsight "Linux Sistem Optimizasyonu" kursunda görebilirsiniz.

Tüm bu değişime ne sebep oluyor? Sanallaştırma. Ve özellikle konteyner sanallaştırma.

Sanallaştırılmış bir işletim sistemi, geleneksel bir makineyi başlatmak için ihtiyaç duyacağınız tüm yazılım kitaplıklarını, ikili dosyaları ve yapılandırma dosyalarını içeren bir dosya sistemidir. Sadece bu belirli dosya sistemi, bilgisayarınızın açılırken okuyacağı kök veya önyükleme bölümünde değil, depolama biriminizin başka bir bölümünde depolanır.

Ve sanal bilgisayarınızı "güçlendirmek", bazı yazılımların dosyaları kendi donanımları üzerinde kendi başlarına çalıştıklarını zekice kandırdığında, ana bilgisayar işletim sistemiyle gerçekten alan ve kaynakları paylaştıklarında ve belki de başka sanal bilgisayarlar.

Genel olarak, sunucu sanallaştırma yönetimi için kullanılan iki tür yazılım sistemi vardır: hiper yönetici ve konteyner.

Hipervizörler, konuk sanal makinelerin çıplak metal bir sunucuyu taklit eden sistem donanımına erişimi olan yalıtılmış bir ortam oluşturmasına izin veren bir soyutlama katmanı sağlar. Bu, hiper yönetici sanal makinelerinin, temel donanımınızla uyumlu herhangi bir işletim sisteminden oluşturulabileceği anlamına gelir. Ama aynı zamanda daha fazla alan ve daha fazla bellek kullanacakları ve kaynakları hesaplayacakları anlamına da geliyor.

Kapsayıcı Sanallaştırma

Diğer yandan, kapsayıcılar, ana bilgisayarın işletim sistemi çekirdeğini paylaşır ve cgroups gibi sistem araçları tarafından yönetilen dikkatlice güvenli ve izole edilmiş alanlarda bulunur. Çekirdeği paylaştıkları için, kaplar tarafından tüketilen bellek ve sistem kaynakları, kesinlikle hiçbir şey israf edilmeden, gerçekten minimum düzeyde olabilir. Ve göreceğiniz gibi, konteyner uygulamalarını çalıştırırken elde edeceğiniz hızlar nefes kesici olacak.

Geçtiğimiz birkaç yıl içinde, kapsayıcıyla ilgili birçok ilgi Docker'a ve son zamanlarda Google'ın kapsayıcı düzenleme aracı Kubernetes'e odaklandı. Aslında Kubernetes, kurumsal ölçekli mikro hizmet mimarileri için çok uygundur.

Ancak, kapsayıcı modelinin hiçbir yere gitmemiş daha eski ve muhtemelen daha olgun bir uygulaması var. Linux Container Project, LXC ve daha yeni araç seti olan LXD, birçok kişinin onu Kubernetes'ten daha iyi bir aday haline getireceğini iddia ettiği güçlü yönlere sahiptir. Özellikle, LXC, test ve uygulama geliştirme için hafif ve hızlı korumalı ortamlar oluşturmada mükemmeldir.

Bu makalede, size LXD'yi nasıl kuracağınızı, ultra küçük Alpine Linux çalıştıran basit bir konteyneri nasıl hazırlayacağınızı ve başlatacağınızı ve ardından yeni konteynırınızda bir kabuk oturumunu nasıl açacağınızı göstereceğim. Ayrıca diğer dağıtımların birden çok sürümünün nasıl bulunacağını ve başlatılacağını da açıklayacağım.

Size hemen söyleyebileceğim bir şey, LXC'yi ne zaman öğretirsem, öğrencilerin kapları kullanmanın ne kadar güçlü ve verimli olabileceği konusunda şaşkınlıkla yanıt vermeleridir.

Tüm bunları bitirdiğimizde, öğrendiğiniz veya çalıştığınız her şeyi saniyeler içinde test etmek için makineleri çalıştırabileceksiniz. Bir deney kötüye gittiğinde, bir kabı anında kapatıp kaldırabilir ve yerine başka bir tane oluşturabilirsiniz. Artık öğrenmemek için hiçbir bahane yok.

LXD Konteyner Oluşturma

LXC'yi Ubuntu 18.04 makinesinin yeni bir yüklemesi üzerinde çalıştırmaya başlayacağız. Bu demoda, bir LXD ortamı kurup başlatacağız ve ardından bir Alpine Linux konteyneri indirmek ve başlatmak için LXC komut satırı arayüzünün LXD sürümünü kullanacağız. Her şeyin işe yaradığını teyit edeceğiz ve ardından çevrenin nasıl doldurulduğunu görmek için etrafa biraz göz atacağız.

LXD'yi yüklemek için anlık paket yöneticisini kullanacağım çünkü artık resmi öneri bu. Ve sadece LXD için değil, unutmayın: her türlü uygulama snap veya AppImmage ve Flatpak gibi alternatif yöneticilere doğru kayıyor. Debian yeteneğimi hala seviyorum ama tüm dünyayla savaşamazsın.

$ sudo snap install lxd 

Yine, LXC API'sini yönetmek için tasarlanmış güncellenmiş bir araç seti olan LXD, tüm normal LXC bağımlılıklarını içeren bir pakette gelir. Bir yükleme komutu ve işimiz bitti.

LXC ortamını lxd init komutunu kullanarak başlatmak önemlidir. İşleri kendiniz manuel olarak kurabilirsiniz, ancak bu şekilde her şeyi doğru yapma olasılığınız daha yüksektir. Başlatma süreci size bir dizi soru soracak ve şimdilik en azından varsayılan yanıtların hepsi çalışacak.

$ sudo lxd init 

Bu bittiğinde, ilk konteynırınızı oluşturmaya hazırız. Hangi Linux dağıtımı ve sürümünü istersek istesek, görseli bulup indirmemiz gerekecek. LXC projesi, images.linuxcontainers.org adresinde oldukça geniş bir görüntü yelpazesi bulundurmaktadır. Her dağıtımın genellikle birden fazla sürümü olduğunu görebilirsiniz, bu da hemen hemen atabileceğiniz herhangi bir yazılımla çalışacak kapsayıcılar oluşturmanıza izin verir.

Alpine Linux'un en son sürümünü kullanacağım çünkü gerçekten küçük. Ubuntu ve CentoOS gibi büyük çocuklar dahil olmak üzere istediğiniz herhangi bir görseli kullanmaktan çekinmeyin. Alpine, elbette çok hızlı indirilecek.

Ancak bunu yapmadan önce, görüntünüzü elde etmek için gerekli komut satırı sözdizimini nasıl bulacağınızı söylemeliyim.

LXD web sitesinden alınan bu ekran görüntüsünde görebileceğiniz gibi, sayfanın kendisinden ihtiyaç duyacağınız üç bilgi alabilirsiniz: dağıtımın adı - Alpine, bu durumda - sürüm numarası - 3.10 - ve mimari . AMD64'ün peşindeyiz.

Artık şu launchkomutu çalıştırarak indirmeyi tetiklemeye hazırız :

$ sudo lxc launch images:alpine/3.10/amd64 demo 

Teknik olarak bir LXD arayüzü olmasına rağmen sözdiziminin "lxc" olduğuna dikkat edin. "images", LXC'ye imajımızın daha önce gördüğümüz kamuya açık depoda yaşadığını söyler. Üç bitlik verimiz - dağıtım adı, sürüm numarası ve mimari, eğik çizgilerle ayrılmış olarak girilir. Konteynırımın adı olarak "demo" kullanacağım. Tek ihtiyacımız olan bu olmalı.

Ne kadar hızlı indirildiğine bakarak Alpine'ın ne kadar küçük olduğunu görebilirsiniz. İnternet bağlantım o kadar hızlı değil ve kayıtla herhangi bir oyun oynamadım. Çalıştığını doğrulamak için, şu anda kurulu olan tüm kapsayıcıları listelemek için "lxc ls" komutunu çalıştıracağım. Sadece bir tane var. Ve şu anki durumu "çalışıyor".

sudo lxc ls +------+---------+----------------------+------------+-----------+ | NAME | STATE | IPV4 | TYPE | SNAPSHOTS | +------+---------+----------------------+------------+-----------+ | demo | RUNNING | 10.125.45.119 (eth0) | PERSISTENT | 0 | +------+---------+----------------------+------------+-----------+ 

"Lxc exec" komutunu kullanarak bir kapsayıcıda oturum açma olmayan bir kök oturumu açabilirsiniz. Sadece konteyner adını belirtin ve ardından LXC'ye sh yorumlayıcısını kullanarak bir kabuk çalıştırmak istediğinizi söyleyin ( /bin/bashher iki şekilde de bir Ubuntu veya CentOS konteyneri ile çalışmayı tercih edebilirsiniz). Evde takip ediyorsanız kendiniz de göreceğiniz için, normal bir Linux komut istemimiz var ve Linux-y artık her şey mümkün.

$ sudo lxc exec demo sh ~ # 

Bunun yerine komutu yazarak tam bir kabuğu açmadan da tek bir komutu çalıştırabilirsiniz sh.

$ sudo lxc exec demo ls / bin etc lib mnt proc run srv tmp var dev home media opt root sbin sys usr 

Kullanmak istediğiniz herhangi bir zamanda kabuğun dışına çıkıp exitev sahibinize geri dönebilirsiniz. Burada, çalışan konteynerleri listelemenin yanı sıra, herhangi bir depolama havuzunu da listeleyebilirim. Başlatma sırasında oluşturulan varsayılan havuz oradadır ve disk görüntüsünün nerede depolandığını görebiliriz. / var / lib / lxd, varsayılan olarak tüm LXC kaynaklarının tutulduğu yerdir.

$ sudo lxc storage ls +---------+-------------+--------+--------------------------------+---------+ | NAME | DESCRIPTION | DRIVER | SOURCE | USED BY | +---------+-------------+--------+--------------------------------+---------+ | default | | btrfs | /var/lib/lxd/disks/default.img | 3 | +---------+-------------+--------+--------------------------------+---------+ 

Benzer şekilde tüm ağlarımı listeleyebilirim. Bu sistemde birkaç ağ köprüsü var (gördüğünüz gibi biraz oynuyorum). Ana Ubuntu sunucusu tarafından kullanılan fiziksel enp0s3 köprüsü de var. Aramızda kalsa da, bu fiziksel de değil, çünkü bu aslında Oracle'ın Sanal Kutusunda çalışan bir VM.

$ lxc network ls +---------+----------+---------+-------------+---------+ | NAME | TYPE | MANAGED | DESCRIPTION | USED BY | +---------+----------+---------+-------------+---------+ | enp0s3 | physical | NO | | 1 | +---------+----------+---------+-------------+---------+ | lxdbr0 | bridge | YES | | 1 | +---------+----------+---------+-------------+---------+ | mynet | bridge | YES | | 0 | +---------+----------+---------+-------------+---------+ | testbr0 | bridge | YES | | 1 | +---------+----------+---------+-------------+---------+ 

If we needed to, we could easily add a new virtual interface to our container using the "lxc network attach" command. Here, I'll specify the physical network and then the name of our container.

$ lxc network attach enp0s3 demo 

With that done, you could open a new shell in the container to see what's changed. There should now be an eth1 interface listed. You may need to reboot for all the changes to take full effect. By doing that you can also marvel at just how fast this thing can reboot itself - for all intents and purposes, it'll happen faster than you can type your exec command to open a new shell.

Enjoy your new environment!

This article is based on content in my Pluralsight course, "Linux System Optimization." There's much more administration goodness in the form of books, courses, and articles available at bootstrap-it.com.