Ana içeriğe geç

Incus

Bu makalede

Bilgi

Incus, açık kaynaklı bir sistem konteyneri ve sanal makine yöneticisidir. LXD'nin bir çatallamasıdır (fork) ve Linux konteynerlerini ve sanal makineleri tek bir platformda yönetmek için basit ama güçlü bir araç sağlar.

Incus. Temel Özellikler

  • Konteyner ve VM Yönetimi: Incus, tek bir arayüz üzerinden Linux sistem konteynerlerini ve tam donanımlı QEMU/KVM sanal makinelerini çalıştırmanıza olanak tanır.
  • Süreç İzolasyonu: Konteynerler, kendi dosya sistemleri, ağ arayüzleri ve süreçlerine sahip izole bir ortamda çalışır.
  • Ağ Yetenekleri: Çeşitli ağ türleri için yerleşik destek - köprüler, NAT, VLAN'lar, konteynerler için örtü ağları (overlay networks).
  • Depolama Yönetimi: Farklı arka uçları (dir, btrfs, ZFS, LVM) destekleyen esnek depolama havuzu sistemi.
  • Anlık Görüntüler ve Göç (Migration): Konteyner durumunun anlık görüntülerinin oluşturulması, hizmetleri durdurmadan ana bilgisayarlar arasında canlı göç.
  • Yapılandırma Profilleri: Önceden tanımlanmış parametrelerle konteynerlerin hızlı dağıtımı için yeniden kullanılabilir profiller.
  • Kaynak Kısıtlaması: Her konteyner için CPU, bellek, disk I/O ve ağ bant genişliği üzerinde hassas kontrol.
  • REST API: Otomasyon ve harici sistemlerle entegrasyon için tam özellikli HTTP API.
  • Web Arayüzü: Görsel altyapı kontrolü için yerleşik web yönetim paneli.
  • Görüntü Kütüphanesi: Çeşitli Linux dağıtımlarının hazır görüntülerinden oluşan kapsamlı bir koleksiyona erişim.
  • Kümeleme (Clustering): Dağıtık yönetim için birden fazla ana bilgisayarın tek bir küme halinde birleştirilebilmesi.

Çalıştırma Özellikleri

ID Yazılım Adı Uyumlu OS VM BM VGPU GPU Min CPU (Çekirdekler) Min RAM (GB) Min HDD/SSD (GB) Özel Alan Adı Aktif
234 Linux Containers Incus Debian 13 + + + + 2 2 50 Hayır SİPARİŞ VER

Temel Incus Yolları ve Dosyaları:

  • Ana Yapılandırma Dosyası: /etc/default/incus
  • Veri Dizin: /var/lib/incus
  • Depolama Havuzları: /var/lib/incus/storage-pools/
  • Konteynerler: /var/lib/incus/containers/
  • Görüntüler: /var/lib/incus/images/
  • Günlük Dosyası: /var/log/incus/incusd.log
  • Sistem Hizmetleri: /usr/lib/systemd/system/incus*.service
  • Sysctl Yapılandırması: /etc/sysctl.d/50-incus.conf
  • Kullanıcı Yapılandırması: /root/.config/incus/

Not

Aksi belirtilmedikçe, yazılımın geliştiricinin sitesinden veya işletim sistemi depolarından en son sürümünü varsayılan olarak kuruyoruz.

Incus Dağıtıldıktan Sonra Başlangıç

Ödeme yapıldıktan sonra, kayıt sırasında belirtilen adrese sunucunun çalışmaya hazır olduğunu bildiren bir e-posta bildirimi gönderilecektir. Bu e-postada VPS IP adresi ve erişim için kimlik bilgileri yer alacaktır. Şirketimizin müşterileri ekipmanları Sunucu Yönetim Paneli ve APIInvapi üzerinden yönetir.

