ไม่เป็นความลับเลยที่การตั้งค่าเริ่มต้น Ansible ไม่สามารถทำงานได้เร็วนัก ในบทความฉันจะชี้ให้เห็นเหตุผลหลายประการสำหรับสิ่งนี้และเสนอการตั้งค่าขั้นต่ำที่มีประโยชน์ซึ่งอาจเพิ่มความเร็วให้กับโปรเจ็กต์ของคุณได้จริง
ที่นี่และด้านล่าง เราจะพูดถึง Ansible 2.9.x ซึ่งได้รับการติดตั้งใน virtualenv ที่สร้างขึ้นใหม่ในลักษณะที่คุณชื่นชอบ
หลังการติดตั้ง ให้สร้างไฟล์ “ansible.cfg” ถัดจาก Playbook ของคุณ ตำแหน่งนี้จะช่วยให้คุณสามารถถ่ายโอนการตั้งค่าเหล่านี้ไปพร้อมกับโปรเจ็กต์ได้ แถมยังจะโหลดโดยอัตโนมัติอีกด้วย
การวางท่อ
บางคนอาจเคยได้ยินเกี่ยวกับความจำเป็นในการใช้ไพพ์ไลน์ กล่าวคือ ไม่ใช่การคัดลอกโมดูลไปยังระบบไฟล์ของระบบเป้าหมาย แต่เป็นการถ่ายโอนไฟล์ zip ที่ห่อด้วย Base64 โดยตรงไปยัง stdin ของล่าม Python แต่คนอื่นอาจไม่ได้ยิน แต่ความจริงแล้ว ยังคงเป็นข้อเท็จจริง:
pipelining = True
การรวบรวมข้อเท็จจริง
คุณรู้ไหมว่าด้วยการตั้งค่าเริ่มต้น Ansible สำหรับการเล่นแต่ละครั้งจะเริ่มต้นการรวบรวมข้อเท็จจริงสำหรับโฮสต์ทั้งหมดที่เข้าร่วม โดยทั่วไปแล้ว ถ้าคุณไม่รู้ ตอนนี้คุณก็รู้แล้ว เพื่อป้องกันไม่ให้สิ่งนี้เกิดขึ้น คุณต้องเปิดใช้งานโหมดคำขอที่ชัดเจนสำหรับการรวบรวมข้อเท็จจริง (ชัดเจน) หรือโหมดอัจฉริยะ โดยจะรวบรวมข้อเท็จจริงจากเจ้าบ้านที่ไม่เคยเจอในละครครั้งก่อนเท่านั้น
รปภ. เมื่อทำการคัดลอก คุณจะต้องเลือกการตั้งค่าอย่างใดอย่างหนึ่งเหล่านี้
gathering = smart|explicit
นำการเชื่อมต่อ ssh มาใช้ซ้ำ
หากคุณเคยเรียกใช้ Ansible ในโหมดแก้ไขข้อบกพร่อง (ตัวเลือก "v" ทำซ้ำหนึ่งถึงเก้าครั้ง) คุณอาจสังเกตเห็นว่าการเชื่อมต่อ ssh มีการสร้างและใช้งานไม่ได้อยู่ตลอดเวลา ดังนั้นจึงมีรายละเอียดปลีกย่อยสองสามอย่างที่นี่เช่นกัน
คุณสามารถหลีกเลี่ยงขั้นตอนการสร้างการเชื่อมต่อ ssh ใหม่ได้ในสองระดับพร้อมกัน: ทั้งในไคลเอ็นต์ ssh โดยตรง และเมื่อถ่ายโอนไฟล์ไปยังโฮสต์ที่ได้รับการจัดการจากผู้จัดการ
หากต้องการใช้การเชื่อมต่อ ssh แบบเปิดอีกครั้ง เพียงส่งคีย์ที่จำเป็นไปยังไคลเอ็นต์ ssh จากนั้นจะเริ่มทำสิ่งต่อไปนี้: เมื่อสร้างการเชื่อมต่อ ssh เป็นครั้งแรก มันจะสร้างสิ่งที่เรียกว่าซ็อกเก็ตควบคุมเพิ่มเติม ในการติดตั้งครั้งต่อไป มันจะตรวจสอบการมีอยู่ของซ็อกเก็ตนี้ และหากสำเร็จ ให้นำกลับมาใช้ใหม่ การเชื่อมต่อ ssh ที่มีอยู่ และเพื่อให้ทั้งหมดนี้สมเหตุสมผล เรามากำหนดเวลาในการรักษาการเชื่อมต่อเมื่อไม่ได้ใช้งานกันดีกว่า สามารถอ่านเพิ่มเติมได้ใน
ssh_args = "-o ControlMaster=auto -o ControlPersist=15m"
หากต้องการใช้การเชื่อมต่อ ssh ที่เปิดอยู่แล้วซ้ำเมื่อถ่ายโอนไฟล์ไปยังโฮสต์ที่ได้รับการจัดการ เพียงระบุการตั้งค่าอื่นที่ไม่รู้จัก ssh_tranfer_method เอกสารเกี่ยวกับเรื่องนี้เป็นอย่างมาก
transfer_method = piped
อย่างไรก็ตาม ในสาขา "พัฒนา" การตั้งค่านี้ก็มีอยู่เช่นกัน
อย่ากลัวมีด จงกลัวส้อม
การตั้งค่าที่มีประโยชน์อีกอย่างหนึ่งคือส้อม จะกำหนดจำนวนกระบวนการของผู้ปฏิบัติงานที่จะเชื่อมต่อกับโฮสต์และดำเนินงานไปพร้อมกัน เนื่องจากลักษณะเฉพาะของ Python ในฐานะภาษา จึงมีการใช้กระบวนการ ไม่ใช่เธรด เนื่องจาก Ansible ยังคงรองรับ Python 2.7 - ไม่มี asyncio สำหรับคุณ จึงไม่มีประโยชน์ที่จะแนะนำพฤติกรรมแบบอะซิงโครนัสที่นี่! ตามค่าเริ่มต้น Ansible จะทำงาน
forks = 20
ฉันเพิ่งเตือนคุณทันทีว่าอาจมีปัญหาบางอย่างเกี่ยวกับจำนวนหน่วยความจำที่มีอยู่ในเครื่องควบคุม กล่าวอีกนัยหนึ่ง คุณสามารถตั้งค่า forks=100500 ได้ แต่ใครบอกว่ามันจะได้ผล
วางมันทั้งหมดเข้าด้วยกัน
ด้วยเหตุนี้ สำหรับ ansible.cfg (รูปแบบ ini) การตั้งค่าที่จำเป็นจึงอาจมีลักษณะดังนี้:
[defaults]
gathering = smart|explicit
forks = 20
[ssh_connection]
pipelining = True
ssh_args = -o ControlMaster=auto -o ControlPersist=15m
transfer_method = piped
และหากคุณต้องการซ่อนทุกอย่างในสินค้าคงคลัง YaML ปกติของบุคคลที่มีสุขภาพดี ก็อาจมีลักษณะดังนี้:
---
all:
vars:
ansible_ssh_pipelining: true
ansible_ssh_transfer_method: piped
ansible_ssh_args: -o ControlMaster=auto -o ControlPersist=15m
ขออภัย การตั้งค่านี้ใช้ไม่ได้กับการตั้งค่า "gathering = smart/explicit" และ "forks = 20" เนื่องจากไม่มี YaML ที่เทียบเท่ากัน ไม่ว่าเราจะตั้งค่าไว้ใน ansible.cfg หรือส่งผ่านตัวแปรสภาพแวดล้อม ANSIBLE_GATHERING และ ANSIBLE_FORKS
เกี่ยวกับไมโทเจน
- นี่เกี่ยวกับมิโทเจนตรงไหน? - คุณมีสิทธิ์ถามผู้อ่านที่รัก ไม่มีที่ไหนในบทความนี้ แต่ถ้าคุณพร้อมจริงๆ ที่จะอ่านโค้ดของมัน และหาคำตอบว่าเหตุใด playbook ของคุณจึงขัดข้องกับ Mitogen แต่ทำงานได้ดีกับ vanilla Ansible หรือเหตุใด Playbook เดียวกันจึงทำงานได้ดีมาก่อน แต่หลังจากการอัปเดตก็เริ่มทำสิ่งแปลก ๆ - ก็ Mitogen อาจเป็นเครื่องมือของคุณก็ได้ นำไปใช้ ทำความเข้าใจ เขียนบทความ - ฉันจะอ่านอย่างสนใจ
ทำไมฉันถึงไม่ใช้ไมโทเจนเป็นการส่วนตัว? เพราะพืชไม้ดอกจะได้ผลตราบใดที่งานนั้นเรียบง่ายจริงๆ และทุกอย่างเรียบร้อยดี อย่างไรก็ตามหากคุณหันไปทางซ้ายหรือขวาเล็กน้อย - แค่นั้นแหละเราก็มาถึงแล้ว: เพื่อตอบสนองข้อยกเว้นที่ไม่ชัดเจนจำนวนหนึ่งบินมาที่คุณและเพื่อให้ภาพสมบูรณ์สิ่งที่ขาดหายไปคือวลีทั่วไป "ขอบคุณทุกคน ทุกคนมีอิสระ” โดยทั่วไปแล้ว ฉันไม่ต้องการเสียเวลาค้นหาสาเหตุของ "การเคาะใต้ดิน" ครั้งต่อไป
การตั้งค่าเหล่านี้บางส่วนถูกค้นพบในระหว่างกระบวนการอ่าน
เฉพาะผู้ใช้ที่ลงทะเบียนเท่านั้นที่สามารถเข้าร่วมในการสำรวจได้
คุณใช้การตั้งค่า Ansible ใดต่อไปนี้เพื่อเพิ่มความเร็วให้กับโปรเจ็กต์ของคุณ
-
69,6% การวางท่อ=true32
-
34,8% การรวบรวม = ฉลาด/ชัดเจน16
-
52,2% ssh_args = "-o ControlMaster=auto -o ControlPersist=..."24
-
17,4% Transfer_method = ไปป์8
-
63,0% ส้อม = XXX29
-
6,5% ไม่มีสิ่งใดเลย มีเพียง Mitogen3
-
8,7% Mitogen + ฉันจะสังเกตว่าการตั้งค่าใดเหล่านี้4
ผู้ใช้ 46 คนโหวต ผู้ใช้ 21 รายงดออกเสียง
ต้องการข้อมูลเพิ่มเติมเกี่ยวกับ Ansible หรือไม่?
-
78,3% ใช่แน่นอน54
-
21,7% ใช่ ฉันแค่อยากได้อะไรที่ฮาร์ดคอร์มากกว่านี้!15
-
0,0% ไม่ และไม่จำเป็นเลย0
-
0,0% ไม่ มันซับซ้อน!!!0
ผู้ใช้ 69 คนโหวต ผู้ใช้ 7 รายงดออกเสียง
ที่มา: will.com