Apakah ada cara yang lebih elegan untuk menjalankan chef-client dari jarak jauh?

22

Ini adalah cara yang disarankan dalam tutorial Chef Fast Start:

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

Ini benar-benar canggung. Apakah benar-benar tidak ada cara yang lebih baik, atau apakah gagasan bahwa dalam lingkungan produksi nyata, Anda akan tetap memiliki pembaruan otomatis node?

Steve Bennett
sumber
1
Menurut Anda bagaimana hal ini "canggung"?
womble
9
Baiklah, begini saja. Ini tidak akan canggung: "nama pembaruan pisau: mynode". Harus menjelaskan bagaimana menghubungkan ke klien, dan nama perintah klien chef (ditambah fakta bahwa itu harus dijalankan dengan izin sudo) adalah canggung. Knife sangat baik dalam mengabstraksi banyak kekacauan lainnya - mengapa tidak?
Steve Bennett

Jawaban:

11

Itu cukup banyak bagaimana Anda memulai sesuatu, tetapi itu hanya perlu dilakukan sekali. Proses awal dari chef-client biasanya mengaktifkan dan memulai daemon chef-client sebagai layanan init.d.

Jika Anda benar-benar ingin melakukannya dengan lebih elegan, Anda bisa membuang pisau-ssh dan menjalankan ssh secara langsung:

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

yang mungkin akan lebih cepat, karena knife-ssh melakukan pencarian terhadap server Chef untuk mengambil node yang cocok dengan istilah pencarian (dalam hal ini name:dynode), yang tidak perlu Anda lakukan jika Anda sudah mengetahui alamat IP.

Tim Potter
sumber
2
Ok, saya kira itu menjawab pertanyaan - tidak, tidak ada cara yang lebih baik. Sayang sekali bahwa "pisau bootstrap" juga tidak bisa benar-benar menjalankan chef-client.
Steve Bennett
Saya biasanya menjalankan chef-client di akhir skrip bootstrap saya untuk menyelesaikan masalah khusus itu. Namun jika Anda tidak menyukai pisau-ssh maka Anda mungkin akan berpikir bahwa internal-pisau-bootstrap sama-sama canggung. Ada contoh skrip di github.
Tim Potter
1
The ec2 server createpisau Plugin hanya berjalan bootstrap diikuti oleh SSH + chef-client. Jadi jika itu membuat Anda merasa lebih baik, penulis Chef belum menemukan sesuatu yang lebih pintar.
kgilpin
Jika koki-klien membutuhkan waktu untuk berlari, Anda mendapat batas waktu. :( ssh: terhubung ke host xx.xx.xx.xx port 22: Koneksi habis waktu
gdanko
Dalam kasus di mana chef-client dijalankan sebagai daemon setelah bootstrap, dan terlepas dari interval yang ditentukan, CARA YANG PALING ELEGAN UNTUK MELAKUKANNYA ADALAH: ssh ubuntu @ ipadddress -i mycredentials.pem -f -n "sudo killall -USR1 chef -klien". Fork ssh untuk melakukan ini secara bersamaan ke daftar node.
Andrew S
12

Anda bisa menggunakan pisau ssh untuk menjalankan chef-client di semua kotak yang berisi peran atau resep tertentu:

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

Atau jika Anda menggunakan EC2:

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

Anda dapat menggunakan yang dimungkinkan untuk menggunakan dan menjalankan chef-client.

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

ansible mudah dipasang dengan pip:

pip install ansible

File inventaris Anda (dalam contoh, bernama "host") mungkin terlihat seperti ini:

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

(perhatikan "semua" adalah nama pengelompokan dalam file konfigurasi untuk contoh kita - ini arbitrer dan bisa apa saja. File inventaris Anda juga dapat menyertakan pengelompokan lain, misalnya [web_wervers], [database_servers], [chef_servers] , dll.)

Jadi, sekali lagi, kumpulkan semuanya:

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

atau mungkin:

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

Greg Jones
sumber
1
Saya melihat apa yang Anda lakukan di sini ...;)
Spechal
0

Saya menggunakan Jenkins CI untuk mengelola proses. Server Linux diatur sebagai workstation dan Jenkins telah diinstal di atasnya. Jadi saya bisa bootstrap node dengan modifikasi run_list. Proses bootstrap, bagaimanapun, menjalankan chef-client pada akhirnya.

Untuk eksekusi adhoc, pekerjaan Jenkins mengeksekusi perintah knife untuk memodifikasi run_list untuk sebuah node dan menggunakan plugin SSH untuk mengeksekusi chef-client pada node yang diinginkan.

Anil Wavde
sumber
0

Sangat disayangkan bahwa untuk mengirim perintah ke chef client kita harus menggunakan ssh underline.

Tampaknya meskipun setiap klien koki telah menyiapkan koneksi aman dengan server chef, tetapi server chef tidak menyediakan multiplexer perintah melalui koneksi aman itu, mengapa?

osexp2003
sumber
0

Ada perintah baru chef-rundi Chef Workstation:

chef-run server_name resource_name

Ini akan menginstal chef-clientjika tidak ada dan menjalankan sumber daya atau buku masak yang Anda tentukan.

Tutorial: https://learn.chef.io/modules/try-chef-infra#/

sekrett
sumber