Score:0

จะส่งการกำหนดค่าคลาวด์ไปยัง LXD ได้อย่างไร

ธง it

ฉันเคยไปที่ไซต์นับไม่ถ้วนรวมถึงไซต์นี้ด้วย พยายามหาวิธีทำให้ LXD ใช้งาน cloud-config เมื่อฉันเปิดใช้คอนเทนเนอร์ LXD บางแห่งแนะนำให้ตั้งค่าโปรไฟล์ (ไม่ได้ผล) คนอื่น ๆ แนะนำให้เปลี่ยนเส้นทางไฟล์ YAML ไปที่คำสั่ง lxc (ไม่ทำงาน) และคนอื่น ๆ แนะนำให้ใช้ --การกำหนดค่า ตัวเลือกและส่งไฟล์ด้วยวิธีนั้น (ใช้งานไม่ได้) บางแห่งบอกว่าต้องเพิ่ม #cloud-config การกำหนดค่าของฉัน คนอื่น ๆ ไม่รบกวน บางคนแนะนำให้ใช้ไฟล์ XML เห็นได้ชัดว่าฉันขาดข้อมูลสำคัญบางอย่างที่คนอื่นทำโดยค่าเริ่มต้น แต่ฉันไม่สามารถเข้าใจได้ว่ามันคืออะไร

"ตัวอย่างง่ายๆ" ที่อัปเดตของฉันที่พยายามติดตั้งทรีและพยายามสัมผัส /run/cloud-config-did-run:

lxc ลบ -f x

แมว << EOF >config.yml
#cloud-config
เอาต์พุต: {ทั้งหมด: '| ที -a /var/log/my-cloud-init-output.log'}
package_update: จริง
package_upgrade: จริง
package_reboot_if_required: จริง
แพ็คเกจ:
  - ต้นไม้
เรียกใช้ cmd:
  - สัมผัส /run/cloud-config-did-run
อฟ

lxc เปิดตัว ubuntu: x --config=user.user-data="$(cat config.yml)"
นอน5
lxc exec x -- bash -c "ls /รัน"
lxc exec x -- bash -c "ต้นไม้ / etc"

เอาต์พุตไม่ได้ถูกนำไปที่ /var/log/my-cloud-init-output.logดังนั้นจึงกำลังดำเนินการ แต่ไม่มีอะไรอื่นนอกจาก เอาต์พุต สั่งงาน (บันทึกไม่ได้กล่าวถึงสิ่งอื่น ๆ ที่กำลังทำงานหรือข้อผิดพลาดใด ๆ - เพียงแค่สิ่งมาตรฐานของ SSH keygen)

บางทีการเยื้องอาจไม่ถูกต้อง? หรือการกำหนดค่าอยู่ในแผนผังย่อยที่ไม่ถูกต้อง หรือมีค่าเวทมนตร์บางอย่างหายไป? รุ่นของ LXD ที่มันเสีย? (ฉันใช้เวอร์ชัน 4.20) ฉันอยู่ที่นี้มา 10 ชั่วโมงแล้ว และไม่ว่าฉันจะทำอะไร การกำหนดค่าระบบคลาวด์ของฉันจะถูกละเว้นโดยสิ้นเชิง (ไม่มีข้อผิดพลาด ไม่มีบันทึก ไม่มีบันทึกการทำงานใดๆ ไม่มีบันทึกที่ฉันเคยสั่งให้ทำสิ่งใด - นอกจาก สิ่งมาตรฐาน ssh keygen ที่เห็นได้ชัดว่าถูกอบ) ใครช่วยกรุณาเปลี่ยนด้านบนเป็นตัวอย่างการทำงานที่รับประกันว่าจะทำงานได้หากฉันเพิ่งวางลงในเชลล์

djdomi avatar
za flag
ฉันไม่แน่ใจ แต่คุณกำลังพยายามทำอะไรหรือแก้ไขอะไร
it flag
ฉันกำลังพยายามทำให้มันรันคำสั่งภายในคอนเทนเนอร์ LXD โดยอัตโนมัติเมื่อฉันเปิดใช้งาน ปกติแล้วฉันต้องการให้มันติดตั้งแพ็คเกจบางอย่างโดยอัตโนมัติ แต่ตอนนี้ฉันแค่ต้องการให้บางอย่างทำงานได้
jp flag
คุณได้ตรวจสอบ `/var/log/cloud-init.log` หรือไม่
it flag
ใช่. นั่นคือที่มาของรายการบันทึกด้านบน ไม่มีรายการข้อผิดพลาดหรือสิ่งใดที่จะแนะนำให้เกิดข้อผิดพลาด
jp flag
มีหมายเหตุใน `cloud-init` `runcmd` module docs: "เมื่อเขียนไฟล์ อย่าใช้ /tmp dir เพราะมันแข่งกับ systemd-tmpfiles-clean LP: #1707222 ใช้ /run/somedir แทน"
it flag
การติดตั้งแพ็คเกจและการแสดงข้อความสถานะไม่ทำงานเช่นกัน ฉันแค่ใช้สิ่งนี้เป็นตัวอย่าง เพราะแท้จริงแล้วไม่มีอะไรทำงาน
jp flag
คุณสามารถลองเพิ่ม `เอาต์พุต: {ทั้งหมด: '| tee -a /var/log/cloud-init-output.log'}` ถึง `config.yml` ควรช่วยแก้ไขข้อบกพร่องเล็กน้อย
it flag
อัปเดตเพื่อใช้ /run และพยายามติดตั้งบางอย่างด้วย น่าแปลกที่คำสั่ง `output` ได้รับเกียรติ แต่อย่างอื่นไม่เป็นเช่นนั้น และไม่มีอะไรผิดปกติปรากฏในบันทึก
jp flag
คุณอาจต้องการตรวจสอบว่า `cloud-init` รับรู้หรือไม่ว่ากำลังเรียกใช้ในขั้นตอน 'การบูตครั้งแรก' ถ้าฉันจำไม่ผิด มันจะข้ามโมดูลส่วนใหญ่หลังจากการบูทครั้งแรก
it flag
ฉันจะทำอย่างไร ฉันมาที่นี้ใหม่ทั้งหมด ดังนั้นฉันจึงติดตามบล็อกและฮาวทู แต่ไม่มีอันใดที่ใช้ได้ผล และไม่มีใครบอกวิธีแก้ปัญหาเพราะนี่ควรจะเป็นเรื่องเล็กน้อย... ฉันไม่รู้จริงๆ ไม่เข้าใจว่ามันล้มเหลวได้อย่างไรในสองระบบที่แยกจากกัน (ระบบหนึ่งใช้อูบุนตูและอีกระบบหนึ่งใช้ nixos)
it flag
นี่คือเหตุผลที่ฉันหวังว่าจะมีคนเรียกใช้สิ่งเล็กน้อยที่ทำงานบนระบบของพวกเขา แล้วโพสต์ไว้ที่นี่ เพื่อที่ฉันจะได้ตรวจสอบบางสิ่งที่ทำงานอยู่ที่อื่น
Score:0
ธง in

