Chef

오픈소스 비즈니스 컨설팅
둘러보기로 가기 검색하러 가기

설정 자동화 툴(Server Configuration Management)인 Chef를 정리 합니다.

Chef 개요

Chef는 형상 관리 및 시스템 통합의 자동화 목적으로 사용되는 오픈소스 프레임워크 입니다.

  • Chef Architecture
시스템 상세
WorkStation
  • Chef client, 작업 컴퓨터
Server
  • 인프라 구성을 저장하는 장비
Node
  • Chef client를 이용하여 구성 되어야할 장비
  • 주요 구성 요소
  • Modeling Your Infrastructure
구성요소 상세
Nodes
  • 관리되는 서버 또는 시스템 단위, Recipe와 Role이 적용되는 서버
  • Run List : Node에서 실행될 recipe 목록으로 role을 포함 합니다.
  • Node Attributes : Node가 가지는 속석, key/value로 구성된 node와 role의 관계
default[:ems][:is_install] = true
Roles
  • Node가 가지는 역할 (예, Web Server, DB Server)
  • Run List
  • Role Attributes
  • Configuring Nodes
구성요소 상세
Cookbooks
  • 분배하는 서비스 모듈 (예, Apache, MySQL)
  • Configuration 정보를 package, 분배, 공유하는 수단
  • recipe, resource definition, attribute, library, cookbook file, template file, metadata의 모음
  • Cookbook
  • Recipes -> Resource -> Providers
  • Attributes
  • Templates, Files, Libraries
  • Templates
vi ~.erb
    'NAME':'<%= @attr %>'
Recipes
  • 순서대로 적용되어야 하는 리소스
  • DSL (Domain Specific Language) 사용, Ruby file
Metadata
  • Metadata.rb
  • Cookbook에 대한 정보 입력, 의존성 입력
Resources

Data container

  • Resource Attributes : Resource 속성
  • Actions : 실행하고자 하는 활동
Providers
  • Resource를 추상화하기 위한 이행 도구
Search
  • 인프라에 대한 임의의 데이터 조회
  • Solr / Lucene, RabbitMQ 사용, Full Text Search 지원
Data Bags
  • Chef Server에 저장되는 key/value 데이터
  • JSON 형태로 저장되는 Global Value (예, Node의 IP Address)
Environments
  • Production, Staging, Development, Testing 등 구조적으로 분리된 다른 공간을 관리하기 위한 매카니즘
  • Managing Chef
구성요소 상세
Knife
  • Chef Client가 설치된 Node에서 Chef Sever로의 CLI
  • REST API 지원
Management Console
  • Chef Server API로 Web UI 제공
Shef
  • Chef Console

Chef Architecture.png

  • 사용 S/W

CentOS에서 Chef 설치

  • Chef Server와 Client의 hostname은 FQDN을 만족하여야 합니다.
hostname -f
  • Chef Server 0.10.6 설치
rpm -Uvh http://rbel.frameos.org/rbel6        #--- RBEL repository 설치
# yum remove ruby, yum remove ruby-libs       #--- Ruby 관련 삭제
yum install rubygem-chef-server               #--- Chef Server 설치

cd /usr/sbin
./setup-chef-server.sh                        #--- 이 파일이 없을 경우, Ruby 관련 삭제부터 다시 실행
  • 설치된 폴더 : /etc/chef
  • 기동 종료
service chef-server start                     #--- start, stop, status
  • 사용 port
  • Chef Restful API Server : 4000
  • Chef Server 웹 UI : 4040
  • CouchDB : 5984
  • RabbitMQ : 5672,4369,47762
  • Chef Solr : 8983
  • 방화벽에서 4040과 4000 port를 열어 주세요.
  • 사용 폴더
  • /etc/chef/ : Chef 설치 폴더
  • /var/chef/ : Chef 관련 폴더
  • Admin type의 Knife 등록 (Chef Server에 Client가 등록됨)
  • Knife의 종류는 Admin과 일반 type이 있습니다.
  • Chef Server가 설치된 서버와 다른 서버에 설치가 가능 합니다.
cd ~
mkdir .chef
cd .chef
cp /etc/chef/validation.pem .

knife configure -i
# "Please enter a clientname for the new client: [root]" 에 대해서만 적당한 값을 등록 합니다.
   Overwrite /root/.chef/knife.rb? (Y/N) y
   Please enter the chef server URL: http://www.ossbiz.co.kr:4000
   Please enter a clientname for the new client: [root] ossbiz
   Please enter the existing admin clientname: [chef-webui]
   Please enter the location of the existing admin client's private key: [/etc/chef/webui.pem]
   Please enter the validation clientname: [chef-validator]
   Please enter the location of the validation key: [/etc/chef/validation.pem]
   Please enter the path to a chef repository (or leave blank):
   Creating initial API user...
   Created client[ossbiz]
   Configuration file written to /root/.chef/knife.rb

# export EDITOR=vi
knife -h
  • Chef Client 0.10.6 설치 (Chef Server에 Client와 Node가 등록됨)
  • Hostname 설정
hostname client001.testdomain.com               #--- 서버에 적용
또는
chef-client -N client001.testdomain.com         #--- Chef Client에서만 사용
  • Chef client 설치
rpm -Uvh http://rbel.frameos.org/rbel6          #--- RBEL repository 설치
yum install rubygem-chef

cd /etc/chef
knife configure client ./
#--- client.rb와 validation.pem 파일이 생성됨
vi client.rb
   chef_server_url  'http://www.ossbiz.co.kr:4000'

#Chef Server에 있는 validation.pem 파일을 여기로 복사 합니다.
#cp /etc/chef/validation.pem .

