Information Technology 21

[Chef] nginx recipe

앞선 포스팅을 통해 Chef Server와 Workstation, Client 설치 및 테스트를 진행하였다. 이번 Chapter에서는 Chef 이외의 방법으로 패키지 조작이나 설정 파일 변경 등의 작업을 일절 하지 않은 상태에서 Chef만으로 웹 서버를 가동하는 작업을 수행할 예정이다. 진행 과정은 다음과 같다. 웹 서버 nginx 설치 서비스 가동 Chef를 통한 설정파일 배포 nginx Cookbook 신규 생성 [root@ChefWorkstation] $ knife cookbook create nginx ** Creating cookbook nginx in /root/chef-repo/cookbooks ** Creating README for cookbook: nginx ** Creating CHA..

[Chef] td-agent recipe

td-agent는 Fluentd라는 로그 수집 소프트웨어의 배포 패키지이다. 1. td-agent recipe 다운로드 td-agent recipe는 git clone을 통해 다운로드가 가능하다. git clone을 통한 recipe 다운로드 [root@ChefWorkstation] $ pwd /root/chef-repo/cookbooks [root@ChefWorkstation] $ git clone https://github.com/treasure-data/chef-td-agent.git Cloning into 'chef-td-agent'... remote: Counting objects: 467, done. remote: Total 467 (delta 0), reused 0 (delta 0), pac..

[Chef] File system mount / unmount

이번 포스팅에서는 Chef를 통해 파일시스템 mount / unmount 과정을 수행한다. mount/unmount 과정은 다음과 같다. 파티션 생성 및 파일시스템 mount 파일시스템 unmount 및 파티션 삭제 1. 파티션 생성 및 파일 시스템 mount 파티션 생성 및 파일시스템 mount 과정은 다음과 같다. 파티션 생성 ext4 파일시스템 포맷 mount 디렉터리 생성 파일 시스템 mount 부팅 시 자동 마운트 등록 mount Cookbook 신규 생성 파티션 생성과 이후 과정을 분리하여 cookbook 생성 [root@ChefWorkstation] $ knife cookbook create mount ** Creating cookbook mount in /root/chef-repo/cook..

[Chef] Berkshelf를 이용한 Cookbook 의존성 관리

많은 의존성이 걸린 Cookbook을 수동으로 설치하고 확인하기는 매우 힘들다. 다운로드 Cookbook의 의존성을 모두 확인해 직접 설치해도 새로 설치한 Cookbook의 의존성을 다시 해결해야 한다. knife cookbook site install 명령을 이용하여 모든 의존성 Cookbook을 로컬에 설치할 수 있지만, 디렉터리와 Git 저장소가 의존성 Cookbook으로 어지럽혀진다. Berkshelf는 모든 의존성을 재귀적으로 다운로드하고 관리하는데, 루비 Gem의 Bundler와 유사한 역할을 한다. 이는 Chef 저장소를 의존성 Cookbook으로 어지럽히지 않고, 모든 Cookbook을 별도의 위치에 저장한다. 사용자가 Berkshelf 의존성 파일(Berksfile)만 저장소에 Commi..

[Chef] 기타 Resource 및 Recipe

1. Cron Cron은 crontab을 사용하기 위한 Resource이다. Cron을 사용하여 정기 패치 처리의 상태를 정의해 두면 Chef가 crontab을 원하는 설정 상태로 조정한다. cron "name_of_cron_entry" do hour 8 weekday 6 mailto admin@bizmerce.com action :create end 2. Deploy Deply는 git 등의 SCM(Supply Chain Management)에서 배포하는 Resource이다. 앞서 소개한 Git은 Deploy에 포함된 Resource 중 하나이다. 3. File File은 노드 상의 파일을 직접 다루기 위해 사용된다. content 옵션을 사용하여 임의의 문자열을 파일 내에 추가할 수 있다. file ..

[Chef] Opscode Community Cookbook

Chef recipe를 직접 작성할 수도 있지만 주요 소프트웨어 cookbook은 서드파티 라이브러리로 많이 제공되기도 한다. 옵스코드 커뮤니티(https://supermarket.chef.io/cookbooks-directory)에는 이러한 서드파티 Chef cookbook이 많이 존재한다. Knife 명령어를 사용하면 공개되어 있는 cookbook을 간단하게 임포트할 수 있다. CentOS의 yum 리포지터리를 설정해본다. 옵스코드 커뮤니티 cookbook은 knife 명령어로 다운로드할 수 있다. 이때 명령어를 실행할 경우, 자신의 Chef 리포지터리가 git으로 관리되고 있고 작업 디렉터리가 Clean 상태(즉, Commit하지 않은 변경이 없는 상태)여야 한다. Git commit [root@C..

[Chef] Role

Chef Server에서 Node Object에 정의한 run_list에는 실행할 recipe가 열거되어 있지만, 노드 수가 많아지면 관리가 힘들어진다. 예를 들어, 같은 recipe를 적용하는 5개의 노드가 있을 때 새로운 recipe를 추가한다는 가정을 한다. 이런 경우에는 recipe를 다섯 번이나 생성하는 것은 번거롭다. 이는 Role을 통해 run_list나 Attribute를 노드의 역할별로 그루핑을 수행하면 간단히 해결된다. 1. Role Role 생성 예제를 위해 테스트 Role을 생성한다. 테스트 Role에서는 sample2, loging_users recipe를 수행한다. test role 생성 [root@ChefWorkstation] $ export EDITOR=vi [root@Che..

[Chef] Data Bag

Data Bag은 cookbook 단위가 아닌 리포지터리 전체를 커버하는 데이터이다. Data bag의 데이터는 모든 Cookbook에서 전역변수처럼 사용할 수 있다. 인프라스트럭쳐 전체에서 사용되는 데이터를 저장하기 위해서 사용하며, json 형태로 구성된다. Data Bag을 사용하여 노드에 두 명의 사용자를 정의하는 테스트를 진행한다. Data Bag 생성 hadong 사용자 데이터 객체 생성 hdhwang 사용자 데이터 객체 생성 [root@ChefWorkstation] $ knife data bag create users Created data_bag[users] [root@ChefWorkstation] $ knife data bag list users [root@ChefWorkstation] ..

[Chef] Attribute

Attribute는 recipe에서 사용하는 변수이다. 4.3장에서 노드의 플랫폼을 확인하는 나 node[:platform] 등으로 Attribute 값을 확인할 수 있었다. cookbook 내 디렉터리의 attributes 디렉터리에 default.rb라는 이름으로 파일을 만들어 다음과 같이 정의하면, 템플릿이나 recipe에서 node["apache"["dir"]이라고 기술하여 그 값을 얻을 수 있다. default["apache"]["dir"] = "/etc/apache2" default["apache"]["apache"]["listen_ports" = ["80", "443"] Attribute는 다음의 몇 가지 방법으로 정의할 수 있다. 초기 값을 미리 cookbook 내에 정의해 둔다. Role..

[Chef] Definition

recipe를 작성하다 보면 자신이 Resource를 정의해서 사용하고 싶을 때가 있다. Resource를 정의하는 여러 방법이 존재하지만, 이 중 가장 간단한 방법이 Definition이라는 구조를 사용하는 것이다. 예전 포스팅에서 수행한 여러 개의 패키지를 한 번에 설치하는 recipe를 dev 리소스로 생성하는 예제를 수행한다. dev 리소스 생성 [root@ChefWorkstation] $ vi ~/chef-repo/cookbooks/sample2/definitions/dev.rb define :dev do %w{zsh gcc make readline-devel}.each do |pkg| package pkg do action :install end end end :wq recipe 수정 기존 내..