SlideShare a Scribd company logo
What is Chef?
Infrastructure management framework
번역 : 박상욱 polo149278@hotmail.com
1
Information
• Opscode의 Chef가 어떤 것인지 중급자
이상을 대상으로 설명한다
http://www.opscode.com/chef/
• Author Yukihiko Sawanobori

HiganWorks LLC(Japan)

2
Index
1. Introduction
2. Inventory
3. Convergence

4. Resource Correction
5. Configration Management

(Automaticaly/Configration first)

3
1. Introduction

4
Q. Chef는 서버의
자동 설정 툴이죠?

5
A. 아닙니다.
환경의 메타데이터를 관리하
고, 노드의 역할을 조정하는
OPS의 프레임워크다.
※일반적인 자동 빌드 툴로 생각해도 된다.
6
Q. DevOps라고 자주 말하고
있는데,
Developer와 Operater가
사이 좋게 만든 것인가?
7
A. 정확히 말하면,
OPS의 분노가 집약된
툴이라고 생각한다.
※DevOps의 본질은 특정 툴과 관계가 없다.
※Ohai와 Chef::Providers의 소스에서는 특히 그런 인상
을 받는다.
8
Chef의 인식 정오표 1
✕ 레시피로 화려하게 서버를 자동 설정

◯ 플랫폼의 구분과 리소스 확인 결과에 따른
조정을 실시
✕ ChefServer는 그다지 필요한지 않다.
◯ 인벤토리야말로 ChefServer의 전부다.

9
Chef의 인식 정오표 2
✕ Cookbook에 미들웨어의 서버별 고유 정보도 사용한다.
◯ Role/Node의 Override Attribute나 ChefServer로의 쿼리

를 사용해 Cookbook은 범용적으로 작성해야 한다.
✕ 서버 설정을 변경하면 별도로 만들어져 있는 시스템
구성 관리 대장을 갱신한다.
◯ 서버에 직접 로그인하는 것을 포함하여 ChefServer 상
의 구성 관리만으로 끝내는 것이 이상적이다.

10
2. Inbentory

11
먼저 인벤토리 수집에서부터
• Chef-Client(Chef-solo)가 가동하기 위해
서는 실행된 플랫폼의 판별이 무엇보다
중요하다.
• Chef의 멀티 플랫폼성을 지원하기 위해

서는 고도의 인벤토리 수집력이 필요!

12
그래서 OHAI다.
• Ohai(https://github.com/opscode/ohai)
• quot: Ohai detects data about your
operating system.
• 참고자료: Chef의 심장, Ohai의 속성(이하 생
략)
http://qiita.com/items/5ce72101f8dee906ccb4
• OS/분배를 시작하여 동작 환경을 판별
13
OHAI 예제 소스,플랫폼의 판별하는 소스
# platform [ and platform_version ? ] should be lower case to avoid dealing with RedHat/Redhat/redhat matching
if File.exists?("/etc/oracle-‐release")
contents = File.read("/etc/oracle-‐release").chomp
platform "oracle"
platform_version get_redhatish_version(contents)
elsif File.exists?("/etc/enterprise-‐release")
contents = File.read("/etc/enterprise-‐release").chomp
platform "oracle"
platform_version get_redhatish_version(contents)
elsif File.exists?("/etc/debian_version")
# Ubuntu and Debian both have /etc/debian_version
# Ubuntu should always have a working lsb, debian does not by default
if lsb[:id] =~ /Ubuntu/i
platform "ubuntu"
platform_version lsb[:release]
else
if File.exists?("/usr/bin/raspi-‐config")
platform "raspbian"
else
platform "debian"
end
platform_version File.read("/etc/debian_version").chomp
end
elsif File.exists?("/etc/redhat-‐release")
contents = File.read("/etc/redhat-‐release").chomp
platform get_redhatish_platform(contents)
platform_version get_redhatish_version(contents)
elsif File.exists?("/etc/system-‐release")
contents = File.read("/etc/system-‐release").chomp
platform get_redhatish_platform(contents)
platform_version get_redhatish_version(contents)
elsif File.exists?('/etc/gentoo-‐release')
platform "gentoo"

플랫폼 판별을 위해
자세하게 조사

14
AWS(EC2) 상에 있는지도 확인한다!
def has_ec2_mac?
network[:interfaces].values.each do |iface|
unless iface[:arp].nil?
if iface[:arp].value?("fe:ff:ff:ff:ff:ff")
Ohai::Log.debug("has_ec2_mac? == true")
return true
end
end
end
Ohai::Log.debug("has_ec2_mac? == false")
false
end
def looks_like_ec2?
# Try non-‐blocking connect so we don't "block" if
# the Xen environment is *not* EC2
hint?('ec2') || has_ec2_mac? && can_metadata_connect?
(EC2_METADATA_ADDR,80)
end

역시 자세하게 조사

if looks_like_ec2?
Ohai::Log.debug("looks_like_ec2? == true")

15
플랫폼은 판별하면
• 패키지 관리 시스템을 알 수 있다.
• 서비스 관리 방법을 알 수 있다.
• 환경 특유의 관리 방법을 파악할 수 있다.
• Ex) ec2라면 IP가 아닌 public hostname을
접속 주소로 사용하는 등…