Kimlik doğrulama verileri, sunucu yönetim panelinin Configuration >> Tags sekmesinde veya gönderilen e-postada bulunabilir:

  • Incus Web Arayüzüne Erişim Bağlantısı: webpanel etiketinde (8443 portu, HTTPS)

Önemli

Web arayüzüne erişmek için HTTPS kullanmanız ve tarayıcınızda kendi kendine imzalı sertifikayı kabul etmeniz gerekir.

Incus web arayüzüne ilk erişimde, kendi kendine imzalı sertifika nedeniyle tarayıcı güvenli olmayan bir bağlantı konusunda uyarıda bulunacaktır. Devam etmek için sertifikayı kabul etmelisiniz:

Sertifika kabul edildikten sonra giriş sayfası açılacaktır. Kimlik doğrulama sürecini başlatmak için Login with TLS düğmesine tıklayın:

Sistem sizi mevcut bir sertifika ekleme sayfasına yönlendirecektir:

Trust token sekmesini seçin ve talimatları izleyin:

  1. Sunucu terminalinde, bir belirteç (token) oluşturmak için komutu çalıştırın:

    incus config trust add myclient
    

  2. Sistem, kopyalanması gereken bir belirteç oluşturacaktır:

  3. Elde edilen belirteci kimlik doğrulama sayfasındaki ilgili metin alanına yapıştırın ve Import düğmesine tıklayın.

Başarılı kimlik doğrulama sonrasında, örneklerin (instances) listesini içeren ana web arayüzü sayfası açılacaktır.

Web Arayüzü Üzerinden Yeni Konteyner Oluşturma

Yeni bir konteyner oluşturmak için arayüzün sağ üst köşesindeki Create instance düğmesine tıklayın:

Birkaç yapılandırma bölümü içeren bir örnek oluşturma formu açılacaktır. Temel bir görüntü seçmek için Browse images düğmesine tıklayın. Dağıtım, sürüm, varyant, mimari ve tür filtrelerine sahip bir görüntü seçme penceresi açılacaktır:

Aşağıdaki yapılandırma bölümleri mevcuttur:

  • Main configuration — temel konteyner parametreleri: ad, açıklama, örnek türü (konteyner veya sanal makine), temel görüntü ve atanmış profiller;
  • Devices — konteyner cihaz yönetimi:
  • Disk — disk cihazı ve bağlama noktası yapılandırması;
  • Network — ağ arayüzü yapılandırması;
  • GPU — grafik hızlandırıcıların bağlanması;
  • Proxy — ana bilgisayar ve konteyner arasında port yönlendirme yapılandırması;
  • Other — ek cihaz türleri;
  • Resource limits — kaynak kısıtlaması: işlemci (CPU), RAM, disk I/O işlemleri;
  • Security policies — güvenlik politikaları: izolasyon yapılandırması, ayrıcalıklar ve güvenlik profilleri (AppArmor, SELinux);
  • Snapshots — yedekleme ve kurtarma için konteyner durumu anlık görüntü yönetimi;
  • Migration — ana bilgisayarlar arasında konteyner göç parametreleri;
  • Boot — önyükleme ayarları: önyükleme cihazı sırası, sistem başlatıldığında otomatik başlatma;
  • Cloud init — cloud-init aracılığıyla otomatik konteyner başlatma yapılandırması (kullanıcılar, ağ, paketler, betikler).

Select düğmesine tıklayarak istenen görüntüyü seçin:

Bir görüntü seçtikten sonra temel parametreleri doldurun:

  • Instance name — konteyner adı;
  • Description — açıklama (isteğe bağlı);
  • Instance type — örnek türü (Container veya Virtual Machine);
  • Profiles — yapılandırma profilleri.

Konteyneri oluşturulduktan hemen sonra başlatmak için Create and start düğmesine tıklayın. Başlatmadan oluşturmak için Create düğmesini kullanın.

Konteyner Durum İzleme

