Có cách nào thanh lịch hơn để điều hành đầu bếp-khách hàng từ xa không?


22

Đây là cách được đề xuất trong hướng dẫn Chef Fast Start:

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

Điều này thực sự vụng về. Có thực sự không có cách nào tốt hơn, hay ý tưởng là trong một môi trường sản xuất thực sự, bạn sẽ có các nút tự động cập nhật chứ?


1
Theo cách bạn nghĩ đây là "vụng về"?
womble

9
Vâng, đặt nó theo cách này. Điều này sẽ không vụng về: "tên cập nhật dao: mynode". Phải đánh vần cả cách kết nối với máy khách và tên của lệnh đầu bếp (cộng với thực tế là nó cần được chạy với quyền sudo) là vụng về. Dao làm tốt việc trừu tượng hóa rất nhiều mớ hỗn độn khác - tại sao không phải vậy?
Steve Bennett

Câu trả lời:


11

Đó là khá nhiều cách bạn bắt đầu mọi thứ bắt đầu, nhưng nó chỉ cần được thực hiện một lần. Việc chạy đầu tiên của đầu bếp-khách hàng thường cho phép và khởi động trình nền đầu bếp-khách như một dịch vụ init.d.

Nếu bạn thực sự muốn làm điều đó một cách thanh lịch hơn, bạn có thể bỏ dao-ssh và chạy ssh trực tiếp:

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

điều đó có thể sẽ nhanh hơn, vì dao-ssh thực hiện tìm kiếm trên máy chủ Chef để tìm nạp các nút phù hợp với cụm từ tìm kiếm (trong trường hợp này name:dynode), điều mà bạn không cần phải thực hiện nếu bạn đã biết địa chỉ IP.


2
Ok, tôi đoán rằng câu trả lời cho câu hỏi - không, không có cách nào tốt hơn. Đáng tiếc là "dao bootstrap" thực sự cũng không thể chạy đầu bếp-khách hàng.
Steve Bennett

Tôi thường chạy đầu bếp-khách hàng vào cuối kịch bản bootstrap của mình để giải quyết vấn đề cụ thể đó. Tuy nhiên nếu bạn không thích dao-ssh thì có lẽ bạn sẽ nghĩ rằng phần bên trong dao-bootstrap cũng vô duyên như nhau. Có một kịch bản ví dụ trên github.
Tim Potter

1
Các ec2 server createdao Plugin chỉ chạy bootstrap tiếp theo SSH + bếp-client. Vì vậy, nếu nó làm bạn cảm thấy tốt hơn, các tác giả của Chef đã không tìm ra thứ gì đặc biệt thông minh hơn.
kgilpin

Nếu đầu bếp-khách hàng mất một thời gian để chạy, bạn sẽ có thời gian chờ. :( ssh: kết nối với máy chủ xx.xx.xx.xx cổng 22: Đã hết thời gian kết nối
gdanko

Trong trường hợp đầu bếp-khách hàng được chạy như một daemon sau bootstrap, và bất kể khoảng thời gian nào được đặt ra, CÁCH TUYỆT VỜI NHẤT ĐỂ THAM GIA NÓ LÀ: ssh ub Ubuntu @ ipadddress -i mycredentials.pem -f -n "sudo killall -USR1 -client ". Fork ssh để làm điều này đồng thời vào một danh sách các nút.
Andrew S

12

Bạn có thể sử dụng ssh dao để chạy đầu bếp-khách hàng trên tất cả các hộp có vai trò hoặc công thức nhất định:

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

Hoặc nếu bạn đang ở EC2:

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

2

Bạn có thể sử dụng ansible để triển khai và chạy đầu bếp-khách hàng.

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

ansible được cài đặt dễ dàng với pip:

pip install ansible

Tệp kiểm kê của bạn (trong ví dụ, được đặt tên là "máy chủ") có thể trông như thế này:

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

(chú ý "tất cả" là tên của nhóm trong tệp cấu hình cho ví dụ của chúng tôi - đây là tùy ý và có thể là bất cứ điều gì. Tệp kiểm kê của bạn cũng có thể bao gồm các nhóm khác, ví dụ: [web_wervers], [database_servers], [Chef_servers] , v.v.)

Vì vậy, một lần nữa, đặt tất cả lại với nhau:

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

hoặc có thể:

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


1
Tôi thấy những gì bạn đang làm ở đây ...;)
Spechal

0

Tôi sử dụng Jenkins CI để quản lý các hoạt động. Máy chủ Linux được thiết lập như một máy trạm và đã cài đặt Jenkins trên đó. Vì vậy, tôi có thể bootstrap các nút với run_list đã sửa đổi. Quá trình bootstrapping, dù sao, chạy đầu bếp-khách hàng vào cuối.

Đối với thực thi adhoc, công việc Jenkins thực thi các lệnh dao để sửa đổi run_list cho một nút và sử dụng plugin SSH để thực thi đầu bếp-máy khách trên nút mong muốn.


0

Thật đáng tiếc khi gửi một lệnh cho khách hàng đầu bếp, chúng tôi phải sử dụng gạch dưới ssh.

Có vẻ như mặc dù mọi khách hàng đầu bếp đã thiết lập kết nối an toàn với máy chủ đầu bếp, nhưng máy chủ đầu bếp không cung cấp bộ ghép kênh lệnh cho kết nối an toàn đó, tại sao?


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.