Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

소개

현재 ()Chef의 최신 버전은 12다. 이 문서는 원래 chef 10을 기준으로 하고 있었는데, 이번 기회에 12버전을 기준으로 다시 작성하기로 했다. 12 버전으로 작성하면서, 이전 chef를 업그레이드 하는 작업도 동시에 했다.

결론 부터 이야기 하자면 이렇다.
  1. Chef는 Chef os를 지향하고 있다. 패키지 크기만 400M가 넘는 굉장히 큰 소프트웨어가 됐다. 지나치게 시스템이 복잡해진다는 느낌든다.
  2. 거대해진 만큼 다양한 기능들이 추가됐다. 특히 관리 기능이 강화됐다. 예전에는 knife로 삽질했던 것들의 대부분을 웹 콘솔에서 끝낼 수 있다.
  3. 난 거대하고 복잡한 시스템에 대한 거부감을 가지고 있다. 일단 설치를 하고 나면 잘 돌아간다고 하지만, 거대할 수록 제대로 설치하기가 쉽지 않기 때문이다. 아주 다행히도, 두어번의 시행착오를 겪는 정도로 쉽게 설치할 수 있었다.

Chef 구성

Chef를 설치하기 전에 Chef로 어떻게 형상관리가 이루어지는지 간단하게 정리하고 넘어가야 할 것 같다.

Chef는 크게 3개 영역으로 구성된다.
  1. Chef server : Chef server에는 관리하려는 인프라의 형상정보와 형상을 제어하기 위한 코드를 저장하고 있다. 예를들어 인프라를 구성하는 노드의 정보, 노드에 설치 해야하는 애플리케이션의 정보, 노드의 네트워크 정보들과 이들 정보를 제어하기 위한 코드(네트워크 설정, 애플리케이션 설정)들을 가지고 있다.
  2. Chef workstation : Chef 개발자의 개발 PC다. Chef 개발자는 형상정보와 코드를 개발/테스트하고, 이 코드들을 chef server에 올린다. 이 코드들의 모음을 cookbook 이라고 한다.
  3. Chef node : Chef server를 이용해서 관리하는 node 들이다. 이 node들에는 chef client가 설치된다. chef client는 chef server에 접속해서 cookbook을 다운로드 해서 실행한다.
이 문서는 이 3개의 영역을 어떻게 구축하는지에 대한 정보를 담고 있다.

Chef Server Install

설치하기 전에

Chef는 원래 다양한 애플리케이션의 구성이었지만, 그 구성이 더 복잡해지고 거대해졌다. 리눅스 패키지의 크기만 해도 400M가 넘어간다. 데이터베이스 시스템, 검색 서비스, 웹 서비스, 메시지 큐, 로드밸런싱, HA, REDIS 등의 서비스가 녹아있는 All in one 서비스다. Chef OS라고 불러도 되겠다.

규모가 커진만큼 시스템 자원도 많이 먹는다. 예전에 했던대로 512M 메모리를 할당한 인스턴스에 설치하다가 메모리가 부족 때문에 실패했다. 1024M로 늘리니까 제대로 설치가 되더라. 단순한 걸 좋아하는 나로서는 반갑지 않은 변화이긴 한데, 뭐 이미 chef를 사용하고 있으니 어쩔 수 없다. 관리 기능이 편해졌겠지라는 것에 위안을 삼고 설치를 진행했다.

설치 환경

  • 운영체제 : 우분투 리눅스 14.10에 설치 했다.
  • Virtualbox : chef server가 워낙에 다양한 패키지로 이루어져있어서, 이미 설치된 패키지들과 충돌이 날 수도있으니 깔끔한 운영체제에 설치하도록 한다.
  • 인스턴스 기본 설정 값 : chef server가 설치된 운영체제의 기본 값이다.
    • IP : 192.168.56.2
    • hostname : chef.yundream.com

standalone install

Chef의 최신 패키지는 http://downloads.chef.io/chef-server/ 에서 다운로드 할 수 있다. Redhat Enterprise Linux와 Ubuntu Linux를 다운로드 할 수 있다. 14.04용 패키지를 다운로드 했다. Chef는 3가지 인스톨 타입이 있는데, 비교적 단순한 standalone으로 설치하기로 했다.
# dpkg -i chef-server-core_12.0.0-1_amd64.deb 

chef-server-ctl이라는 관리 콘솔 프로그램이 설치된다. chef 서비스를 재 설정하자.
# chef-server-ctl reconfigure

어드민 유저를 만든다.
# chef-server-ctl user-create user_name first_name last_name email password --filename FILE_NAME

이 명령을 실행하면 자동으로 RSA private key를 만든다. --filename옵션으로 RSA private key를 파일로 저장할 수 있다. 나는 yundream이라는 이름의 어드민 계정을 만들었다.
# chef-server-ctl user-create yundream yun dream yundream@gmail.com 123456 --filename yundream.key

유저가 만들어졌는지 확인
# chef-server-ctl user-list
pivotal
yundream

조직(organization)을 만들었다.
# chef-server-ctl org-create short_name full_organization_name --association_user user_name --filename FILE_NAME
명령을 실행하면 RSA private key를 만든다. --filename옵션을 이용해서 파일로 저장했다.
# chef-server-ctl org-create joinc joinc.co.kr --association_user yundream --filename joinc.key