Konteyner dağıtımı sırasında görüntü indirme ilerlemesi gösterilir. İndirme ilerlemesi gösterimiyle "Setting up" durumu, mevcut örnek oluşturma ilerlemesini gösterir. Kurulum tamamlandıktan sonra durum, yeşil bir göstergeli "Running" olarak değişecektir:

Hizmet Yönetimi

Durumu kontrol etme:

systemctl status incus

Hizmeti yeniden başlatma:

systemctl restart incus

Hizmeti durdurma:

systemctl stop incus

Hizmeti başlatma:

systemctl start incus

Günlükleri görüntüleme:

journalctl -u incus -f
tail -f /var/log/incus/incusd.log

Başlangıç Altyapı Kurulumu

Sunucu dağıtıldıktan sonra, başlangıç Incus altyapı kurulumunun yapılması önerilir.

Depolama Havuzu Oluşturma

Bir depolama havuzu, konteyner verilerinin nerede saklanacağını tanımlar:

incus storage create default dir source=/var/lib/incus/storage-pools/default

Oluşturulan depolama havuzlarını kontrol etme:

incus storage list

Bir havuz hakkında ayrıntılı bilgi görüntülemek için:

incus storage show default

Ağ Yapılandırması

Otomatik IPv4 adres atamasına sahip konteynerler için bir NAT köprüsü oluşturma:

incus network create incusbr0 ipv4.address=auto ipv6.address=none

Ağ ayarlarını kontrol etme:

incus network list

Ağ yapılandırmasını görüntüleme:

incus network show incusbr0

Varsayılan Profilin Yapılandırılması

default profili, yeni konteynerler için temel yapılandırmayı tanımlar. Profile bir kök disk ekleme:

incus profile device add default root disk path=/ pool=default

Profile bir ağ arayüzü ekleme:

incus profile device add default eth0 nic network=incusbr0

Profil yapılandırmasını kontrol etme:

incus profile show default

Konteyner Oluşturma ve Yönetme

Konteyner Oluşturma

Kaynak sınırlarıyla bir Debian 12 konteyneri oluşturma örneği:

incus launch images:debian/12 deb12 --profile default \
  -c limits.cpu=2 -c limits.memory=2GiB

Komut parametreleri:

  • images:debian/12 - genel depodan görüntü
  • deb12 - konteyner adı
  • --profile default - varsayılan profil kullanımı
  • -c limits.cpu=2 - 2 CPU çekirdeği sınırı
  • -c limits.memory=2GiB - 2 GB bellek sınırı

Konteynerleri Görüntüleme

Tüm örneklerin listesi:

incus list

Çıktı, her konteynerin durumu, IP adresleri ve türü hakkında bilgi içerecektir.

Konteyner Durum Yönetimi

Bir konteyneri başlatma:

incus start <name>

Bir konteyneri durdurma:

incus stop <name>

Bir konteyneri yeniden başlatma:

incus restart <name>

Bir konteyneri silme (durdurulması gerekir):

incus delete <name>

Çalışan bir konteyneri zorla silme:

incus delete <name> --force

Konteyner Erişimi

Bash üzerinden bağlanma:

incus exec deb12 -- bash

TTY konsoluna bağlanma:

incus console deb12

Konsoldan çıkmak için Ctrl+a q tuş kombinasyonunu kullanın.

Port Yönlendirme

Bir konteynerin içindeki hizmetlere harici ağdan erişmek için, bir proxy cihazı aracılığıyla port yönlendirme kullanılır:

incus config device add deb12 web proxy \
  listen=tcp:0.0.0.0:8080 connect=tcp:127.0.0.1:80

Bu komut, ana bilgisayarın 8080 portunu konteynerin 80 portuna yönlendirir.

Birden fazla port için örnek:

HTTP:

incus config device add mycontainer http proxy \
  listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80

HTTPS:

incus config device add mycontainer https proxy \
  listen=tcp:0.0.0.0:443 connect=tcp:127.0.0.1:443

SSH:

