chef-clientをリモートで実行するよりエレガントな方法はありますか?


22

これは、Chef Fast Startチュートリアルで推奨される方法です。

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

これは本当に不器用です。本当に良い方法はありませんか、または実際の実稼働環境では、とにかくノードを自動更新するという考えはありますか?


1
これはどのように「不器用」だと思いますか?
ウォンブル

9
まあ、このように置きます。これは不器用ではないでしょう: "knife update name:mynode"。クライアントへの接続方法とchef clientコマンドの名前(およびsudoパーミッションで実行する必要があるという事実)の両方を詳しく説明しなければならないのは面倒です。ナイフは他の多くの混乱を抽象化するのに優れています-これはどうですか?
スティーブベネット

回答:


11

そもそも物事を開始する方法ですが、一度行うだけで済みます。chef-clientの最初の実行では、通常、chef-clientデーモンをinit.dサービスとして有効にして起動します。

もっとエレガントにしたい場合は、knife-sshを捨ててsshを直接実行できます。

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

knife-sshはChefサーバーに対して検索を実行して検索用語(この場合name:dynode)に一致するノードを取得するため、おそらくより高速になります。IPアドレスが既にわかっている場合は、厳密に行う必要はありません。


2
OK、私はそれが質問に答えると思います-いいえ、より良い方法はありません。「ナイフブートストラップ」が実際にchef-clientを実行できないことは残念です。
スティーブベネット

通常、ブートストラップスクリプトの最後でchef-clientを実行して、特定の問題を解決します。ただし、knife-sshが嫌いな場合は、knife-bootstrapの内部も同様に不格好だと思うでしょう。githubにはサンプルスクリプトがあります。
ティムポッター

1
ec2 server createナイフプラグインだけで、ブートストラップがSSH +シェフ、クライアントが続い実行されます。したがって、気分が良くなる場合、シェフの作者は特に賢いものを見つけていません。
kgilpin

chef-clientの実行に時間がかかる場合、タイムアウトが発生します。:( ssh:ホストxx.xx.xx.xxに接続ポート22:接続がタイムアウトしました
-gdanko

ブートストラップ後にchef-clientがデーモンとして実行される場合、設定された間隔に関係なく、それを呼び出す最もエレガントな方法は次のとおりです:ssh ubuntu @ ipadddress -i mycredentials.pem -f -n "sudo killall -USR1 chef -クライアント"。sshをフォークして、ノードのリストに対してこれを同時に行います。
アンドリューS

12

knife sshを使用して、特定のロールまたはレシピを含むすべてのボックスでchef-clientを実行できます。

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

インベントリファイル(この例では「hosts」という名前)は次のようになります。

[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
ここで何をしているのかわかります
;;

0

Jenkins CIを使用して実行を管理します。Linuxサーバーはワークステーションとしてセットアップされ、Jenkinsがインストールされています。したがって、run_listを変更してノードをブートストラップできます。とにかく、ブートストラッププロセスはchef-clientを最後に実行します。

アドホック実行の場合、Jenkinsジョブはknifeコマンドを実行してノードのrun_listを変更し、SSHプラグインを使用して目的のノードでchef-clientを実行します。


0

シェフクライアントにコマンドをディスパッチするには、ssh下線を使用する必要があるのは残念です。

すべてのchefクライアントはchefサーバーとの安全な接続を設定していますが、chefサーバーはその安全な接続を介してコマンドマルチプレクサを提供していないようです。なぜですか?


0

chef-runChef Workstationに新しいコマンドがあります:

chef-run server_name resource_name

chef-client存在しない場合はインストールされ、指定したリソースまたはクックブックが実行されます。

チュートリアル:https : //learn.chef.io/modules/try-chef-infra#/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.