16
Cookbook DSL 예제
package ‘nginx’ do
action :install
end
예를 들어, 이것만으로도

• Redhat 계열이라면 yum/rpm을 사용
• Debian 계열이라면 apt/deb를 사용
• Solaris 계열이라면 pkgin/pkg을 사용
Chef::Runner이 표준 패키지 시스템에서
nginx를 설치한 상태로 노드를 조정한다.
17
Inventory 중요

• Chef-Clinet/Chef-solo의 동작에 중요
• Chef Server에 집약된 Inventory는
SearchAPI에 의해 자동 환경 구축에 정
말 유용

18
3. Convergence

19
✕ Build / Setup
◯ Convergence

20
Convergence 란
• Chef에서는 서버 설정 변경을
Convergence(조정)하다고 부르고 있다.

• (사상으로) 스크립트를 실행하여 서버를
설정하는 것이 아닌, Client의 실행에 따

라 서버의 상태를 레시피에 쓰여진 내용
처럼 서버를 조정하는 것을 표현하고 있
기 때문이다.
21
어떤 방법일까
• 서버 상태를 받아와 레시피에 쓰여진 내용
과 비교

• 레시피와 틀리다면 「맞춘다」, 이 작업을 반
복하여 설정을 “조정”한다.
(※Cookbook은 멱등성에서 설명한다.)
• 다음의 Resouce Corection에서도 설명한다.

22
4. Resouce Correcton

23
레시피 적용에서 중요한
Resouce/state라는 개념

24
서버 요소들은 모두 RESOURCE로 정의
• 종류와 요소 = 리소스
• 예 : 패키지

• 설치 상태는? / 버전은?
• 예 : 서비스
• 가동중? / 자동 가동?
• 파일
• 경로는? / 소유자는? / 내용은?
25
Curennt Resouce와 New Resouce
1.

Client/Solo는 목적의 리
소스를 정의=New
Resorce

2.

현재 리소스를 불러옴
=Current Resorce

3.

Current Resorce의 요소
를 변경

※ 플랫폼별 변경 방법은 다
름

[New Resorce]
File (
:path => “/etc/hoge”,
:owner => “root”,
:mode => 0644,
:content => “piyo”)
[Current Resorce]
File (
:path => “/etc/hoge”,
:owner => “root”,
:mode => 0600,
:content => “hoge”)

26

Converge!
Current Resouce 불러오기 예제
패키지 관리자=PackMan의 경우

패키지 상태을 불러온다.
Chef::Log.debug("#{@new_resource} checking pacman for #{@new_resource.package_name}")
status = popen4("pacman -‐Qi #{@new_resource.package_name}") do |pid, stdin, stdout, stderr|
stdout.each do |line| line.force_encoding(Encoding::UTF_8) if line.respond_to?(:force_encoding)
case line
when /^Version(s?)*: (.+)$/
Chef::Log.debug("#{@new_resource} current version is #{$2}")
@current_resource.version($2)
end

명령어를 입력하여 패스…

27
New Resource 적용 예제
패키지를 설치 상태로 변경
def install_package(name, version)
run_command_with_systems_locale(
:command => "pacman --sync --noconfirm --noprogressbar#{expand_options(@new_resource.options)} #{name}"
)
end

Cron 등도 도움이 되는 검출 Source
if @cron_exists
unless cron_different?
Chef::Log.debug("Skipping existing cron entry '#{@new_resource.name}'")
return
end
read_crontab.each_line do |line|
case line.chomp
when "# Chef Name: #{@new_resource.name}"
cron_found = true

28
RESOURCE와 멱등성
• 자세한 Resouce Correction
• CookBook 레시피= New Resource

• Current Resouce를 New Resource와 같은 S
tatus로 조정
• = > Client/Solo는 몇 번이고 실행해도 같은
결과, 같은 상태가 되도록 하고, 항상 실행
되도록 해두는 것이 중요
29
5. Configration Management
(Automaticaly/Configration First)

30
구성 관리를 자동화한다.

31
구성 관리의 자동화
Chef-Server

Chef-Clinet

Node

• Inventory 등록/갱신(Ohai 수집)
• 플랫폼 정보
• H/W 정보

Node

• N/W 정보
Attribute Override
Role 부여・Runlist 부여

32
Env / Role의 할당 예제
Server의 인벤토리를 기반으로 설정 변경

Chef-Server

Node

Node

Recipe[nagios-server]
・Role[Nagis-Client]등록 Node의 IP를 불
러와 감시한다.
・감시 대상 Node의 Attribute에서 감시 항
목을 설정

Recipe[nagios-client]
・Role[Nagis-Server]등록 Node의 IP에서
요청을 허가
・감시 대상 리소스의 플러그인을 설치

Role[Nagios-Server]

Role[Nagios-Client]
33
환경의 구성 관리를 통해
서버 구성을 자동으로 조정
(Configuration Management
First)

34
새로운 Node에 Role을 할당=조정하여 환경에 적용
Chef-Server

Node

New
Node

Role에 추가=Server
에 인벤토리된다.

Node
. Nagios의 관계 설정
이 조정된다.

Recipe[nagios-server]

. Role[Nagios-Server]은 ・Role[Nagis-Client] 등록 Node의 IP를 불
Recipe[nagios-client]
・Role[Nagis-Server]등록 Node의 IP에서Client의 Node 증감에 따러와 감시한다.
라 자동으로 감시 대상의
요청을 허가
・감시 대상 Node의 Attribute에서 감시 항
추가 삭제가 이루어진다.

・감시 대상 리소스의 플러그인을 설치

목을 설정

Role[Nagios-Server]

Role[Nagios-Client]
35
구성 관리=환경 구축

• Chef 상의 요소를 변경=구성 관리 정

보를 갱신한다면
• Client 들이 적당히 조정되어진다.
• 구성 관리하는 모든 것이 연결된다.

36
마치며
• Chef를 그냥 한 번에 빌드하는 툴로
생각해도 틀린 것은 아니지만 부족한

부분이 있다.
• Solo로 갱신해 나가는 것도 좋으나
이것 또한 부족한 부분이 있다.
이것이 Active Directory가 아니냐고 생각하시는 분들이 있는데, 대
략 맞습니다.
37

More Related Content

What's hot

Dockerfile과 Bash
Dockerfile과 BashDockerfile과 Bash
Dockerfile과 Bash
pyrasis
 
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
KTH, 케이티하이텔
 
1.intro to k8s
1.intro to k8s1.intro to k8s
1.intro to k8s
Hongmin Park
 
Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법
pyrasis
 
Ch7,8. Configmaps, Secrets and API
Ch7,8. Configmaps, Secrets and APICh7,8. Configmaps, Secrets and API
Ch7,8. Configmaps, Secrets and API
Hongmin Park
 
AWS + Docker in Vingle
AWS + Docker in VingleAWS + Docker in Vingle
AWS + Docker in Vingle
Derrick Hwechul Cho
 
XECon2015 :: [3-4] 조정현 - Laravel with cloud
XECon2015 :: [3-4] 조정현 - Laravel with cloudXECon2015 :: [3-4] 조정현 - Laravel with cloud
XECon2015 :: [3-4] 조정현 - Laravel with cloud
XpressEngine
 