incus config device add mycontainer ssh proxy \
  listen=tcp:0.0.0.0:2222 connect=tcp:127.0.0.1:22

Konteyner Yapılandırmasını Yönetme

Yapılandırmayı Görüntüleme

Tam genişletilmiş konteyner yapılandırmasını görüntüleme:

incus config show <name> --expanded

Profiller olmadan temel yapılandırmayı görüntüleme:

incus config show <name>

Parametreleri Değiştirme

Yapılandırma parametrelerini ayarlama:

CPU kısıtlaması:

incus config set <name> limits.cpu=4

Bellek kısıtlaması:

incus config set <name> limits.memory=4GiB

Disk I/O kısıtlaması:

incus config set <name> limits.disk.priority=5

Konteyner otomatik başlatma:

incus config set <name> boot.autostart=true

Cihaz Ekleme

Cihaz ekleme için genel sözdizimi:

incus config device add <name> <device-name> <type> key=value

Örnekler:

Ek bir disk ekleme:

incus config device add mycontainer data disk \
  source=/data/mycontainer pool=default

Ek bir ağ arayüzü ekleme:

incus config device add mycontainer eth1 nic \
  network=incusbr1 name=eth1

Bir konteynerde ana bilgisayar dizinini bağlama:

incus config device add mycontainer shared disk \
  source=/host/path path=/container/path

Bir cihazı kaldırma:

incus config device remove <name> <device-name>

Anlık Görüntüler ve Göç ile Çalışma

Anlık Görüntü Oluşturma

Anlık görüntüler, sonraki kurtarma için konteyner durumunu kaydetmenize olanak tanır:

incus snapshot <name> <snapshot-name>

Örnek:

incus snapshot deb12 before-update

Konteyner anlık görüntüleri listesi:

incus info <name>

Anlık Görüntüden Geri Yükleme

incus restore <name> <snapshot-name>

Örnek:

incus restore deb12 before-update

Bir anlık görüntüyü silme:

incus delete <name>/<snapshot-name>

Yeniden Adlandırma ve Kopyalama

Bir konteyneri yeniden adlandırma:

incus move <name> <newname>

Aynı ana bilgisayarda bir konteyneri kopyalama:

incus copy <name> <newname>

Bir konteyneri başka bir Incus ana bilgisayarına kopyalama:

incus copy <name> <remote>:<newname>

Uzak ana bilgisayarlarla çalışmak için önce bir uzak bağlantı eklemelisiniz:

incus remote add myremote https://remote-ip:8443

Görüntüleri Yönetme

Görüntüleri Görüntüleme

Yerel görüntüler listesi:

incus image list

Uzak depodaki görüntüler listesi:

incus image list images:

Belirli bir dağıtımı arama:

incus image list images: debian
incus image list images: ubuntu

Görüntüleri Kopyalama

Otomatik güncelleme ile genel depodan bir görüntü kopyalama:

incus image copy images:debian/12 local: --auto-update

Takma adla bir görüntü kopyalama:

incus image copy images:debian/12 local: --alias debian12

Konteynerden Görüntü Oluşturma

incus publish <container-name> --alias my-custom-image

Görüntüleri Silme

incus image delete <image-fingerprint>

veya takma adla:

incus image delete <alias>

Ağ Etkileşimi

Ağ Yönetimi

Ağlar listesi:

incus network list

Ağ yapılandırmasını görüntüleme:

incus network show <network-name>

Yeni bir ağ oluşturma:

# Köprü ağı oluşturma
incus network create mybr0 \
  ipv4.address=10.10.10.1/24 \
  ipv4.nat=true \
  ipv6.address=none


# Macvlan ağı oluşturma
incus network create mymacvlan \
  type=macvlan \
  parent=eth0

Bir ağı düzenleme:

incus network edit <network-name>

Bir ağı silme:

incus network delete <network-name>

Ağ Yönlendirme Kuralları

Port yönlendirme için bir yönlendirme kuralı oluşturma:

