Apakah ada cara untuk mengkonfigurasi kontainer LXD dengan konfigurasi cloud pada waktu penyediaan?


10

Secara khusus, dengan alat CLI - tidak openstack.

Saya melihat apa yang terlihat seperti setup dev lokal dengan LXD tapi saya datang dengan tangan kosong ketika datang untuk mengkonfigurasi kontainer baru.

Apakah ada cara idiomatik (atau sebaliknya) untuk mengkonfigurasi kontainer LXD? Haruskah saya melihat sesuatu yang lebih abadi seperti gambar buruh pelabuhan?

Terima kasih. Sumber daya atau petunjuk apa pun akan dihargai.

Jawaban:


13

Jadi ada beberapa cara yang bisa Anda lakukan, baik secara langsung untuk wadah:

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

Atau bahkan lebih pendek:

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

Atau melalui profil:

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

Bagaimana file .sh dapat digunakan alih-alih .yml? Apakah sudah ada tutorial tentang topik ini?
Greg

Di atas mengacu pada pertanyaan ini: stackoverflow.com/questions/44456522
Greg

3

Satu liner yang saya gunakan hari ini, yang satu ini menetapkannya di profil default untuk kontainer baru:

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

Yang ini mengaturnya dalam wadah yang sudah ada, tetapi berhati-hatilah itu tidak akan bekerja pada wadah yang sudah di-boot karena kunci SSH hanya bisa dilakukan pada boot pertama:

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


3

Saya memiliki pertanyaan yang sedikit lebih spesifik daripada OP tetapi butuh beberapa saat untuk mencari tahu apa yang saya lakukan salah. Saya pikir saya akan mempostingnya di sini untuk membantu orang lain mengalami kekalahan yang sama.

Saya ingin pengaturan jaringan statis untuk wadah LXC / LXD Ubuntu 16.04 yang dihosting di Ubuntu 16.04. Saya mulai dengan mencoba apa yang ditulis Stéphane tetapi tidak berhasil. Yang saya dapatkan hanyalah wadah percobaan DHCP dengan tautan IPv6 lokal, karena tidak ada DHCP yang dilayani dalam konfigurasi saya.

YAML awal saya tampak (mirip) seperti berikut (diambil dari dokumentasi cloud-init ).

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

Dan saya memuat ini user.user-dataseperti yang dijelaskan di atas.

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

Baru setelah saya menemukan dokumentasi Stéphane di sumber LXC / LXD saya menyadari bahwa saya perlu memuat nilai tersebut user.network-config.

Jadi YAML terakhir saya terlihat (seperti) seperti ini.

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

Lalu saya memasukkan ini ke dalam user.network-configgantinya.

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

Sepertinya saya perlu menyimpan dua file berbeda per wadah: satu untuk memuat pengaturan jaringan user.network-config; dan satu untuk konfigurasi lain untuk dimuat ke dalam user.user-datakecuali saya dapat menemukan cara menggunakan satu file untuk semuanya.


Masalah lain yang saya temukan yang tidak jelas bagi saya sama sekali adalah mencoba mengkonfigurasi komponen non-jaringan secara otomatis.

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

YAML berikut diterapkan dengan perintah di atas (meskipun terlihat menggunakan benar lxc config show CONTAINER) tidak membuat apa pun di dalam wadah saya.

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

    Foo
    Bar

    path: /etc/foo.bar

Petunjuk yang terkubur dalam Format Input Data Pengguna, item 5: Cloud Config Data berbunyi:

dimulai dengan "#cloud-config"atau "Content-Type: text/cloud-config" Konten ini adalah data "cloud-config". Lihat contoh untuk contoh komentar dari format konfigurasi yang didukung.

Saya tidak percaya dokumentasi ini sangat jelas. Saya tidak bisa mendapatkan apa pun untuk bekerja menggunakan formulir "Content-Type: text / cloud-config" tetapi saya menemukan jika Anda meletakkannya #cloud-configdi baris pertama, YAML diuraikan. Saya hanya bisa berasumsi ada sesuatu yang tidak beres, baik pemahaman saya, atau pemrograman seseorang. Tidak masuk akal bagi saya bahwa YAML Anda telah secara eksplisit memuat nilai kunci user.user-dataharus digunakan sebagai apa pun selain data konfigurasi cloud. Mengapa lagi ada orang yang melakukan itu jika itu tidak dimaksudkan untuk konfigurasi cloud, dan karena itu mengapa komentar (yang bahkan tidak menggunakan sintaks shebang normal) diperlukan ?

Jadi, selain omong kosong, sintaks yang bekerja user.user-dataadalah:

#cloud-config

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

      Foo
      Bar

    path: /etc/foo.bar
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.