도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집
Daegwon Kim
 
Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기
Dronix
 
03.Ansible 소개
03.Ansible 소개03.Ansible 소개
03.Ansible 소개
Opennaru, inc.
 
형태소 분석기를 적용한 elasticsearch 운영
형태소 분석기를 적용한 elasticsearch 운영형태소 분석기를 적용한 elasticsearch 운영
형태소 분석기를 적용한 elasticsearch 운영
창훈 정
 
Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구
ByungJoon Lee
 
도커 없이 컨테이너 만들기 2편
도커 없이 컨테이너 만들기 2편도커 없이 컨테이너 만들기 2편
도커 없이 컨테이너 만들기 2편
Sam Kim
 
Nginx basic configurations
Nginx basic configurationsNginx basic configurations
Nginx basic configurations
John Kim
 
XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3
XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3
XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3
XpressEngine
 
CoreOS를 이용한 Docker 관리툴 소개
CoreOS를 이용한 Docker 관리툴 소개CoreOS를 이용한 Docker 관리툴 소개
CoreOS를 이용한 Docker 관리툴 소개
충섭 김
 
Play node conference
Play node conferencePlay node conference
Play node conference
John Kim
 
Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2
XpressEngine
 
Devfair kubernetes 101
Devfair kubernetes 101Devfair kubernetes 101
Devfair kubernetes 101
Daegwon Kim
 
20141229 dklee docker
20141229 dklee docker20141229 dklee docker
20141229 dklee docker
DK Lee
 

What's hot (20)

Dockerfile과 Bash
Dockerfile과 BashDockerfile과 Bash
Dockerfile과 Bash
 
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
 
1.intro to k8s
1.intro to k8s1.intro to k8s
1.intro to k8s
 
Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법
 
Ch7,8. Configmaps, Secrets and API
Ch7,8. Configmaps, Secrets and APICh7,8. Configmaps, Secrets and API
Ch7,8. Configmaps, Secrets and API
 
AWS + Docker in Vingle
AWS + Docker in VingleAWS + Docker in Vingle
AWS + Docker in Vingle
 
XECon2015 :: [3-4] 조정현 - Laravel with cloud
XECon2015 :: [3-4] 조정현 - Laravel with cloudXECon2015 :: [3-4] 조정현 - Laravel with cloud
XECon2015 :: [3-4] 조정현 - Laravel with cloud
 
도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집
 
Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기
 
03.Ansible 소개
03.Ansible 소개03.Ansible 소개
03.Ansible 소개
 
형태소 분석기를 적용한 elasticsearch 운영
형태소 분석기를 적용한 elasticsearch 운영형태소 분석기를 적용한 elasticsearch 운영
형태소 분석기를 적용한 elasticsearch 운영
 
Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구
 
도커 없이 컨테이너 만들기 2편
도커 없이 컨테이너 만들기 2편도커 없이 컨테이너 만들기 2편
도커 없이 컨테이너 만들기 2편
 
Nginx basic configurations
Nginx basic configurationsNginx basic configurations
Nginx basic configurations
 
XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3
XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3
XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3
 
CoreOS를 이용한 Docker 관리툴 소개
CoreOS를 이용한 Docker 관리툴 소개CoreOS를 이용한 Docker 관리툴 소개
CoreOS를 이용한 Docker 관리툴 소개
 
Play node conference
Play node conferencePlay node conference
Play node conference
 
Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2
 
Devfair kubernetes 101
Devfair kubernetes 101Devfair kubernetes 101
Devfair kubernetes 101
 
20141229 dklee docker
20141229 dklee docker20141229 dklee docker
20141229 dklee docker
 

Similar to What is chef - korean

Perl Script Document
Perl Script DocumentPerl Script Document
Perl Script Document
오석 한
 
Introduce php7
Introduce php7Introduce php7
Introduce php7
Jung soo Ahn
 
Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018
 Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018 Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018
Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018
Amazon Web Services Korea
 
Terraform을 이용한 Infrastructure as Code 실전 구성하기
Terraform을 이용한 Infrastructure as Code 실전 구성하기Terraform을 이용한 Infrastructure as Code 실전 구성하기
Terraform을 이용한 Infrastructure as Code 실전 구성하기
JeongHun Byeon
 
