Knife는 chef를 제어하기 위한 CLI기반의 툴이다. 관리자는 knife를 이용해서 node, cookbook, roles, databags, envirionments 등 chef의 모든 것을 관리할 수 있다.
Knife도 chef client와 마찬가지로 chef server에서 제공하는 REST API를 이용해서 작업을 한다. chef server와 상호작용하기 위한 CLI 버전이라고 볼 수 있다.
테스트 환경
Virtualbox로 두 대의 centos6.3 운영체제를 올려서 chef-server와 chef-client를 설치했다.
도움말 시스템
# knife --help
Usage: knife sub-command (options)
-s, --server-url URL Chef Server URL
-k, --key KEY API Client Key
--color Use colored output
-c, --config CONFIG The configuration file to use
--defaults Accept default values for all questions
-e, --editor EDITOR Set the editor to use for interactive commands
-E, --environment ENVIRONMENT Set the Chef environment
-F, --format FORMAT Which format to use for output
--no-color Don't use colors in the output
-n, --no-editor Do not open EDITOR, just accept the data as is
-u, --user USER API Client Username
...
knife는 하위 명령에 대한 help도 제공한다.
# knife ssh --help
knife ssh QUERY COMMAND (options)
-a, --attribute ATTR The attribute to use for opening the connection - default is fqdn
-s, --server-url URL Chef Server URL
-k, --key KEY API Client Key
--color Use colored output
-C, --concurrency NUM The number of concurrent connections
-c, --config CONFIG The configuration file to use
--defaults Accept default values for all questions
-e, --editor EDITOR Set the editor to use for interactive commands
-E, --environment ENVIRONMENT Set the Chef environment
-F, --format FORMAT Which format to use for output
-i IDENTITY_FILE The SSH identity file used for authentication
--identity-file
-m, --manual-list QUERY is a space separated list of servers
--no-color Don't use colors in the output
-n, --no-editor Do not open EDITOR, just accept the data as is
--no-host-key-verify Disable host key verification
-u, --user USER API Client Username
--print-after Show the data after a destructive operation
-P, --ssh-password PASSWORD The ssh password
-p, --ssh-port PORT The ssh port
-x, --ssh-user USERNAME The ssh username
...
knife help list로 하위 명령어들을 확인할 수 있다.
# knife help list
Available help topics are:
bootstrap
client
configure
cookbook
cookbook-site
data-bag
environment
exec
index
knife
node
...
knife 설정
knife는 chef client와 같은 레벨에서 작동한다. 따라서 chef server API에 접근하기 위한 설정들이 필요하다. knife 설정파일이름은 ~/.chef/knife.rb 이다.
설정 매개변수들은 다음과 같다.
# knife configure -i
WARNING: No knife configuration file found
Where should I put the config file? [~/.chef/knife.rb]
Please enter the chef server URL: [http://localhost:4000] http://192.168.57.2:4000
Please enter a clientname for the new client: [root] joinc
Please enter the existing admin clientname: [chef-webui]
Please enter the location of the existing admin client's private key: [/etc/chef/webui.pem] webui.pem
Please enter the validation clientname: [chef-validator]
Please enter the location of the validation key: [/etc/chef/validation.pem] validation.pem
Please enter the path to a chef repository (or leave blank):
Creating initial API user...
Created client[joinc]
Configuration file written to /root/.chef/knife.rb
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로 등록된다.
client 타입
Client는 아래의 두 가지 타입이 있다.
Admin API client : 관리자 권한을 가지는 client다. 읽기와 쓰기권한 모두를 가지고 있다. cookbook을 수정하고, node와 client를 등록하고, data bag을 편집할 수 있다.
일반 client : cookbook에 대한 읽기 권한만을 가지는 client다. validation.pem을 이용해서 등록된 client들은 일반 cleint 권한을 가진다. cookbook을 다운로드 받아서 실행할 수 있다.
create
새로운 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 파일로 복사한다.
사용법
사용법은 다음과 같다.
# knife client create CLIENT_NAME (options)
사용할 수 있는 옵션들이다.
-a, --admin : Admin API client를 만든다. 모든 chef 자원에 접근할 수 있다. -a 옵션이 없을 경우 일반 client를 만든다.
mgmtclient 라는 이름의 admin API client를 만든다.
# knife client create mgmtclient -a -f mgmtclient.pem
kinfe는 chef server의 자원을 말그대로 칼질하는 관리도구다. 따라서 권한 인증을 위한 private key 파일이 필요하다(여기에서는 yundream.pem). 이제 knife를 이용해서 chef 자원을 요리(읽기/쓰기)할 수 있다.
chef 클라이언트 설정파일을 만든다.
Node는 chef-client가 설치된 모든 서버로 물리적인 서버와 (클라우드 기반의)가상화 서버까지 포함하나. chef는 물리 노드와 가상화 노드의 조합으로 이루어진다. chef-client는 각 노드에서 실행되며, Ohai를 이용해서 클라이언트 시스템에 대한 정보를 수집한다.
Chef server는 node의 sub command를 이용해서 노드들을 관리한다.
knife node [ARGUMENT] (options)
create
chef 서버에 노드를 추가한다. 추가된 노드 정보는 chef server에 JSON 형테로 저장된다. knife로 node를 편집하기 위해서는 환경변수 EDITOR에 편집기를 등록해야 한다.
chef에 등록된 노드들에 대해서 ssh로 명령을 수행할 수 있다. 개인적으로 설정이 변경된 노드의 chef-client를 재시작하기 위해서 주로사용한다. 사용법은 아래와 같다.
# knife ssh SEARCH_QUERY SSH_COMMAND (options)
옵션 들
-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 수를 제한할 수 있다.
SSH_COMMAND : 실행할 ssh 명령
모든 node의 chef-client를 작동한다.
# knife ssh 'name:*' 'sudo chef-client'
web role을 가지는 모든 node의 uptime을 가져온다. yundream/12345를 이용하며, ip 주소로 접근한다.
Role이 변경됐을 때, 원격 node의 chef-client를 실행하기 위한 유일한 방법이다. 물론 corn에 등록하거나 chef-client -i옵션등을 이용해서 주기적으로 실행하는 방법이 있긴 하지만, 그다지 권할만한 방법은 아닌 것 같다. chef를 이용해서 시스템을 자동화할 경우 unix 계정도 함께 관리할 텐데, 이때 ssh-key를 함께 관리하도록 하자. 그러면 knife ssh와 ssh key를 이용해서, 원하는 시점에 chef-cliet를 실행할 수 있다.
Contents
Knife
테스트 환경
도움말 시스템
# knife --help Usage: knife sub-command (options) -s, --server-url URL Chef Server URL -k, --key KEY API Client Key --color Use colored output -c, --config CONFIG The configuration file to use --defaults Accept default values for all questions -e, --editor EDITOR Set the editor to use for interactive commands -E, --environment ENVIRONMENT Set the Chef environment -F, --format FORMAT Which format to use for output --no-color Don't use colors in the output -n, --no-editor Do not open EDITOR, just accept the data as is -u, --user USER API Client Username ...# knife ssh --help knife ssh QUERY COMMAND (options) -a, --attribute ATTR The attribute to use for opening the connection - default is fqdn -s, --server-url URL Chef Server URL -k, --key KEY API Client Key --color Use colored output -C, --concurrency NUM The number of concurrent connections -c, --config CONFIG The configuration file to use --defaults Accept default values for all questions -e, --editor EDITOR Set the editor to use for interactive commands -E, --environment ENVIRONMENT Set the Chef environment -F, --format FORMAT Which format to use for output -i IDENTITY_FILE The SSH identity file used for authentication --identity-file -m, --manual-list QUERY is a space separated list of servers --no-color Don't use colors in the output -n, --no-editor Do not open EDITOR, just accept the data as is --no-host-key-verify Disable host key verification -u, --user USER API Client Username --print-after Show the data after a destructive operation -P, --ssh-password PASSWORD The ssh password -p, --ssh-port PORT The ssh port -x, --ssh-user USERNAME The ssh username ...knife 설정
- node_name : chef-server 연결과 인증을 위한 client 이름
- client_key : chef-server 인증에 사용할 Private key 파일
- chef_server_url : chef server의 URL.
- chache_type : 기본은 'BasicFile'다. BasicFile, Berkeley, Couch, DataMapper, LMC, Memcache, Memory, MongoDB, Redis, Rufus, S3, SDBM, Tyrant, Xattr, YAML을 지원한다.
- cache_option : cache 옵션으로 cache_type에 따라서 달라진다.
- validation_client_name
- validation_client_key
- cookbook_path
- cookbook_copyright, cookbook_email, cookbook_license
knife를 사용하려면 knife client 인증 절차가 필요하다.EDITOR 환경 변수 설정
knife sub commands
bootstrap
client
client 타입
create
사용법
- -a, --admin : Admin API client를 만든다. 모든 chef 자원에 접근할 수 있다. -a 옵션이 없을 경우 일반 client를 만든다.
mgmtclient 라는 이름의 admin API client를 만든다.delete
list
reregister
show
# knife client show node1.joinc.co.kr _rev: 1-8669ff3d09ccd85292e92165fc065ca1 admin: false chef_type: client json_class: Chef::ApiClient name: node1.joinc.co.kr public_key: -----BEGIN RSA PUBLIC KEY----- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy ...... -----END RSA PUBLIC KEY-----configure
- --client DIRECTORY : chef 클라이언트 설정파일을 만들 수 있다.
- -i, --initial : API 클라이언트를 초기화 한다. 일반적으로 chef server를 처음 인스톨하고, 이를 관리하기 위한 administrator 클라이언트를 초기화하기 위해서 사용한다.
- -r REPO, --repository REPO : chef 저장소 경로
knife 설정파일을 만든다.cookbook
create
- cookbook/attributes
- cookbook/definitions
- cookbook/files/default
- cookbook/libraries
- cookbook/metadata.rb
- cookbook/providers
- cookbook/readme.md
- cookbook/recipes/default.rb
- cookbook/resources
- cookbook/templates/default
create로 만든 cookbook은 knife upload로 chef server에 업로드할 수 있다.# tree . └── HelloWorld ├── README.md ├── attributes ├── definitions ├── files │ └── default ├── libraries ├── metadata.rb ├── providers ├── recipes │ └── default.rb ├── resources └── templates └── default- -C, --copylight : 카피라이트 정보를 입력
- -I LICENSE, --license LICENSE : 배포에 사용할 라이센스 정책을 입력한다.
- -m EMAIL, --email EMAIL : 쿡북 관리자의 email
- -r FORMAT, --readme-format : 옵션 정보를 저장할 문서 형식. md와 rdoc이 있다.
사용 예)upload
delete
download
list
show
test
node
create
{ "json_class": "Chef::Node", "default": { }, "run_list": [ ], "chef_type": "node", "automatic": { }, "name": "node1.yundream.com", "override": { }, "normal": { }, "chef_environment": "_default" }delete
list
run_list add
run_list remove
show
- -l, --long : 모든 정보를 보여준다.
- -m, --medium : 상세 정보를 보여주지만 모든 정보를 보여주진 않는다. 옵션이 없을 경우 -m 이 기본이다.
- -r, --run-list : run-list만 보여준다.
-l 옵션을 사용할 경우 ohai를 이용해서 노드의 시스템과 네트워크에 대한 구체적인 정보를 보여준다. 이 내용만을 가지고도 시스템 구성정보를 보여줄 수 있을 것이다.- block device 정보
- 모델
- 크기
- 상태
- network interface 정보
- rx, tx : byte, packet
- cpu
- bios 상세 정보
- group및 user정보
- filesystem 정보
- network 정보
- gateway
- interface의 MAC, IP, status, mtu
- os 정보
ohai를 모니터링 도구로까지 확장할 수 있을 것 같은데... 고민해봐야 겠다. -F 옵션으로 출력 결과를 JSON으로 변환할 수 있다.cookbook-site
data-bag
data bag create
data bag list
data bag 업로드
# cat mydatabag.json { "id": "test", "host" : "test.joinc.co.kr", "ip" : "111.111.111.111" }data bag show
data bag 삭제
environment
exec
role
search
Search 색인 테이블 이름
shef
ssh
- -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 수를 제한할 수 있다.
- SSH_COMMAND : 실행할 ssh 명령
모든 node의 chef-client를 작동한다.status
tag
히스토리
Recent Posts
Archive Posts
Tags