Czy istnieje sposób skonfigurowania kontenerów LXD z konfiguracją chmury w momencie udostępniania?

10

W szczególności z narzędziami CLI - nie openstack.

Patrzę na to, jak może wyglądać lokalna konfiguracja dewelopera z lxd, ale przychodzi mi z pustymi rękami, jeśli chodzi o konfigurowanie nowych kontenerów.

Czy są jakieś idiomatyczne (lub w inny sposób) sposoby konfiguracji kontenerów LXD? Czy powinienem patrzeć na coś bardziej niezmiennego, np. Obrazy dokerów?

Dzięki. Wszelkie zasoby lub wskazówki będą mile widziane.

ben schwartz
źródło

Odpowiedzi:

13

Można to zrobić na wiele sposobów, bezpośrednio dla kontenera:

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

Lub nawet krócej:

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

Lub poprzez profil:

lxc profile create dev
lxc profile set dev user.user-data - < cloud-init-config.yml
lxc launch ubuntu: CONTAINER -p default -p dev
stgraber
źródło
Jak można używać plików .sh zamiast .yml? Czy jest już dostępny samouczek na ten temat?
Greg
Powyższe odnosi się do tego pytania: stackoverflow.com/questions/44456522
Greg
3

Jedna linijka, z którą poszedłem dzisiaj, ta ustawia ją w domyślnym profilu dla nowych kontenerów:

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

Ten ustawia go w istniejącym kontenerze, ale uwaga: nie będzie działać na kontenerach, które już się uruchomiły, ponieważ klucz SSH jest wykonywany tylko przy pierwszym uruchomieniu:

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

Trent Lloyd
źródło
3

Miałem nieco bardziej szczegółowe pytanie niż OP, ale zajęło mi trochę czasu, aby zorientować się, co robię źle. Pomyślałem, że opublikuję go tutaj, aby pomóc każdemu, kto dostanie podobne zaklęcie.

Chciałem statycznych ustawień sieciowych dla kontenera LXC / LXD Ubuntu 16.04 hostowanego na Ubuntu 16.04. Zacząłem od wypróbowania tego, co napisał Stéphane, ale to nie działało. Skończyło się na domyślnym kontenerze próbującym DHCP z lokalnym łączem IPv6, ponieważ w mojej konfiguracji nie jest obsługiwany DHCP.

Mój początkowy YAML wyglądał (coś) w następujący sposób (wzięty z dokumentów inicjujących chmurę ).

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

I ładowałem to user.user-datatak, jak opisano powyżej.

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

Dopiero gdy znalazłem dokumentację Stéphane'a w źródle LXC / LXD , zdałem sobie sprawę, że muszę załadować tę wartość user.network-config.

Więc moja ostatnia YAML wyglądała (coś) tak.

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

Potem załadowałem to do user.network-config.

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

Wygląda na to, że będę musiał zachować dwa różne pliki na kontener: jeden do załadowania ustawień sieciowych user.network-config; i jedną inną konfigurację do załadowania, user.user-datachyba że znajdę sposób na użycie jednego pliku do wszystkiego.


Innym znalezionym przeze mnie problemem, który nie był dla mnie oczywisty, była próba automatycznej konfiguracji składników niesieciowych.

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

Następujące YAML zastosowane z powyższym poleceniem (pomimo poprawnego użycia lxc config show CONTAINER) nie utworzyło niczego w moim kontenerze.

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

    Foo
    Bar

    path: /etc/foo.bar

Wskazówka ukryta w formatach wprowadzania danych użytkownika, pozycja 5: Dane konfiguracji w chmurze brzmi:

zaczyna się od "#cloud-config"lub "Content-Type: text/cloud-config" Ta treść to dane „w chmurze”. Zobacz przykłady skomentowanych przykładów obsługiwanych formatów konfiguracji.

Nie sądzę, aby ta dokumentacja była bardzo przejrzysta. Nie mogłem dostać niczego do pracy za pomocą formularza „Content-Type: text / cloud-config”, ale znalazłem, że jeśli umieścisz #cloud-configw pierwszym wierszu, YAML zostanie przeanalizowany. Mogę tylko założyć, że coś jest nie tak, albo moje zrozumienie, albo czyjeś programowanie. Nie ma dla mnie sensu, że YAML został jawnie załadowany, ponieważ wartość klucza user.user-datapowinna być używana jako cokolwiek innego niż dane konfiguracyjne w chmurze. Dlaczego ktoś miałby to zrobić, gdyby nie była to konfiguracja w chmurze, a zatem dlaczego wymagany byłby komentarz (który nawet nie używa normalnej składni shebang) ?

Poza tym, nonsensem, składnia, która działała, user.user-datato:

#cloud-config

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

      Foo
      Bar

    path: /etc/foo.bar
Samuel Harmer
źródło