l Chef 정의
– Infrastructure 관리를 자동화 하기 위한 오픈 소스 프레임워크 –
– 빠르고 효율적인 시스템 관리를 돕기 위해 서버 환경 설정이나 갱신을 자동화한 툴
l Chef 기능
– Application 일괄 배포(설치)
– OS, Application 환경 설정 일괄 변경
– Service(Process) 실행 및 정지
– Cron(Schedule) 설정 및 삭제
– Recipe (설정 코드) 버전 관리
l Chef 구성
– 구성
Ruby(Language) + Nginx(WEB) + Postgres(DB) + Redis(Memcached) + Rabbitmq(Queue)
– Chef Server
레시피와 다른 설정 데이터를 저장하는 중앙 저장소다. Chef 클라이언트가 chef 서버로 부터
레시피와 설정데이터를 가져와서 실행하는 방식으로 작동한다
– Chef Client
Chef로 관리하려는 노드에는 chef client가 설치된다. 주기적으로 Chef 서버에 연결해서, 최신의
레시피를 확인하고 레시피 코드를 실행한다
– Workstation
개발자는 Chef server에 접근할 수 있는 권한을 획득 한뒤, 노드 관리, 레시피 개발과 같은
DevOps 업무를 수행하게 된다. 사용자는 knife와 웹 콘솔을 이용해서 이들 작업을 수행한다.
l Chef 구성 요소
– Cookbook(요리책)
recpie, resource definition, attribute, library, cookbook file 그리고 template 파일, 기타 메타데이터의 모음이다
일반적으로 Cookbook는 애플리케이션 단위로 개발한다.
즉 mysql cookbook, apache cookbook, dhcp cookbook 형식으로 개발 한다
– Recipe(요리법)
Cookbook의 구성요소로 설정 로직을 담고 있는 코드.
recipe는 ruby 코드로 만들어져 있으며, ruby 코드와 attribute, resource 등을 이용해서 만든다.
– Knife(식도)
레시피, Node, Role 설정등을 직접 관리하는 도구(툴)
– Role
여러 Node들에 동일한 속성을 지정하여 그룹화(예: apache,mysql,php = 웹서버 role)
– Run List
자동화를 위한 로직을 담고 있는 코드 조각 (Recipe)
– Resources
리소스는 자동화를 위해서 많이 사용하는 코드를 라이브러리 형태로 개발해 둔 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
– Example
yum install chef (설치)
chef-server-ctl reconfigure
chef-server-ctl user-create user_name first_name last_name email password –filename FILE_NAME
chef-server-ctl user-create company js park xxx@gmail.com 123456 –filename xxxx.key
chef-server-ctl user-list
chef-server-ctl install opscode-manage
opscode-manage-ctl reconfigure
chef-server-ctl reconfigure
사용자 생성 및 인증서 생성 Chef Server 환경 설정 자동 reload
(workstation,node 서버에서 사용할 계정 ,인증서)
opscode-manage 설치로 WEB 기반 관리
* Point
– WEB (nginx)기반 관리 접속 ( https://siteurl/ (443))
– WEB UI 방식 콘솔이지만 기능 부족 (예: 전체 node Apply(반영) 기능 없음)
2. Chef WorkStation
Guide : https://docs.chef.io/install_server.html
– Example
curl -L https://www.opscode.com/chef/install.sh | bash (workstation 자동 설치)
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 추가
* Point
– knife CLI 기반 도구로 모든 설정
(cookbook,role,recipe,node)을 Control
Chef Server <- workstation -> node 통신 (SSL)
3. Chef Node
Guide : http://docs.chef.io/client/
– Example
Linux : SSH port 방화벽 허용 (22)
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 설정 필요)
* Point
– 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