ข้อมูล (ที่ไม่ใช่) ที่มีอยู่เกี่ยวกับ cloud-config เป็นเรื่องที่น่าปวดหัวจริงๆ และเอกสารยังคงไม่ดี แต่ก่อนอื่น:
ฉันลองรหัสของคุณและทำสำเร็จ (การอัปเกรดแพ็คเกจ + /run/cloud-config-did-run ทำงาน) ทดสอบด้วย อูบุนตู 20.04 เช่นเดียวกับ 22.04.

แต่ฉันทำงานต่อไป แอลเอ็กซ์ดี 5.1. นี่อาจเป็นข้อแตกต่างที่สำคัญ


ข้อสังเกตบางประการที่อาจเป็นประโยชน์:

  • ฉันกำหนดค่าเอาต์พุตอย่างง่ายเพื่อแยกความแตกต่างระหว่างสเตจ init, config, สุดท้าย และในนั้นระหว่างบันทึกมาตรฐานและข้อผิดพลาด ทำให้การดีบักง่ายขึ้น

    เอาต์พุต:
      เริ่มต้น: [ "> /tmp/cloud-init.log", "> /tmp/cloud-init.err"]
      config: [ "> /tmp/cloud-init-config.log", "> /tmp/cloud-init-config.err" ]
      สุดท้าย: [ "> /tmp/cloud-init-final.log", "> /tmp/cloud-init-final.err" ]
    
  • ทันทีที่ฉันได้ยิง เปิดตัวแอลเอ็กซ์ซี สั่งการ
    ฉันเปลี่ยนเป็นคอนเทนเนอร์ด้วย lxc เปลือก x.
    กับ สถานะ cloud-init -- รอ ฉันดูว่าทุกอย่างทำงาน ("เสร็จสิ้น") หรือล้มเหลว
    ถ้ามันล้มเหลว /tmp/*.ข้อผิดพลาด เป็นเพื่อนของคุณ

  • จนถึงตอนนี้ฉันไม่เคยมีปัญหากับการเขียนถึง /tmp. Cloud-init เปลี่ยนลำดับการดำเนินการในอดีต นั่นอาจแก้ไขได้

  • ความรู้ที่ไร้ประโยชน์: package_update รวมอยู่ใน package_upgrade

  • #cloud-config มันจำเป็น. ฉันลองโดยไม่ได้ผล YAML ถูกละเว้นโดยสิ้นเชิง

  • เกี่ยวกับ รูปแบบ cloud-config: มันคือ YAML (นามสกุลไฟล์ไม่สำคัญ)ฉันไม่คิดว่าจะมีอะไรที่ใช้ได้ผลกับ LXD - นอกจากไฟล์เก็บถาวรแบบหลายส่วน MIME

  • ไฟล์เก็บถาวรหลายส่วน MIME ทำงานร่วมกับ LXD และเป็นวิธีที่ดีในการใช้รหัสซ้ำสำหรับการกำหนดค่าต่างๆ ใช้งานง่าย แต่เอกสารดูเหมือนเป็นพื้นฐาน
    ตัวอย่างเล็กน้อยกับคุณ config.yml ร่วมกับเชลล์สคริปต์:

    แมว << EOF >test.sh
    #!/usr/bin/env ทุบตี
    แตะ /run/he-we-go-with-a-shellscript
    อฟ
    
    cloud-init devel make-mime -a config.yml:cloud-config -a test.sh:x-shellscript-per-once > newconfig
    lxc เปิดตัว ubuntu:j f --config=user.user-data="$(cat /root/newconfig)"
    แอลเอ็กซ์ซี เชลล์ ฉ
    สถานะ cloud-init -- รอ
    ls /รัน
    

    จุดเริ่มต้นที่ดีสำหรับการทำงานกับไฟล์เก็บถาวรหลายส่วน MIME น่าจะเป็นสิ่งนี้ หน้าเอกสาร cloudinit

  • โปรไฟล์ LXD ที่มี cloud-config ใช้งานได้เมื่อเราทดสอบ แต่เราไม่ได้ใช้

ฉันหวังว่าจะช่วยอย่างใด หากคุณสนใจ ฉันสามารถเพิ่ม yaml บนคลาวด์ที่ใหญ่ขึ้นซึ่งเราได้ทดสอบเพื่อตั้งค่าเว็บคอนเทนเนอร์ทั่วไปหลัง reverse proxy

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา