요리사 클라이언트를 원격으로 실행할 수있는 더 우아한 방법이 있습니까?


22

이것이 Chef Fast Start 튜토리얼에서 권장되는 방법입니다.

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

정말 서투른입니다. 실제로 더 좋은 방법이 없습니까? 아니면 실제 프로덕션 환경에서 노드가 자동 업데이트된다는 생각입니까?


1
이것이 어떻게 "서투른 것"이라고 생각하십니까?
womble

9
글쎄, 이런 식으로 넣어. "나이프 업데이트 이름 : mynode"는 어색하지 않습니다. 클라이언트에 연결하는 방법과 chef client 명령의 이름 (및 sudo 권한으로 실행해야한다는 사실)을 모두 설명해야하는 것은 어설프다. 나이프는 다른 많은 혼란을 추상화하는 데 효과적입니다. 왜 그렇지 않습니까?
Steve Bennett

답변:


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
좋아, 그 질문에 대답하는 것 같아-아니, 더 좋은 방법은 없습니다. "나이프 부트 스트랩"도 실제로는 요리사 클라이언트를 실행할 수 없습니다.
Steve Bennett

나는 보통 부트 스트랩 스크립트가 끝날 때 요리사-클라이언트를 실행하여 특정 문제를 해결합니다. 그러나 만약 당신이 knife-ssh를 싫어한다면 아마도 당신은 knife-bootstrap 내부가 똑같이 바람직하지 않다고 생각할 것입니다. 있다 예를 들어 스크립트 GitHub의에이.
Tim Potter

1
ec2 server create바로 실행 플러그인 칼은 SSH + 요리사 클라이언트 다음 부트 스트랩. 따라서 기분이 나아진다면 Chef 작성자는 특히 똑똑한 것을 찾지 못했습니다.
kgilpin

요리사 클라이언트가 실행하는 데 시간이 걸리면 시간 초과가 발생합니다. :( ssh : 호스트 xx.xx.xx.xx 포트 22에 연결 : 연결 시간 초과
gdanko

부트 스트랩 후 chef-client가 디먼으로 실행되는 경우 간격 설정에 관계없이이를 호출하는 가장 좋은 방법은 다음과 같습니다. ssh ubuntu @ ipadddress -i mycredentials.pem -f -n "sudo killall -USR1 chef -고객". Fork ssh는 노드 목록에 동시에이를 수행합니다.
Andrew 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

인벤토리 파일 (예 : 이름이 "호스트")은 다음과 같습니다.

[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가 설치되어 있습니다. 따라서 수정 된 run_list로 노드를 부트 스트랩 할 수 있습니다. 어쨌든 부트 스트랩 프로세스는 요리사 클라이언트를 마지막에 실행합니다.

임시 실행의 경우 Jenkins 작업은 knife 명령을 실행하여 노드의 run_list를 수정하고 SSH 플러그인을 사용하여 원하는 노드에서 chef-client를 실행합니다.


0

주방장 고객에게 명령을 보내려면 ssh 밑줄을 사용해야합니다.

모든 Chef 클라이언트가 Chef 서버와 보안 연결을 설정했지만 Chef 서버가 해당 보안 연결을 통해 명령 멀티플렉서를 제공하지 않는 이유는 무엇입니까?


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.