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

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

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

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



답변

그것은 당신이 일을 시작하는 방법과 거의 비슷하지만 한 번만 수행하면됩니다. chef-client의 초기 실행은 일반적으로 chef-client 데몬을 init.d 서비스로 활성화하고 시작합니다.

정말로 더 우아하게하고 싶다면 knife-ssh를 버리고 ssh를 직접 실행할 수 있습니다.

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

knife-ssh는 Chef 서버에 대해 검색 용어 (이 경우 name:dynode)와 일치하는 노드를 가져 오기 위해 검색 을 수행하므로 IP 주소를 이미 알고있는 경우 엄격하게 수행 할 필요는 없습니다.


답변

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


답변

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'


답변

Jenkins CI를 사용하여 실행을 관리합니다. Linux 서버는 워크 스테이션으로 설정되고 Jenkins가 설치되어 있습니다. 따라서 수정 된 run_list로 노드를 부트 스트랩 할 수 있습니다. 어쨌든 부트 스트랩 프로세스는 요리사 클라이언트를 마지막에 실행합니다.

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


답변

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

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


답변

chef-runChef Workstation 에는 새로운 명령이 있습니다 .

chef-run server_name resource_name

chef-client존재하지 않는 경우 설치 하고 지정한 리소스 또는 요리 책을 실행합니다.

튜토리얼 : https://learn.chef.io/modules/try-chef-infra#/


답변