Lxd kapsayıcılarını sağlama zamanında bulut yapılandırmasıyla yapılandırmanın bir yolu var mı?


10

Özellikle, CLI araçları ile - açılmaz.

Ben lxd ile yerel bir dev kurulum gibi görünebilir bakıyorum ama yeni kapsayıcılar yapılandırma söz konusu olduğunda boş teslim geliyor.

Lxd kapsayıcılarını yapılandırmanın deyimsel (veya başka türlü) yolları var mı? Liman işçisi resimleri gibi daha değişmez bir şeye mi bakmalıyım?

Teşekkürler. Herhangi bir kaynak veya işaretçi takdir edilecektir.

Yanıtlar:


13

Dolayısıyla, doğrudan bir kapsayıcı için bunu yapmanın birden çok yolu vardır:

lxc init ubuntu: CONTAINER
lxc config set CONTAINER user.user-data - < cloud-init-config.yml
lxc start CONTAINER

Veya daha da kısa:

lxc launch ubuntu: CONTAINER --config=user.user-data="$(cat cloud-init-config.yml)"

Veya bir profil aracılığıyla:

lxc profile create dev
lxc profile set dev user.user-data - < cloud-init-config.yml
lxc launch ubuntu: CONTAINER -p default -p dev

.Yml yerine .sh dosyaları nasıl kullanılabilir? Bu konuda zaten bir eğitim var mı?
Greg

Yukarıda bu soruya atıfta bulunulmaktadır: stackoverflow.com/questions/44456522
Greg

3

Bugün gittiğim bir astar, bu yeni konteynerler için varsayılan profilde ayarlıyor:

echo -e "#cloud-config\nssh_authorized_keys:\n - $(cat ~/.ssh/id_rsa.pub)" | lxc profile set default user.user-data -

Bu, mevcut bir kapsayıcıya yerleştirir, ancak SSH anahtar öğeleri yalnızca ilk önyüklemede yapıldığından zaten önyüklenen kaplarda çalışmaz.

echo -e "#cloud-config\nssh_authorized_keys:\n - $(cat ~/.ssh/id_rsa.pub)" | lxc config set CONTAINER_NAME user.user-data -


3

OP'den biraz daha spesifik bir sorum vardı ama yanlış yaptığımı anlamak biraz zaman aldı. Başkalarının benzer şekilde güdük olmasına yardımcı olmak için buraya göndereceğimi düşündüm.

Ubuntu 16.04'te barındırılan bir LXC / LXD Ubuntu 16.04 konteyneri için statik ağ ayarları istedim. Stéphane'nin yazdıklarını deneyerek başladım ama işe yaramıyordu. Sonunda yapılandırmamda hiçbir DHCP sunulmadığından, IPv6 bağlantısı yerel olan varsayılan DHCP deneme konteyneri çıktı.

İlk YAML'm aşağıdaki gibi görünüyordu ( bulut init belgelerinden alınmış ).

network:
  version: 1
  config:
    - type: physical
      name: eth0
      subnets:
        - type: static
          address: 192.168.23.14/27
          gateway: 192.168.23.1
          dns_nameservers:
            - 192.168.23.2
            - 8.8.8.8
          dns_search:
            - exemplary.maas

Ve bunu user.user-datayukarıda anlatıldığı gibi yüklüyordum .

lxc config set CONTAINER user.user-data - < CONTAINER.cloud-init-config.yml

Stéphane'nin LXC / LXD kaynağındaki belgelerini bu değeri yüklemem gerektiğini fark edene kadar değildi user.network-config.

Son YAML'im böyle görünüyordu.

version: 1
config:
  - type: physical
    name: eth0
    subnets:
      - type: static
        address: 192.168.23.14/27
        gateway: 192.168.23.1
        dns_nameservers:
          - 192.168.23.2
          - 8.8.8.8
        dns_search:
          - exemplary.maas

Sonra user.network-configbunun yerine bunu yükledim .

lxc config set CONTAINER user.network-config - < CONTAINER.network-config.yaml

Kapsayıcı başına iki farklı dosya tutmam gerekecek gibi görünüyor: biri ağ ayarları yüklenecek user.network-config; ve user.user-dataher şey için tek bir dosya kullanmanın bir yolunu bulamadığım sürece , diğer yapılandırmaların yüklenebilmesi için bir tane.


Benim için açık olmayan başka bir sorun buldum, ağ dışı bileşenleri otomatik olarak yapılandırmaya çalışıyordu.

lxc config set CONTAINER user.user-data - < CONTAINER.user-data.yaml

Yukarıdaki komutla uygulanan aşağıdaki YAML (doğru kullanımına rağmen lxc config show CONTAINER) kabımın içinde hiçbir şey yaratmadı.

write_files:
  - content: |
    # My new /etc/foo.bar file

    Foo
    Bar

    path: /etc/foo.bar

Kullanıcı Veri Giriş Formatlarında gömülü ipucu , madde 5: Bulut Yapılandırma Verileri :

ile başlar "#cloud-config"veya "Content-Type: text/cloud-config" Bu içerik "cloud-config" verileridir. Desteklenen yapılandırma biçimlerinin açıklanmış bir örneği için örneklere bakın.

Bu belgelerin çok açık olduğuna inanmıyorum. "Content-Type: text / cloud-config" formunu kullanarak çalışmak için hiçbir şey alamadım ama #cloud-configilk satıra koyarsanız , YAML ayrıştırılır. Sadece bir şeyin doğru olmadığını varsayabilirim, ya benim anlayışım ya da birinin programlaması. Anahtarın değeri olarak açıkça yüklediğiniz YAML'nin user.user-databulut yapılandırma verilerinden başka bir şey olarak kullanılması bana mantıklı gelmiyor . Bulut yapılandırması olmasaydı neden başka biri bunu yapsın ve bu nedenle neden bir yorum (normal shebang sözdizimini kullanmıyor bile) gerekli ?

Yani, saçma bir yana, işe yarayan sözdizimi user.user-data:

#cloud-config

write_files:
  - content: |
      # My new /etc/foo.bar file

      Foo
      Bar

    path: /etc/foo.bar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.