incus network forward create incusbr0 <external-ip>
incus network forward port add incusbr0 <external-ip> tcp 80 <container-ip> 80

Depolama Yönetimi

Depolama Havuzlarını Yönetme

Havuzlar listesi:

incus storage list

Havuz bilgilerini görüntüleme:

incus storage show <pool-name>

Bir depolama havuzu oluşturma:

Dir tabanlı havuz:

incus storage create mypool dir source=/var/lib/incus/pools/mypool

Btrfs havuzu:

incus storage create mybtrfs btrfs source=/dev/sdb

ZFS havuzu:

incus storage create myzfs zfs source=/dev/sdc

Bir havuzu düzenleme:

incus storage edit <pool-name>

Bir havuzu silme:

incus storage delete <pool-name>

Birimleri Yönetme

Özel bir birim oluşturma:

incus storage volume create <pool-name> <volume-name>

Bir havuzdaki birimler listesi:

incus storage volume list <pool-name>

Bir birimi bir konteynere bağlama:

incus config device add <container> <device-name> disk \
  pool=<pool-name> \
  source=<volume-name> \
  path=/mount/path

Bir birimi kopyalama:

incus storage volume copy <pool>/<volume> <pool>/<new-volume>

Bir birimi silme:

incus storage volume delete <pool-name> <volume-name>

NAT ve Yönlendirmeyi Yapılandırma

Bazı durumlarda, konteynerlere harici ağa erişim sağlamak için manuel NAT ve yönlendirme kuralı yapılandırması gerekebilir.

nftables'a Geçiş

update-alternatives --set iptables /usr/sbin/iptables-nft
update-alternatives --set ip6tables /usr/sbin/ip6tables-nft
update-alternatives --set arptables /usr/sbin/arptables-nft
update-alternatives --set ebtables /usr/sbin/ebtables-nft

IP yönlendirmesini etkinleştirme

sysctl -w net.ipv4.ip_forward=1

Kalıcı uygulama için /etc/sysctl.conf dosyasına ekleyin:

net.ipv4.ip_forward=1

Değişikliklerden sonra Incus'u yeniden başlatma:

systemctl restart incus

NAT Tablosunu Yapılandırma

NAT tablosu ve POSTROUTING zincirini oluşturma:

nft add table ip nat
nft add chain ip nat POSTROUTING '{ type nat hook postrouting priority srcnat; }'

Konteyner alt ağı için masquerade kuralı ekleme:

nft add rule ip nat POSTROUTING oifname "ens1" ip saddr 10.1.4.0/24 counter masquerade

Not

ens1'i harici ağ arayüzü adınızla ve 10.1.4.0/24'ü Incus köprü alt ağınızla değiştirin.

FORWARD Zincirini Yapılandırma

Filtre tablosu ve FORWARD zincirini oluşturma:

nft add table ip filter
nft add chain ip filter FORWARD '{ type filter hook forward priority 0; policy accept; }'

Trafik izni için kurallar ekleme:

Konteynerlerden dışa doğru trafiğe izin verme:

nft insert rule ip filter FORWARD iifname "incusbr0" oifname "ens1" accept

Kurulmuş/ilişkili trafiğe geri dönüşe izin verme:

nft insert rule ip filter FORWARD iifname "ens1" oifname "incusbr0" ct state established,related accept

nftables Kurallarını Kontrol Etme

Tüm kuralları görüntüleme:

nft list ruleset

Kuralları kaydetme (Debian/Ubuntu için):

Kuralları kaydetme paketi yükleme:

apt-get install nftables

Mevcut kuralları kaydetme:

nft list ruleset > /etc/nftables.conf

Otomatik yüklemeyi etkinleştirme:

systemctl enable nftables

Not

Tüm Incus yetenekleri hakkında ayrıntılı bilgi resmi geliştirici dokümantasyonunda yer almaktadır.

API Kullanarak Incus ile Sunucu Siparişi