Seongsiks

Being A DevOpser. Powered by
Obtvse, highlight.js, theme toc Creative Commons License
Seongsiks Twitter Github Email
DevOps Ruby On Rails Chef Projects Misc Movies & Drama ME

Chef - DevOps 의 꽃

Chef란 무엇일까요?

Chef 는 설정 자동화 툴(Server Configuration Management)입니다. 서버에 설정을 해주고, 어플리케이션을 설치을 도와주는 툴입니다. 별것 아니라고 생각할 수 도 있겠습니다만, Cloud라는 새로운 환경에서 어떤 힘을 발휘할지.. 그 잠재성이 무서운 툴입니다.
예를 들면 서버 100대에 nginx를 설치를 해야하다고 할때 시간이 얼마나 걸리 것 같으세요? 한대당 20분? 나중엔 조금 더 빨라져서 10분. 그럼 1000분 정도 걸리겠네요. 16시간? 근데 이 서버들이 정말 완벽하게 다 똑같을까요? 100번중에 실수 한번 안하고 다 똑같이 설정하기란 그렇게 쉬운 일이 아닙니다.
Chef는 하나의 서버를 셋팅하는데 42초가 걸립니다. 사용자가 타이핑하는건, 명령어 한줄… 그리고 이 작업들은 병렬로 진행할 수 있습니다. 익숙해 진다면 100대 설정하는데 1시간이면 충분합니다.

Chef로 할 수 있는 것들.

Chef는 타겟 노드 서버에 어플리케이션을 설치하고 설정값을 조정할 수 있고, 서비스를 실행시키고, 크론에 배치를 등록시키고, 어플리케이션을 배포하고, 클라우드를 제어하는 등, 우리가 서버에 ssh로 접속해서 할 수 있는 모든 작업을 할 수 있습니다.

서버가 100대가 있습니다. 자바의 보안 취약점이 발견됐다네요.
언제 다 업데이트 하지? 한숨밖에 안나옵니다...ㅠ.ㅠ

큰 회사의 경우 위와같은 일은 비일비재합니다. 여러분들의 회사는 어떻게 하고 계시나요? 만약에 chef-client가 대상 서버에 설치되어 있다면.. 위 작업은.. chef workstation에서 다음 명령어를 치면 끝입니다^^

$ knife node run_list add [node1] 'recipe[java:latest]'
$ knife node run_list add [node2] 'recipe[java:latest]'
.
.
$ knife ssh "role:webserver" "sudo chef-client"

뭐가 뭔지 모르시겠다고요?

$ knife node run_list add [node1] 'recipe[java:latest]'

이 명령을 node1이라고 하는 서버의 실행 리스트에 자바를 최신버전으로 업데이트 하는 법이 적혀 있는 레시피를 추가 한겁니다. 이런식으로 모든 대상서버에 이 레시피을 주고

$ knife ssh "role:webserver" "sudo chef-client"

현재 역할이 웹서버로 되어 있는 모든 서버들에게 방금 준 레시피를 실행 시키라는 명령입니다.

그럼 혹시 사내 모든 서버 mysql서버의 mysql버전을 알고 싶습니다. 어떻게 하나요?? chef가 설정되어 있다면..이렇게 칩니다.

$ knife ssh  "role:mysql-server" "mysql -V" -x devops -P seongsiks 

이렇게 치면 다음과 같이 나옵니다.

mydb02  [Fri, 22 Oct 2012 14:18:37 +0000] mysql  Ver 14.12 Distrib 5.0.95, for redhat-linux-gnu (i686) using readline 5.1
mydb03  [Fri, 22 Oct 2012 14:18:37 +0000] mysql  Ver 14.12 Distrib 5.0.95, for redhat-linux-gnu (i686) using readline 5.1
mydb04  [Fri, 22 Oct 2012 14:18:37 +0000] mysql  Ver 14.12 Distrib 5.0.95, for redhat-linux-gnu (i686) using readline 5.1

Cookbook, Recipe, Knife, Role?

Chef's Concepts

Chef를 사용하다 보면 여러가지 컨셉들이 사용되고 있는데요 이런 용어들을 먼저 익숙해지는게 중요한데요, 이번 포스트에서는 간단한 설명만 하고 자세한 설명은 다른 포스트에서 이어서 하도록 하겠습니다.

Cookbook

서버를 요리하는 방법이 적혀 있는 Recipe들을 모아둔 요리책, Cookbook은 recipe외에도 몇가지 요소들로 구성됩니다.

Recipe

요리법. 구체적으로 요리를 하는 법이 적혀있는 비급

Knife

chef의 CLI. 사용자는 이 툴을 이용해 직접 요리를 하게 됩니다.

Role

요리제목. 여러개의 Cookbook에서 여러 Recipe들을 모아 Role을 정의하고 이를 Node에 할당하게 됩니다. Apache-Tomcat-Webserver라는 Role를 만든다고 하면, java cookbook의 java recipe, tomcat cookbook에서 tomcat recipe를 묶어서 하나의 Role를 만들면 됩니다. 그 다음 특정 노드에게 “너는 Apache-Tomcat-Webserver역할을 해줘”라고 부탁하면 java가 설치되고, tomcat이 설치되면서 Apache-Tomcat-Webserver가 되어버립니다.

Chef로 nginx 설치하고 서비스 스타트하기

다음 동영상은 Chef를 이용해서 ucloud에 있는 서버에 nginx을 설치하고 서비스를 시작하는 과정을 캡쳐한것입니다.

comments powered by Disqus
Back to Chef