Knife는 chef를 제어하기 위한 CLI기반의 툴이다. 관리자는 knife를 이용해서 node, cookbook, roles, databags, envirionments 등 chef의 모든 것을 관리할 수 있다.
Knife도 chef client와 마찬가지로 chef server에서 제공하는 REST API를 이용해서 작업을 한다. chef server와 상호작용하기 위한 CLI 버전이라고 볼 수 있다.
chef API를 사용하기 위해서는 chef cleint로 등록을 해야 한다.
하지만 노드가 처음 만들어진 상태에서 chef-client를 실행하면, 아직 API client 권한을 가지고 있지 않기 때문에 chef server에 요청을 할 수가 없다. 요청을 하기 위해서는 client key 파일을 가지고 있어야 한다. chef 관리자는 knife를 이용해서 client를 등록하고, 이때 만들어진 client key 파일을 배포할 수 있다. 이 key 파일을 이용해서 등록하면 된다.
client를 등록하는 또 다른 (일반적인)방법은 chef-validator으로 등록하는 방법이다. 처음 chef-client가 실행되면 clinet는 먼저 client key 파일을 찾는다. 만약 client key 파일이 없다면 validation.pem 파일을 이용해서 등록을 시도한다. validation.pem 파일은 chef-server의 /etc/chef 디렉토리에 있다. validation.pem 파일을 이용해서 등록된 client는 일반 (none-admin) client로 등록된다.
새로운 API client를 등록할 수 있다. 등록하고 나면 API client를 위한 RSA key pair가 만들어진다. Public key는 chef server에 저장되고 Private key는 화면에 출력되거나 파일로 저장할 수 있는데, 이 private key를 client에 배포하면 된다.
chef-client(일반 client)를 위한 private key 파일은 /etc/chef/client.pem으로 복사한다.
Knife(Admin API client)를 위한 private key 파일은 (보통) ~/.chef/client_name.pem 파일로 복사한다.
kinfe는 chef server의 자원을 말그대로 칼질하는 관리도구다. 따라서 권한 인증을 위한 private key 파일이 필요하다(여기에서는 yundream.pem). 이제 knife를 이용해서 chef 자원을 요리(읽기/쓰기)할 수 있다.
chef 클라이언트 설정파일을 만든다.
Node는 chef-client가 설치된 모든 서버로 물리적인 서버와 (클라우드 기반의)가상화 서버까지 포함하나. chef는 물리 노드와 가상화 노드의 조합으로 이루어진다. chef-client는 각 노드에서 실행되며, Ohai를 이용해서 클라이언트 시스템에 대한 정보를 수집한다.
Chef server는 node의 sub command를 이용해서 노드들을 관리한다.
-a, --attribute SSH_ATTR : SSH 연결에 사용 할 attribute를 지정한다. 기본값으로 FQDN이 사용되며, ipaddress와 hostname을 사용할 수 있다. chef client를 등록할때, 호스트의 fqdn 이름을 이용하지 않고 chef-client -N 옵션으로 등록할 수도 있다. 이 경우 fqdn을 이용하면 제대로 접속이 안되므로 -a 옵션을 사용해야 한다.
-P, --ssh-password PASSWORD : SSH 패스워드
-x, --ssh-user USERNAME : SSH 유저이름
-i, --identity-file IDENTITY_FILE : 인증에 사용할 ssh key 파일
-p, --ssh-port PORT : SSH Port 이름
-C, --concurrency NUM : 동시 연결 수. 질의어에 따라서 여러 개의(심지어는 수백개) 노드가 검색될 수 있다. 이 옵션으로 동시 접속 가능한 ssh 수를 제한할 수 있다.
Role이 변경됐을 때, 원격 node의 chef-client를 실행하기 위한 유일한 방법이다. 물론 corn에 등록하거나 chef-client -i옵션등을 이용해서 주기적으로 실행하는 방법이 있긴 하지만, 그다지 권할만한 방법은 아닌 것 같다. chef를 이용해서 시스템을 자동화할 경우 unix 계정도 함께 관리할 텐데, 이때 ssh-key를 함께 관리하도록 하자. 그러면 knife ssh와 ssh key를 이용해서, 원하는 시점에 chef-cliet를 실행할 수 있다.
Contents
1. Knife
1.1. 테스트 환경
1.2. 도움말 시스템
1.3. knife 설정
1.4. EDITOR 환경 변수 설정
2. knife sub commands
2.1. bootstrap
2.2. client
2.2.1. client 타입
2.2.2. create
2.2.2.1. 사용법
2.2.3. delete
2.2.4. list
2.2.5. reregister
2.2.6. show
2.3. configure
2.4. cookbook
2.4.1. create
2.4.2. upload
2.4.3. delete
2.4.4. download
2.4.5. list
2.4.6. show
2.4.7. test
2.5. node
2.5.1. create
2.5.2. delete
2.5.3. list
2.5.4. run_list add
2.5.5. run_list remove
2.5.6. show
2.6. cookbook-site
2.7. data-bag
2.7.1. data bag create
2.7.2. data bag list
2.7.3. data bag 업로드
2.7.4. data bag show
2.7.5. data bag 삭제
2.8. environment
2.9. exec
2.10. role
2.11. search
2.11.1. Search 색인 테이블 이름
2.12. shef
2.13. ssh
2.14. status
2.15. tag
3. 히스토리
1. Knife
1.1. 테스트 환경
1.2. 도움말 시스템
1.3. knife 설정
1.4. EDITOR 환경 변수 설정
2. knife sub commands
2.1. bootstrap
2.2. client
2.2.1. client 타입
2.2.2. create
2.2.2.1. 사용법
2.2.3. delete
2.2.4. list
2.2.5. reregister
2.2.6. show
2.3. configure
2.4. cookbook
2.4.1. create
2.4.2. upload
2.4.3. delete
2.4.4. download
2.4.5. list
2.4.6. show
2.4.7. test
2.5. node
2.5.1. create
2.5.2. delete
2.5.3. list
2.5.4. run_list add
2.5.5. run_list remove
2.5.6. show
2.6. cookbook-site
2.7. data-bag
2.7.1. data bag create
2.7.2. data bag list
2.7.3. data bag 업로드
2.7.4. data bag show
2.7.5. data bag 삭제
2.8. environment
2.9. exec
2.10. role
2.11. search
2.11.1. Search 색인 테이블 이름
2.12. shef
2.13. ssh
2.14. status
2.15. tag
3. 히스토리
Recent Posts
Archive Posts
Tags