l Chef 정의
- Infrastructure 관리를 자동화 하기 위한 오픈 소스 프레임워크 -
l Chef 기능
- Application 일괄 배포(설치)
이외 기능들은 구글링.......
Ruby(Language) + Nginx(WEB) + Postgres(DB) + Redis(Memcached) + Rabbitmq(Queue)
레시피와 다른 설정 데이터를 저장하는 중앙 저장소다. Chef 클라이언트가 chef 서버로 부터
레시피와 설정데이터를 가져와서 실행하는 방식으로 작동한다
Chef로 관리하려는 노드에는 chef client가 설치된다. 주기적으로 Chef 서버에 연결해서, 최신의
레시피를 확인하고 레시피 코드를 실행한다
개발자는 Chef server에 접근할 수 있는 권한을 획득 한뒤, 노드 관리, 레시피 개발과 같은
DevOps 업무를 수행하게 된다. 사용자는 knife와 웹 콘솔을 이용해서 이들 작업을 수행한다.
recpie, resource definition, attribute, library, cookbook file 그리고 template 파일, 기타 메타데이터의 모음이다
일반적으로 Cookbook는 애플리케이션 단위로 개발한다.
즉 mysql cookbook, apache cookbook, dhcp cookbook 형식으로 개발 한다
Cookbook의 구성요소로 설정 로직을 담고 있는 코드.
recipe는 ruby 코드로 만들어져 있으며, ruby 코드와 attribute, resource 등을 이용해서 만든다.
레시피, Node, Role 설정등을 직접 관리하는 도구(툴)
여러 Node들에 동일한 속성을 지정하여 그룹화(예: apache,mysql,php = 웹서버 role)
자동화를 위한 로직을 담고 있는 코드 조각 (Recipe)
리소스는 자동화를 위해서 많이 사용하는 코드를 라이브러리 형태로 개발해 둔 chef 구성요소다.
Chef는 user(유저관리), group, directory, file, cron, service 등 시스템 자동화에 필수적으로 사용하는
기능들을 resource 형태로 제공한다
- Data Bags
data bags는 chef server에 저장되는 key - value 형식의 데이터다.
data bags의 데이터는 모든 cookbook에서 전역변수처럼 사용할 수 있다.
인프라스트럭쳐 전체에서 사용되는 데이터를 저장하기 위해서 사용한다. JSON 형태로 사용한다
1. Chef Server
Guide : https://docs.chef.io/install_server.html
사용자 생성 및 인증서 생성 Chef Server 환경 설정 자동 reload
(workstation,node 서버에서 사용할 계정 ,인증서)
opscode-manage 설치로 WEB 기반 관리
- WEB (nginx)기반 관리 접속 ( https://siteurl/ (443))
- WEB UI 방식 콘솔이지만 기능 부족 (예: 전체 node Apply(반영) 기능 없음)
2. Chef WorkStation
Guide : https://docs.chef.io/install_server.html
Node(client) Agent 자동 설치 (등록)
Linux : knife bootstrap 1.1.1.1 -x root -P ‘pw'
Windows : knife bootstrap windows winrm 1.1.1.1 -x administrator -P ‘pw‘
Cookbook 생성
knife cookbook site download apache
knife cookbook upload apache (chef server로 up)
Recipe 추가
knife node run_list add DEV-HV-CHEF-NODE01 'recipe[apache]'
Node에 agent 자동설치 및 apache cookbook 추가 및 특정 서버에 apache recipe 추가
- knife CLI 기반 도구로 모든 설정
(cookbook,role,recipe,node)을 Control
Chef Server <- workstation -> node 통신 (SSL)
3. Chef Node
Guide : http://docs.chef.io/client/
- Example
Windows : WinRM port 방화벽 허용 (5985)
winrm set winrm/config/client/auth @{Basic="true"}
winrm set winrm/config/service/auth @{Basic="true"}
winrm set winrm/config/service @{AllowUnencrypted="true"}
chef-clinet (설정 적용)
Chef Server 로 부터 role 및 recipe 설정을 받아서
node 에 실제 적용 (windows 서버는 winrm 설정 필요)
- node agent 설치는 workstation 에서 자동 가능
(자동 설치시에는 OS 계정 정보 필요)
- node 별로 agent 직접 설치해도됨
- Chef Server <- node 통신 (SSL)
- Chef 활용 예제 -
Linux 서버 (apache 설치)
1. Cookbook 생성 및 Recipe 수정 (site down OR 직접 생성)
$ knife cookbook site down apache OR knife cookbook create apache
$ knife cookbook list (생성된 cookbook 확인)
$ cat /root/cookbooks/linux/recipes/default.rb (apache 패키지를 install 하라는 recipe)
yum_package "Installing Apache" do
package_name "httpd.x86_64"
action :install
end
☆ 붉은색 부분은 recipe 특성에 맞게 수정(package, service,template,execute,cron / action: remove,start,stop,enable등)
$ knife cookbook upload apache (apache 라는 cookbook를 chef server에 upload)
2. Recipe 를 특정 node에 추가
$ knife node list OR knife status (node 리스트 확인)
$ knife node run_list add DEV-HV-CHEF-NODE01 'recipe[apache]‘ (호스트명 DEV-HV-CHEF-NODE01 node에
apache 레시피 추가)
$ knife node run_list add DEV-HV-CHEF-NODE01 'recipe[apache],recipe[php] role[mysql]’ (하나이상 레시피 추가시)
$ knife node show DEV-HV-CHEF-NODE01 (node 에 추가된 레시피 확인)
3. Node 에 apache 설치 recipe 적용(반영)
$ knife ssh 'DEV-HV-CHEF-NODE01' ‘chef-client' -m -p sshportnum -x root -P ‘pw‘ (workstation에서 직접 실행)
$ chef-client (적용할 node (DEV-HV-CHEF-NODE01) 에서 직접 실행)
4. Node (DEV-HV-CHEF-NODE01) 에서 apache 설치 여부 확인
$ rpm -qa | grep httpd
httpd-2.2.15-39.el6.centos.x86_64
Linux cookbook list : https://supermarket.chef.io/cookbooks OR git hub site
Windows 서버 (registry 추가)
1. Cookbook 생성 및 Recipe 수정
$ knife cookbook create winregistry
$ knife cookbook list (생성된 cookbook 확인)
$ cat /root/cookbooks/windows/recipes/default.rb (윈도우 node에 특정 레지스트리를 추가 하는 recipe)
registry_key "HKEY_LOCAL_MACHINE\\...\\System" do
values [{
:name => "NewRegistryKeyValue",
:type => :multi_string,
:data => ['foo\0bar\0\0'] }]
action :create
end
☆ 붉은색 부분은 recipe 특성에 맞게 수정(windows_batch, windows_feature, windows_task /action: delete,run,change,enable등)
$ knife cookbook upload winregistry (winregistry 라는 cookbook를 chef server에 upload)
2. Recipe 를 특정 node에 추가
$ knife node list OR knife status (node 리스트 확인)
$ knife node run_list add SVR-HV-XXX 'recipe[winregistry ]‘ (호스트명 SVR-HV-XXX node에 winregistry 레시피 추가)
$ knife node show SVR-HV-DAVICHI (node 에 추가된 레시피 확인)
3. Node 에 apache 설치 recipe 적용(반영)
$ knife winrm 'SVR-HV-AAVICHI' 'chef-client -c c:/chef/client.rb' -m -x administrator -P ‘pw‘ (workstation 에서 직접실행)
$ chef-client (적용할 node (SVR-HV-XXX) 에서 직접 실행)
4. Node (SVR-HV-XXX) registry 추가 여부 확인
windows cookbook list : https://supermarket.chef.io/cookbooks https://github.com/opscode-cookbooks/windows