chef-client                                    #--- client.pem 파일이 생성 됩니다.
rm validation.pem                              #--- 보안상 Client에 있는 validataion.pem 파일을 삭제
  • knife 명령으로 확인
knife node list
knife client list
  • Cher Server 초기화
yum remove rubygem-chef-* couchdb rabbitmq-server
rm -rf /var/lib/couchdb/ /var/lib/rabbitmq/
  • 등록된 서비스 (/etc/init.d/)
chef-client
chef-expander
chef-server
chef-server-webui
chef-solr

couchdb
rabbitmq-server
  • 참고 문헌

Cookbook

  • HelloWorld Cookbook 생성
knife cookbook create HelloWorld                #--- /var/chef/cookbooks/HelloWorld/ 폴더가 생성이 됩니다.

vi /var/chef/cookbooks/HelloWorld/attributes/HelloWorld.rb
   default['message']="Hello world!!"

vi /var/chef/cookbooks/HelloWorld/recipes/default.rb
   template "/tmp/HelloWorld.txt" do
       source "HelloWorld.txt.erb"
       variables :message => node['message']
       action :create
   end

vi /var/chef/cookbooks/HelloWorld/templates/default/HelloWorld.txt.erb
   My Message is : <%= @message %>

cd /var/chef/cookbooks
knife cookbook upload -a -o .                  #--- 새로 만든 HelloWorld Cookbook을 업로드
knife cookbook list
  • Chef Client에 적용
  • 여기서 "www.ossbiz.co.kr"는 node의 이름 입니다.
knife node run_list add www.ossbiz.co.kr 'recipe[HelloWorld]'
knife node show www.ossbiz.co.kr -r

chef-client
cat /tmp/HelloWorld.txt
  • HelloWorld Cookbook 삭제
knife cookbook delete HelloWorld              #--- Cookbook 이름으로 삭제
knife cookbook delete HelloWorld  0.0.1       #--- Cookbook 이름과 버전으로 삭제

Knife 사용법

  • 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
       --print-after                Show the data after a destructive operation
   -V, --verbose                    More verbose output. Use twice for max verbosity
   -v, --version                    Show chef version
   -y, --yes                        Say yes to all prompts for confirmation
   -h, --help                       Show this message

Available subcommands: (for details, knife SUB-COMMAND --help)
  • BOOTSTRAP COMMANDS
knife bootstrap FQDN (options)
  • CLIENT COMMANDS
knife client bulk delete REGEX (options)
knife client show CLIENT (options)
knife client create CLIENT (options)
knife client edit CLIENT (options)
knife client delete CLIENT (options)
knife client reregister CLIENT (options)
knife client list (options)
  • CONFIGURE COMMANDS
knife configure client DIRECTORY
knife configure (options)
  • COOKBOOK COMMANDS
knife cookbook upload [COOKBOOKS...] (options)
knife cookbook metadata from FILE (options)
knife cookbook create COOKBOOK (options)
knife cookbook show COOKBOOK [VERSION] [PART] [FILENAME] (options)
knife cookbook list (options)
knife cookbook download COOKBOOK [VERSION] (options)
knife cookbook delete COOKBOOK VERSION (options)
knife cookbook metadata COOKBOOK (options)
knife cookbook test [COOKBOOKS...] (options)
knife cookbook bulk delete REGEX (options)
  • COOKBOOK SITE COMMANDS
knife cookbook site search QUERY (options)
knife cookbook site unshare COOKBOOK
knife cookbook site share COOKBOOK CATEGORY (options)
knife cookbook site download COOKBOOK [VERSION] (options)
knife cookbook site show COOKBOOK [VERSION] (options)
knife cookbook site list (options)
knife cookbook site install COOKBOOK [VERSION] (options)
  • DATA BAG COMMANDS
knife data bag list (options)
knife data bag delete BAG [ITEM] (options)
knife data bag create BAG [ITEM] (options)
knife data bag edit BAG ITEM (options)
knife data bag from file BAG FILE (options)
knife data bag show BAG [ITEM] (options)
  • ENVIRONMENT COMMANDS
knife environment from file FILE (options)
knife environment show ENVIRONMENT (options)
knife environment create ENVIRONMENT (options)
knife environment edit ENVIRONMENT (options)
knife environment list (options)
knife environment delete ENVIRONMENT (options)
  • EXEC COMMANDS
knife exec [SCRIPT] (options)
  • HELP COMMANDS
knife help [list|TOPIC]
  • INDEX COMMANDS
knife index rebuild (options)
  • NODE COMMANDS
knife node bulk delete REGEX (options)
knife node edit NODE (options)
knife node show NODE (options)
knife node run_list remove [NODE] [ENTRY] (options)
knife node from file FILE (options)
knife node run_list add [NODE] [ENTRY] (options)
knife node create NODE (options)
knife node delete NODE (options)
knife node list (options)
  • RECIPE COMMANDS
knife recipe list [PATTERN]
  • ROLE COMMANDS
knife role show ROLE (options)
knife role bulk delete REGEX (options)
knife role list (options)
knife role delete ROLE (options)
knife role from file FILE [FILE..] (options)
knife role edit ROLE (options)
knife role create ROLE (options)
  • SEARCH COMMANDS
knife search INDEX QUERY (options)
  • SSH COMMANDS
knife ssh QUERY COMMAND (options)
  • STATUS COMMANDS
knife status QUERY (options)
  • TAG COMMANDS
knife tag create NODE TAG ...
knife tag delete NODE TAG ...
knife tag list NODE

참고 문헌