มีวิธีที่หรูหรากว่าในการบริหารเชฟลูกค้าจากระยะไกลหรือไม่?


22

นี่คือวิธีที่แนะนำในการสอนการเริ่มเชฟอย่างรวดเร็ว:

knife ssh name:mynode -a ipaddress  -x ubuntu -i mycredentials.pem "sudo chef-client"

นี่มันเงอะงะจริงๆ ไม่มีวิธีที่ดีกว่าหรือเป็นความคิดที่ว่าในสภาพแวดล้อมการผลิตจริงคุณจะมีการอัปเดตโหนดโดยอัตโนมัติหรือไม่


1
คุณคิดว่านี่เป็น "เงอะงะ" ในทางใด
womble

9
เอาล่ะด้วยวิธีนี้ นี่จะไม่งุ่มง่าม: "ชื่อการอัพเดทมีด: mynode" ต้องสะกดทั้งวิธีการเชื่อมต่อกับลูกค้าและชื่อของคำสั่งพ่อครัวลูกค้า (บวกกับความจริงที่จะต้องเรียกใช้ด้วยสิทธิ์ sudo) เป็นงุ่มง่าม มีดทำงานได้ดีในการแยกความยุ่งเหยิงอื่น ๆ ออกมามากมาย - ทำไมไม่ทำอย่างนี้ล่ะ?
Steve Bennett

คำตอบ:


11

นั่นเป็นวิธีที่คุณสามารถเริ่มต้นสิ่งต่าง ๆ ได้ แต่มันต้องทำเพียงครั้งเดียว โดยปกติแล้วการรันครั้งแรกของ chef-client จะเปิดใช้งานและเริ่ม daemon ของลูกค้าเป็นบริการ init.d

หากคุณต้องการทำอย่างหรูหรามากขึ้นคุณสามารถใช้มีด -shsh และเรียกใช้ ssh ได้โดยตรง:

ssh ubuntu@ipadddress -i mycredentials.pem sudo chef-client

นั่นอาจจะเร็วกว่านี้เนื่องจาก knife-ssh ค้นหาเซิร์ฟเวอร์ Chef เพื่อดึงข้อมูลโหนดที่ตรงกับคำค้นหา (ในกรณีนี้name:dynode) ซึ่งคุณไม่จำเป็นต้องทำอย่างเคร่งครัดหากคุณรู้ที่อยู่ IP แล้ว


2
ตกลงฉันเดาว่าตอบคำถาม - ไม่ไม่มีวิธีที่ดีกว่า น่าเสียดายที่ "มีดบูตสแตรป" ไม่สามารถเรียกใช้เชฟไคลเอนต์ได้
Steve Bennett

ฉันมักจะเรียกใช้เชฟไคลเอนต์ในตอนท้ายของสคริปต์ bootstrap ของฉันเพื่อแก้ปัญหานั้น อย่างไรก็ตามหากคุณไม่ชอบมีด -shsh คุณอาจจะคิดว่ามีด bootstrap เป็นคนไม่เท่ากัน มีตัวอย่างสคริปต์บน GitHub
ทิมพอตเตอร์

1
ec2 server createดปลั๊กอินเพียงแค่วิ่งบูตตามด้วย SSH + พ่อครัวลูกค้า ดังนั้นถ้ามันทำให้คุณรู้สึกดีขึ้นผู้เขียนเชฟไม่ได้คิดอะไรอย่างชาญฉลาด
kgilpin

หากพ่อครัว - ลูกค้าใช้เวลาพอสมควรในการทำให้คุณหมดเวลา :( ssh: เชื่อมต่อกับโฮสต์ xx.xx.xx.xx พอร์ต 22: การเชื่อมต่อหมดเวลา
gdanko

ในกรณีที่ Chef-client ถูกเรียกใช้เป็น daemon หลังจาก bootstrap และไม่ว่าจะตั้งค่าช่วงเวลาอย่างไร ELEGANT ที่มากที่สุดในการเรียกใช้คือ: ssh ubuntu @ ipadddress -i mycredentials.pem -f -n "sudo killall -USR1 chef -client" แยก ssh เพื่อทำสิ่งนี้พร้อมกันกับรายการโหนด
Andrew S

12

คุณสามารถใช้มีด sshเพื่อเรียกใช้เชฟไคลเอนต์บนกล่องทั้งหมดที่มีบทบาทหรือสูตรอาหารบางอย่าง:

knife ssh "role:web" "sudo chef-client" -x ubuntu --sudo 

หรือถ้าคุณอยู่ใน EC2:

knife ssh "role:web" "sudo chef-client" -x ubuntu -a ec2.public_hostname 

2

คุณสามารถใช้ ansible เพื่อปรับใช้และเรียกใช้ chef-client

$ ansible -i hosts all -a 'chef-client'

ansible ติดตั้งได้ง่ายด้วย pip:

pip install ansible

ไฟล์คลังโฆษณาของคุณ (ในตัวอย่างชื่อ "โฮสต์") อาจมีลักษณะเช่นนี้:

[all] host1.example.com ansible_user=root host2.example.com ansible_user=root host3.example.com ansibel_user=root

(แจ้งให้ทราบว่า "all" เป็นชื่อของการจัดกลุ่มในไฟล์การกำหนดค่าสำหรับตัวอย่างของเรา - นี่คือข้อ จำกัด และสามารถเป็นอะไรก็ได้ไฟล์รายการสินค้าของคุณยังสามารถรวมกลุ่มอื่น ๆ ได้เช่น [web_wervers], [database_servers], [chef_servers] ฯลฯ )

ดังนั้นอีกครั้งรวมทั้งหมดเข้าด้วยกัน:

> ansible -i hosts all -a 'chef-client'

หรืออาจจะ:

> ansible -i hosts all -a 'systemctl status'


1
ฉันเห็นสิ่งที่คุณกำลังทำที่นี่ ... ;)
Spechal

0

ฉันใช้ Jenkins CI เพื่อจัดการการวิ่ง เซิร์ฟเวอร์ Linux ถูกตั้งค่าเป็นเวิร์กสเตชันและติดตั้ง Jenkins ไว้แล้ว ดังนั้นฉันสามารถ bootstrap โหนดที่มีการแก้ไข run_list กระบวนการบูตสแตรปยังคงเรียกใช้ Chef-client ในตอนท้าย

สำหรับการเรียกใช้ adhoc งาน Jenkins ดำเนินการคำสั่งมีดเพื่อแก้ไข run_list สำหรับโหนดและใช้ปลั๊กอิน SSH เพื่อเรียกใช้ chef-client บนโหนดที่ต้องการ


0

เป็นเรื่องน่าเสียดายที่การส่งคำสั่งไปยังพ่อครัวลูกค้าเราต้องใช้การขีดเส้นใต้ ssh

ดูเหมือนว่าแม้ว่าไคลเอนต์พ่อครัวทุกคนจะตั้งค่าการเชื่อมต่อที่ปลอดภัยกับเซิร์ฟเวอร์เชฟ แต่เซิร์ฟเวอร์เชฟไม่ได้ให้คำสั่งมัลติเพล็กเซอร์ผ่านการเชื่อมต่อที่ปลอดภัยนั้นทำไม?


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