มีวิธีกำหนดค่า lxd container ด้วยคลาวด์ config ณ เวลาจัดเตรียมหรือไม่?


10

โดยเฉพาะอย่างยิ่งกับเครื่องมือ CLI- ไม่ใช่ openstack

ฉันกำลังดูว่าการตั้งค่า dev ท้องถิ่นด้วย lxd อาจดูเหมือน แต่กำลังมาเปล่า ๆ มือเมื่อมันมาถึงการกำหนดค่าคอนเทนเนอร์ใหม่

มีวิธีการกำหนดค่าภาชนะ lxd (หรือวิธีอื่น) หรือไม่? ฉันควรจะดูสิ่งที่ไม่เปลี่ยนรูปเช่นนักเทียบท่าหรือไม่?

ขอบคุณ ทรัพยากรหรือตัวชี้จะได้รับการชื่นชม

คำตอบ:


13

ดังนั้นมีหลายวิธีที่คุณสามารถทำได้ทั้งโดยตรงกับคอนเทนเนอร์:

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

หรือสั้นกว่า:

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

หรือผ่านโปรไฟล์:

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

ไฟล์. sh สามารถนำมาใช้แทน .yml ได้อย่างไร? มีการสอนเกี่ยวกับหัวข้อนี้หรือไม่?
Greg

ด้านบนมีการอ้างอิงถึงคำถามนี้: stackoverflow.com/questions/44456522
Greg

3

สายการบินหนึ่งที่ฉันไปด้วยในวันนี้อันนี้กำหนดไว้ในโปรไฟล์เริ่มต้นสำหรับคอนเทนเนอร์ใหม่:

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

อันนี้ตั้งไว้ในภาชนะที่มีอยู่ แต่ระวังว่ามันจะไม่ทำงานบนภาชนะที่บูตแล้วเป็นสิ่งที่สำคัญ SSH เพียงทำในการบูตครั้งแรก:

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


3

ฉันมีคำถามที่เฉพาะเจาะจงมากกว่า OP แต่ใช้เวลาสักครู่กว่าจะคิดออกว่าทำอะไรผิด ฉันคิดว่าฉันจะโพสต์ที่นี่เพื่อช่วยให้คนอื่นได้รับนิ่งงันในทำนองเดียวกัน

ฉันต้องการการตั้งค่าเครือข่ายแบบคงที่สำหรับคอนเทนเนอร์ LXC / LXD Ubuntu 16.04 ที่โฮสต์บน Ubuntu 16.04 ฉันเริ่มต้นด้วยการลองสิ่งที่Stéphane เขียนแต่มันไม่ทำงาน ทั้งหมดที่ฉันได้รับคือ DHCP ที่พยายามใช้งานเริ่มต้นพร้อมกับลิงค์ IPv6 ในเครื่องเนื่องจากไม่มีการให้บริการ DHCP ในการกำหนดค่าของฉัน

YAML เริ่มต้นของฉันดู (บางอย่าง) ดังต่อไปนี้ (นำมาจากเอกสารdoc-cloud )

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

และฉันกำลังโหลดมันลงไปuser.user-dataตามที่อธิบายข้างต้น

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

จนกระทั่งฉันพบเอกสารของStéphaneในแหล่งLXC / LXDที่ฉันรู้ว่าฉันต้องการโหลดค่าuser.network-configนั้น

ดังนั้น YAML สุดท้ายของฉันก็ดู (อะไร) เช่นนี้

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

จากนั้นฉันก็ใส่มันเข้าไปuser.network-configแทน

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

ดูเหมือนว่าฉันจะต้องเก็บสองไฟล์ที่แตกต่างกันต่อคอนเทนเนอร์หนึ่งไฟล์สำหรับการตั้งค่าเครือข่ายเพื่อโหลดไปยังuser.network-config; และอีกวิธีหนึ่งสำหรับการกำหนดค่าอื่น ๆ ที่จะโหลดลงในuser.user-dataเว้นแต่ว่าฉันจะหาวิธีใช้ไฟล์เดียวสำหรับทุกสิ่ง


ปัญหาอื่นที่ฉันพบซึ่งไม่ชัดเจนสำหรับฉันเลยคือการพยายามกำหนดค่าส่วนประกอบที่ไม่ใช่เครือข่ายโดยอัตโนมัติ

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

YAML ต่อไปนี้ใช้กับคำสั่งด้านบน (แม้จะดูถูกต้องโดยใช้lxc config show CONTAINER) ก็ไม่ได้สร้างสิ่งใดในตู้คอนเทนเนอร์ของฉัน

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

    Foo
    Bar

    path: /etc/foo.bar

เบาะแสฝังอยู่ในรูปแบบการป้อนข้อมูลผู้ใช้รายการ 5: ข้อมูลการกำหนดค่าคลาวด์อ่าน:

เริ่มต้นด้วย"#cloud-config"หรือ"Content-Type: text/cloud-config" เนื้อหานี้เป็นข้อมูล "cloud-config" ดูตัวอย่างสำหรับตัวอย่างความคิดเห็นของรูปแบบการกำหนดค่าที่รองรับ

ฉันไม่เชื่อว่าเอกสารนี้มีความชัดเจนมาก ฉันไม่สามารถทำงานอะไรได้โดยใช้แบบฟอร์ม "ประเภทเนื้อหา: ข้อความ / คลาวด์" แต่ฉันพบว่าคุณใส่#cloud-configบรรทัดแรก YAML จะถูกแยกวิเคราะห์ ฉันเดาได้แค่บางสิ่งที่ไม่ถูกต้องไม่ว่าจะเป็นความเข้าใจของฉันหรือการเขียนโปรแกรมของใครบางคน สำหรับฉันแล้วมันไม่มีเหตุผลที่ YAML ที่คุณโหลดไว้อย่างชัดเจนเนื่องจากค่าของคีย์user.user-dataควรใช้เป็นอย่างอื่นนอกเหนือจากข้อมูลการกำหนดค่าระบบคลาวด์ ทำไมไม่มีใครทำอย่างนั้นถ้ามันไม่ได้หมายถึงการกำหนดค่าระบบคลาวด์และทำไมจึงต้องมีการแสดงความคิดเห็น (ซึ่งไม่ได้ใช้ไวยากรณ์ Shebang ปกติ) จะต้อง ?

ดังนั้นไร้สาระกันไวยากรณ์ที่ทำงานสำหรับuser.user-dataคือ

#cloud-config

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

      Foo
      Bar

    path: /etc/foo.bar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.