chef-server-ctl은 관리자를 위한 다양한 기능을 포함하고 있는데, 그 중 외부 패키지를 설치하기 위한 install 기능을 가지고 있다. 이 명령을 이용해서 http://packagecloud.io 에 있는 패키지들을 다운로드해서 설치할 수 있다. 1. chef Manage, 2. Chef Push Jobs, 3. Chef Replication, 4. Reporting 등의 패키지를 다운로드 할 수 있다. 이중 Chef Manager를 설치했다. 이 패키지는 data bags, attributes, run-lists, roles, environments, cookbook 관리를 위한 웹 인터페이를 제공한다. 필수 패키지라고 할 수 있겠다.
# chef-server-ctl install opscode-manage
하고 나서
# opscode-manage-ctl reconfigure
마지막으로
# chef-server-ctl reconfigure
하면 된다. 웹 브라우저를 이용해서 접근해 보자. 웹 기반의 관리자 콘솔을 확인할 수 있을 거다. user-create로 만들었던 유저(yundream)으로 로그인 하면 된다.

https://lh5.googleusercontent.com/-DgtlaAK5BEk/VI72M2mXEOI/AAAAAAAAEnI/rp-2Ae9HHXU/s640/chef_01.png

opscode-reporting 패키지도 설치하자. 이 패키지를 설치해야 opscode-manage에 있는 reporting 기능을 이용할 수 있다.
# chef-server-ctl install opscode-reporting
# opscode-reporting-ctl reconfigure
# chef-server-ctl reconfigure

유저 생성

이 문서의 목적은 chef server를 설치하고 knife를 이용해서 chef 데이터를 관리하는 것 까지다. Chef server에 접근해서 데이터 작업을 하려면, chef에 클라이언트로 등록해야 한다. 앞서 설치한 웹 콘설에서 클라이언트를 관리할 수 있다. 클라이언트를 만들어 보자. 웹 콘설에 로그인 한 후 Policy > Clients > Create를 선택한다. 아래와 같은 클라인터 입력창이 뜬다.

https://lh3.googleusercontent.com/-GOgivZd3zMo/VI76QmYGNRI/AAAAAAAAEnc/CD-XCegamDQ/s640/chef_04.png

클라이언트 이름을 입력하면, 인증에 사용할 RSA Private key를 만들어준다. Private key는 서버에 저장되지 않으니, 작업 PC에 파일형태로 저장을 해야 한다.

이제 웹 콘솔에 방금 추가한 yundream-chef 유저가 보일 거다. 예전버전(chef 10)에서는 knife를 이용해서 콘솔에서 클라이언트 작업을 했는데, 웹 만으로 유저 생성/삭제, 퍼미션 관리, Reset key등등을 몽땅 할 수 있다. 간단히 사용할 수 있을 것 같다.

Chef workstation 설정

Chef workstation은 chef 개발자의 작업 PC라고 보면된다. 개발자는 workstation에 접속해서(로컬 PC일 수도 있고, 원격에 있는 작업 환경일 수도 있겠다.) chef를 조작할 수 있다.

knife 설정

Workstation에서의 거의 모든 작업은 knife라는 chef 툴을 이용해서 수행한다. knife로 할 수 있는 일들은 다음과 같다.
  • Cookbook의 생성,삭제,수정
  • Data Bags의 생성, 삭제, 수정
  • Chef Node의 등록, 삭제, 수정
  • Role의 등록, 삭제, 수정
한 마디로 요약하자면 knife를 이용해서 모든 일을 다 할 수 있다

Workstation으로 내 리눅스 박스를 이용하기로 했다. 깔끔한 진행을 위해서 workstation이라는 리눅스 계정을 하나 만들었다.
# adduser workstation
# sudo su - workstation

knife는 chef 자원에 접근해야 하기 때문에, 먼저 chef client를 등록해야 한다. 이전에 등록한 yundream 을 그대로 사용하기로 했다. yundream이라는 계정을 인증하기 위해서는 유저가 해당 조직(organizations)에 속해있는 지를 확인하기 위한 key와 유저 자신을 증명하기 위한 key두 개가 필요하다.

유저 자신을 증명하기 위한 RSA key는 yundream.pem이라는 이름으로 만들어진 걸 사용한다. 다음 joinc에 대한 RSA private key를 만들어야 한다. 웹 콘솔의 Administration > Organizations > Reset Validation Key명령을 이용해서 만들 수 있다. join-validator.pem으로 저장하자.

이제 knife 설정 파일을 만들어야 한다. 예전에는(chef 10 버전때) knife configure를 이용해서 대화식으로 만드는 방법을 사용했는데, 웹 콘솔에서도 설정파일을 다운로드 받을 수 있다. Administration > Organization > Generate Knife Config를 이용해서 설정 파일을 다운로드 하자.

지금까지의 작업으로 3개의 파일이 준비됐을 거다. 확인해 보자.
  1. knife.rb
  2. yundream.pem
  3. join-validator.pem
자 이제 이들 파일을 저장하기 위한 .chef 디렉토리를 만들어서 위 3개의 파일을 모두 옮기자.
# mkdir .chef
# mv knife.rb yundream.pem join-validator.pem .chef

knife.rb 파일 설정을 확인해보자. 나는 current_dir을 변경했다.
current_dir = "#{ENV['HOME']}/.chef"
log_level                :info
log_location             STDOUT
node_name                "yundream"
client_key               "#{current_dir}/yundream.pem"
validation_client_name   "join-validator"
validation_key           "#{current_dir}/join-validator.pem"
chef_server_url          "https://192.168.56.2/organizations/join"
cache_type               'BasicFile'
cache_options( :path => "#{ENV['HOME']}/.chef/checksums" )
cookbook_path            ["#{current_dir}/../cookbooks"]
  • current_dir : 정도로 바꾸는게 편할 거다.
  • client_key : 웹 콘솔에서 다운로드 받은 RSA private key 파일
  • validation_key : chef_server_url 에 대한 접근을 확인하기 위한 RSA private key 파일
  • chef_server_url : API를 호출할 chef server url
knife가 제대로 작동하는지 테스트 해보자.
# knife user list 
yundream