Laravel 로 배우는 서버사이드 #1
Laravel 로 배우는 서버사이드 #1Laravel 로 배우는 서버사이드 #1
Laravel 로 배우는 서버사이드 #1
성일 한
 
Laravel 로 배우는 서버사이드 #3
Laravel 로 배우는 서버사이드 #3Laravel 로 배우는 서버사이드 #3
Laravel 로 배우는 서버사이드 #3
성일 한
 
Laravel 로 배우는 서버사이드 #2
Laravel 로 배우는 서버사이드 #2Laravel 로 배우는 서버사이드 #2
Laravel 로 배우는 서버사이드 #2
성일 한
 
셸 스크립트를 이용한 클라우드 시스템 운영
셸 스크립트를 이용한 클라우드 시스템 운영셸 스크립트를 이용한 클라우드 시스템 운영
셸 스크립트를 이용한 클라우드 시스템 운영
Nalee Jang
 
20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging
Jongwon Han
 
파이썬 스터디 15장
파이썬 스터디 15장파이썬 스터디 15장
파이썬 스터디 15장SeongHyun Ahn
 
Spark performance tuning
Spark performance tuningSpark performance tuning
Spark performance tuning
haiteam
 
Eclipse RAP - Single Source
Eclipse RAP - Single SourceEclipse RAP - Single Source
Eclipse RAP - Single Source
cho hyun jong
 
One-day-codelab
One-day-codelabOne-day-codelab
One-day-codelab
WebFrameworks
 
[오픈소스컨설팅]인프라 자동화 도구 Chef
[오픈소스컨설팅]인프라 자동화 도구  Chef[오픈소스컨설팅]인프라 자동화 도구  Chef
[오픈소스컨설팅]인프라 자동화 도구 Chef
Open Source Consulting
 
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발Jinuk Kim
 
chatbot-seminar-1806
chatbot-seminar-1806chatbot-seminar-1806
chatbot-seminar-1806
juneyoungdev
 
도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편
Sam Kim
 
Ryu with OpenFlow 1.3, REST API
Ryu with OpenFlow 1.3, REST APIRyu with OpenFlow 1.3, REST API
Ryu with OpenFlow 1.3, REST API
jieun kim
 
Clojure Chapter.6
Clojure Chapter.6Clojure Chapter.6
Clojure Chapter.6
hyun soomyung
 

Similar to What is chef - korean (20)

Perl Script Document
Perl Script DocumentPerl Script Document
Perl Script Document
 
Introduce php7
Introduce php7Introduce php7
Introduce php7
 
Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018
 Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018 Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018
Terraform을 이용한 Infrastructure as Code 실전 구성하기 :: 변정훈::AWS Summit Seoul 2018
 
Terraform을 이용한 Infrastructure as Code 실전 구성하기
Terraform을 이용한 Infrastructure as Code 실전 구성하기Terraform을 이용한 Infrastructure as Code 실전 구성하기
Terraform을 이용한 Infrastructure as Code 실전 구성하기
 
Laravel 로 배우는 서버사이드 #1
Laravel 로 배우는 서버사이드 #1Laravel 로 배우는 서버사이드 #1
Laravel 로 배우는 서버사이드 #1
 
Laravel 로 배우는 서버사이드 #3
Laravel 로 배우는 서버사이드 #3Laravel 로 배우는 서버사이드 #3
Laravel 로 배우는 서버사이드 #3
 
Laravel 로 배우는 서버사이드 #2
Laravel 로 배우는 서버사이드 #2Laravel 로 배우는 서버사이드 #2
Laravel 로 배우는 서버사이드 #2
 
셸 스크립트를 이용한 클라우드 시스템 운영
셸 스크립트를 이용한 클라우드 시스템 운영셸 스크립트를 이용한 클라우드 시스템 운영
셸 스크립트를 이용한 클라우드 시스템 운영
 
20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging
 
파이썬 스터디 15장
파이썬 스터디 15장파이썬 스터디 15장
파이썬 스터디 15장
 
