क्या प्रावधान समय पर क्लाउड कॉन्फिग के साथ lxd कंटेनरों को कॉन्फ़िगर करने का एक तरीका है?


10

विशेष रूप से, सीएलआई टूल के साथ- ओपनस्टैक नहीं।

मैं देख रहा हूं कि 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

.Ml के बजाय .sh फ़ाइलों का उपयोग कैसे किया जा सकता है? क्या इस विषय पर पहले से ही एक ट्यूटोरियल उपलब्ध है?
ग्रेग

उपरोक्त इस प्रश्न के संदर्भ में है: stackoverflow.com/questions/44456522
ग्रेग

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

मेरे पास ओपी की तुलना में थोड़ा अधिक विशिष्ट प्रश्न था लेकिन मुझे गलत काम करने में थोड़ा समय लगा। मैंने सोचा कि मैं इसे यहाँ पोस्ट करूँगा किसी और को समान रूप से स्टम्प करने में मदद करने के लिए।

मैं एक LXC / LXD Ubuntu 16.04 कंटेनर के लिए स्थिर नेटवर्किंग सेटिंग्स चाहता था जो Ubuntu 16.04 पर होस्ट किया गया था। मैंने कोशिश करके शुरू किया कि स्टीफन ने क्या लिखा है लेकिन यह काम नहीं कर रहा था। सभी मैं समाप्त हो गया था एक IPv6 लिंक स्थानीय के साथ डिफ़ॉल्ट डीएचसीपी-प्रयास कंटेनर था, क्योंकि मेरे कॉन्फ़िगरेशन में कोई डीएचसीपी नहीं परोसा जा रहा है।

मेरे आरंभिक YAML ने (कुछ) निम्नलिखित की तरह देखा ( क्लाउड-इनिट डॉक्स से लिया गया )।

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

यह तब तक नहीं था जब तक मुझे 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पहली पंक्ति में रखते हैं, तो YAML को पार्स किया जाता है। मैं केवल यह मान सकता हूं कि कुछ सही नहीं है, या तो मेरी समझ, या किसी की प्रोग्रामिंग। इससे मुझे कोई मतलब नहीं है कि कुंजी के मूल्य के रूप में आपके द्वारा उपयोग किए जाने वाले YAML को user.user-dataक्लाउड कॉन्फ़िगरेशन डेटा के अलावा किसी अन्य चीज़ के रूप में उपयोग किया जाना चाहिए। कोई और क्यों करेगा कि अगर यह क्लाउड कॉन्फ़िगरेशन के लिए नहीं था, और इसलिए एक टिप्पणी (जो सामान्य शेबंग सिंटैक्स का उपयोग नहीं करता है) की आवश्यकता क्यों होगी ?

तो, एक तरफ बकवास है, जो वाक्य रचना के लिए काम किया user.user-dataहै:

#cloud-config

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

      Foo
      Bar

    path: /etc/foo.bar
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.