chef 구성

SYSTEM/TECH / /
반응형

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의 구성요소로 설정 로직을 담고 있는 코드.

        reciperuby 코드로 만들어져 있으며, ruby 코드와 attribute, resource 등을 이용해서 만든다.

 

- Knife(식도)

레시피, Node, Role 설정등을 직접 관리하는 도구()

 

- Role

여러 Node들에 동일한 속성을 지정하여 그룹화(: apache,mysql,php = 웹서버 role)

 

- Run List

자동화를 위한 로직을 담고 있는 코드 조각 (Recipe)

 

- Resources

리소스는 자동화를 위해서 많이 사용하는 코드를 라이브러리 형태로 개발해 둔 chef 구성요소다.

Chefuser(유저관리), group, directory, file, cron, service 등 시스템 자동화에 필수적으로 사용하는

기능들을 resource 형태로 제공한다

 

- Data Bags

data bagschef 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 serverup)

 

 Recipe 추가

            knife node run_list add DEV-HV-CHEF-NODE01 'recipe[apache]'

            Nodeagent 자동설치 및 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


반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기