Spark performance tuning
Spark performance tuningSpark performance tuning
Spark performance tuning
 
Eclipse RAP - Single Source
Eclipse RAP - Single SourceEclipse RAP - Single Source
Eclipse RAP - Single Source
 
One-day-codelab
One-day-codelabOne-day-codelab
One-day-codelab
 
[오픈소스컨설팅]인프라 자동화 도구 Chef
[오픈소스컨설팅]인프라 자동화 도구  Chef[오픈소스컨설팅]인프라 자동화 도구  Chef
[오픈소스컨설팅]인프라 자동화 도구 Chef
 
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
 
chatbot-seminar-1806
chatbot-seminar-1806chatbot-seminar-1806
chatbot-seminar-1806
 
도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편
 
Eclipse RCP 1/2
Eclipse RCP 1/2Eclipse RCP 1/2
Eclipse RCP 1/2
 
Ryu with OpenFlow 1.3, REST API
Ryu with OpenFlow 1.3, REST APIRyu with OpenFlow 1.3, REST API
Ryu with OpenFlow 1.3, REST API
 
Clojure Chapter.6
Clojure Chapter.6Clojure Chapter.6
Clojure Chapter.6
 

What is chef - korean

  • 1. What is Chef? Infrastructure management framework 번역 : 박상욱 polo149278@hotmail.com 1
  • 2. Information • Opscode의 Chef가 어떤 것인지 중급자 이상을 대상으로 설명한다 http://www.opscode.com/chef/ • Author Yukihiko Sawanobori HiganWorks LLC(Japan) 2
  • 3. Index 1. Introduction 2. Inventory 3. Convergence 4. Resource Correction 5. Configration Management (Automaticaly/Configration first) 3
  • 5. Q. Chef는 서버의 자동 설정 툴이죠? 5
  • 6. A. 아닙니다. 환경의 메타데이터를 관리하 고, 노드의 역할을 조정하는 OPS의 프레임워크다. ※일반적인 자동 빌드 툴로 생각해도 된다. 6
  • 7. Q. DevOps라고 자주 말하고 있는데, Developer와 Operater가 사이 좋게 만든 것인가? 7
  • 8. A. 정확히 말하면, OPS의 분노가 집약된 툴이라고 생각한다. ※DevOps의 본질은 특정 툴과 관계가 없다. ※Ohai와 Chef::Providers의 소스에서는 특히 그런 인상 을 받는다. 8
  • 9. Chef의 인식 정오표 1 ✕ 레시피로 화려하게 서버를 자동 설정 ◯ 플랫폼의 구분과 리소스 확인 결과에 따른 조정을 실시 ✕ ChefServer는 그다지 필요한지 않다. ◯ 인벤토리야말로 ChefServer의 전부다. 9
  • 10. Chef의 인식 정오표 2 ✕ Cookbook에 미들웨어의 서버별 고유 정보도 사용한다. ◯ Role/Node의 Override Attribute나 ChefServer로의 쿼리 를 사용해 Cookbook은 범용적으로 작성해야 한다. ✕ 서버 설정을 변경하면 별도로 만들어져 있는 시스템 구성 관리 대장을 갱신한다. ◯ 서버에 직접 로그인하는 것을 포함하여 ChefServer 상 의 구성 관리만으로 끝내는 것이 이상적이다. 10
  • 12. 먼저 인벤토리 수집에서부터 • Chef-Client(Chef-solo)가 가동하기 위해 서는 실행된 플랫폼의 판별이 무엇보다 중요하다. • Chef의 멀티 플랫폼성을 지원하기 위해 서는 고도의 인벤토리 수집력이 필요! 12
  • 13. 그래서 OHAI다. • Ohai(https://github.com/opscode/ohai) • quot: Ohai detects data about your operating system. • 참고자료: Chef의 심장, Ohai의 속성(이하 생 략) http://qiita.com/items/5ce72101f8dee906ccb4 • OS/분배를 시작하여 동작 환경을 판별 13
  • 14. OHAI 예제 소스,플랫폼의 판별하는 소스 # platform [ and platform_version ? ] should be lower case to avoid dealing with RedHat/Redhat/redhat matching if File.exists?("/etc/oracle-‐release") contents = File.read("/etc/oracle-‐release").chomp platform "oracle" platform_version get_redhatish_version(contents) elsif File.exists?("/etc/enterprise-‐release") contents = File.read("/etc/enterprise-‐release").chomp platform "oracle" platform_version get_redhatish_version(contents) elsif File.exists?("/etc/debian_version") # Ubuntu and Debian both have /etc/debian_version # Ubuntu should always have a working lsb, debian does not by default if lsb[:id] =~ /Ubuntu/i platform "ubuntu" platform_version lsb[:release] else if File.exists?("/usr/bin/raspi-‐config") platform "raspbian" else platform "debian" end platform_version File.read("/etc/debian_version").chomp end elsif File.exists?("/etc/redhat-‐release") contents = File.read("/etc/redhat-‐release").chomp platform get_redhatish_platform(contents) platform_version get_redhatish_version(contents) elsif File.exists?("/etc/system-‐release") contents = File.read("/etc/system-‐release").chomp platform get_redhatish_platform(contents) platform_version get_redhatish_version(contents) elsif File.exists?('/etc/gentoo-‐release') platform "gentoo" 플랫폼 판별을 위해 자세하게 조사 14
  • 15. AWS(EC2) 상에 있는지도 확인한다! def has_ec2_mac? network[:interfaces].values.each do |iface| unless iface[:arp].nil? if iface[:arp].value?("fe:ff:ff:ff:ff:ff") Ohai::Log.debug("has_ec2_mac? == true") return true end end end Ohai::Log.debug("has_ec2_mac? == false") false end def looks_like_ec2? # Try non-‐blocking connect so we don't "block" if # the Xen environment is *not* EC2 hint?('ec2') || has_ec2_mac? && can_metadata_connect? (EC2_METADATA_ADDR,80) end 역시 자세하게 조사 if looks_like_ec2? Ohai::Log.debug("looks_like_ec2? == true") 15
  • 16. 플랫폼은 판별하면 • 패키지 관리 시스템을 알 수 있다. • 서비스 관리 방법을 알 수 있다. • 환경 특유의 관리 방법을 파악할 수 있다. • Ex) ec2라면 IP가 아닌 public hostname을 접속 주소로 사용하는 등… 16
  • 17. Cookbook DSL 예제 package ‘nginx’ do action :install end 예를 들어, 이것만으로도 • Redhat 계열이라면 yum/rpm을 사용 • Debian 계열이라면 apt/deb를 사용 • Solaris 계열이라면 pkgin/pkg을 사용 Chef::Runner이 표준 패키지 시스템에서 nginx를 설치한 상태로 노드를 조정한다. 17
  • 18. Inventory 중요 • Chef-Clinet/Chef-solo의 동작에 중요 • Chef Server에 집약된 Inventory는 SearchAPI에 의해 자동 환경 구축에 정 말 유용 18
  • 20. ✕ Build / Setup ◯ Convergence 20
  • 21. Convergence 란 • Chef에서는 서버 설정 변경을 Convergence(조정)하다고 부르고 있다. • (사상으로) 스크립트를 실행하여 서버를 설정하는 것이 아닌, Client의 실행에 따 라 서버의 상태를 레시피에 쓰여진 내용 처럼 서버를 조정하는 것을 표현하고 있 기 때문이다. 21
  • 22. 어떤 방법일까 • 서버 상태를 받아와 레시피에 쓰여진 내용 과 비교 • 레시피와 틀리다면 「맞춘다」, 이 작업을 반 복하여 설정을 “조정”한다. (※Cookbook은 멱등성에서 설명한다.) • 다음의 Resouce Corection에서도 설명한다. 22
  • 25. 서버 요소들은 모두 RESOURCE로 정의 • 종류와 요소 = 리소스 • 예 : 패키지 • 설치 상태는? / 버전은? • 예 : 서비스 • 가동중? / 자동 가동? • 파일 • 경로는? / 소유자는? / 내용은? 25
  • 26. Curennt Resouce와 New Resouce 1. Client/Solo는 목적의 리 소스를 정의=New Resorce 2. 현재 리소스를 불러옴 =Current Resorce 3. Current Resorce의 요소 를 변경 ※ 플랫폼별 변경 방법은 다 름 [New Resorce] File ( :path => “/etc/hoge”, :owner => “root”, :mode => 0644, :content => “piyo”) [Current Resorce] File ( :path => “/etc/hoge”, :owner => “root”, :mode => 0600, :content => “hoge”) 26 Converge!
  • 27. Current Resouce 불러오기 예제 패키지 관리자=PackMan의 경우 패키지 상태을 불러온다. Chef::Log.debug("#{@new_resource} checking pacman for #{@new_resource.package_name}") status = popen4("pacman -‐Qi #{@new_resource.package_name}") do |pid, stdin, stdout, stderr| stdout.each do |line| line.force_encoding(Encoding::UTF_8) if line.respond_to?(:force_encoding) case line when /^Version(s?)*: (.+)$/ Chef::Log.debug("#{@new_resource} current version is #{$2}") @current_resource.version($2) end 명령어를 입력하여 패스… 27
  • 28. New Resource 적용 예제 패키지를 설치 상태로 변경 def install_package(name, version) run_command_with_systems_locale( :command => "pacman --sync --noconfirm --noprogressbar#{expand_options(@new_resource.options)} #{name}" ) end Cron 등도 도움이 되는 검출 Source if @cron_exists unless cron_different? Chef::Log.debug("Skipping existing cron entry '#{@new_resource.name}'") return end read_crontab.each_line do |line| case line.chomp when "# Chef Name: #{@new_resource.name}" cron_found = true 28
  • 29. RESOURCE와 멱등성 • 자세한 Resouce Correction • CookBook 레시피= New Resource • Current Resouce를 New Resource와 같은 S tatus로 조정 • = > Client/Solo는 몇 번이고 실행해도 같은 결과, 같은 상태가 되도록 하고, 항상 실행 되도록 해두는 것이 중요 29
  • 32. 구성 관리의 자동화 Chef-Server Chef-Clinet Node • Inventory 등록/갱신(Ohai 수집) • 플랫폼 정보 • H/W 정보 Node • N/W 정보 Attribute Override Role 부여・Runlist 부여 32
  • 33. Env / Role의 할당 예제 Server의 인벤토리를 기반으로 설정 변경 Chef-Server Node Node Recipe[nagios-server] ・Role[Nagis-Client]등록 Node의 IP를 불 러와 감시한다. ・감시 대상 Node의 Attribute에서 감시 항 목을 설정 Recipe[nagios-client] ・Role[Nagis-Server]등록 Node의 IP에서 요청을 허가 ・감시 대상 리소스의 플러그인을 설치 Role[Nagios-Server] Role[Nagios-Client] 33
  • 34. 환경의 구성 관리를 통해 서버 구성을 자동으로 조정 (Configuration Management First) 34
  • 35. 새로운 Node에 Role을 할당=조정하여 환경에 적용 Chef-Server Node New Node Role에 추가=Server 에 인벤토리된다. Node . Nagios의 관계 설정 이 조정된다. Recipe[nagios-server] . Role[Nagios-Server]은 ・Role[Nagis-Client] 등록 Node의 IP를 불 Recipe[nagios-client] ・Role[Nagis-Server]등록 Node의 IP에서Client의 Node 증감에 따러와 감시한다. 라 자동으로 감시 대상의 요청을 허가 ・감시 대상 Node의 Attribute에서 감시 항 추가 삭제가 이루어진다. ・감시 대상 리소스의 플러그인을 설치 목을 설정 Role[Nagios-Server] Role[Nagios-Client] 35
  • 36. 구성 관리=환경 구축 • Chef 상의 요소를 변경=구성 관리 정 보를 갱신한다면 • Client 들이 적당히 조정되어진다. • 구성 관리하는 모든 것이 연결된다. 36
  • 37. 마치며 • Chef를 그냥 한 번에 빌드하는 툴로 생각해도 틀린 것은 아니지만 부족한 부분이 있다. • Solo로 갱신해 나가는 것도 좋으나 이것 또한 부족한 부분이 있다. 이것이 Active Directory가 아니냐고 생각하시는 분들이 있는데, 대 략 맞습니다. 37