chef - cra16/overcast GitHub Wiki

chef๋Š” infrastructure๋ฅผ ์ž๋™ํ™” ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋‹ค. ์ „์ฒด ์‹œ์Šคํ…œ ํ˜•์ƒ์„ ์ฝ”๋“œํ™” ํ•˜๊ณ , ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•จ์œผ๋กœ์จ ์†์‰ฝ๊ฒŒ ์‹œ์Šคํ…œ์„ ์šด์˜, ์œ ์ง€, ํ™•์žฅ, ๋ณต์ œํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

chef๊ฐ€ ํ•˜๋Š” ์ผ๋“ค

chef๋Š” ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค๋ฅผ __provisioning__ํ•˜๊ณ , __์„ค์ •์„ ๊ด€๋ฆฌ__ํ•˜๊ณ  ์ด ๊ฒƒ๋“ค์„ __ํ†ตํ•ฉ__ํ•˜๋Š” ์ผ์„ ํ•œ๋‹ค.

Provisioning

Chef๋Š” RESTfule API ํ˜น์€ knife์˜ CLI๋ฅผ ์ด์šฉํ•ด์„œ, ์‹œ์Šคํ…œ์„ ํ”„๋กœ๋น„์ €๋‹ํ•  ์ˆ˜ ์žˆ๋‹ค. Baremetal ํ˜ธ์ŠคํŠธ์˜ ๊ฒฝ์šฐ Chef๋Š” ๋ฆฌ๋ˆ…์Šค์˜ kickstart๋‚˜ solaris์˜ jumpstart ํ˜น์€ AIX์˜ NIM๊ณผ ๊ฐ™์€ ์ผ์„ ํ•œ๋‹ค. ๊ฐ€์ƒํ™” ํ™˜๊ฒฝ์˜ ๊ฒฝ์šฐ chef๋Š” libvirt์™€ XEN, KVM, VMware API๋ฅผ ์ด์šฉํ•ด์„œ ํ”„๋กœ๋น„์ €๋‹ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํด๋ผ์šฐ๋“œ์˜ ๊ฒฝ์šฐ chef๋Š” AWS๋‚˜ vCloud์˜ cloud API๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ”„๋กœ๋น„์ €๋‹ ํ•œ๋‹ค. ๋˜ํ•œ Java์˜ jclouds๋‚˜ ruby์˜ fog๋“ฑ์˜ ํด๋ผ์šฐ๋“œ ์†Œํ”„ํŠธ์›จ์–ด์™€๋„ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์„ค์ • ๊ด€๋ฆฌ

chef๋Š” ์„ค์ • ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. Role๊ณผ recipes์—๋Š” ์„œ๋ฒ„๊ฐ€ ์–ด๋–ป๊ฒŒ ์„ค์ •๋ผ์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์„ค์ • ์ •๋ณด์™€ ์„ค์ • ์ •๋ณด์˜ ์ˆ˜ํ–‰์„ ์œ„ํ•œ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์˜ˆ์ปจ๋ฐ mysql, apache, hadoop์„ ์œ„ํ•œ ์„ค์ •์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹จ์ง€ ์„ค์ •๋งŒ์„ ๊ด€๋ฆฌํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ํŒจํ‚ค์ง€๋ฅผ ๊ฒ€์‚ฌํ•ด์„œ ์„ค์น˜ํ•˜๊ณ , ์‹คํ–‰ํ•˜๊ณ , ์ค‘๋‹จํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์‹œ์Šคํ…œ ํ†ตํ•ฉ

Chef์˜ ์ตœ์ข… ๋ชฉ์ ์€ ์ธํ”„๋ผ๋ฅผ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ณ  ์ด๋ฅผ ํ†ตํ•ฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. Chef์˜ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ์  ์ค‘์— ํ•˜๋‚˜๋Š” ์„ค์ • ๋กœ์ง์œผ๋กœ ๋ถ€ํ„ฐ ์„ค์ • ๋ฐ์ดํ„ฐ๊ฐ€ ๋ถ„๋ฆฌ๋ผ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค. ์„ค์ • ๋ฐ์ดํ„ฐ๋Š” NoSQL ํ˜•ํƒœ๋กœ ๋ฐ”๋กœ ๋™์ ์œผ๋กœ ์ƒ‰์ธ๋˜์–ด์„œ ์ €์žฅ๋˜๋ฉฐ, search API๋ฅผ ์ด์šฉํ•ด์„œ ์ธํ”„๋ผ ์ •๋ณด๋ฅผ ์ฆ‰์‹œ ํ™•์ธํ•ด์„œ ์„ค์ •๋กœ์ง์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋ฅธ ๋ง๋กœ Chef recipes๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹œ์Šคํ…œ๊ณผ ์„œ๋ฒ„๋“ค์„ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์›น์„œ๋ฒ„๋Š” search api๋ฅผ ์ด์šฉํ•ด์„œ database์™€ memcache ์„œ๋ฒ„๋“ค์„ ์ฐพ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ž๋™์œผ๋กœ ์›น ์„œ๋ฒ„ ์„ค์ •์— ๋ฐ˜์˜ ์ด๋“ค์„ ์„œ๋กœ ๋ฌถ์„ ์ˆ˜ ์žˆ๋‹ค.

chef ๊ตฌ์กฐ

chef๋Š” server & client ๋ชจ๋ธ์„ ๋”ฐ๋ฅด๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋กœ chef server, workstations, node๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

  1. Chef Server:

Chef Server๋Š” ์ธํ”„๋ผ (์„ค์ •)์ •๋ณด ์ฝ”๋“œ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ Chef ์ฝ”๋“œ ์ €์žฅ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋ชจ๋“  chef ์ฝ”๋“œ๋Š” chef server์— ์ง‘์ค‘ํ•ด์„œ ๊ด€๋ฆฌํ•œ๋‹ค. chef server๋Š” REST API๋ฅผ ์ด์šฉํ•ด์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ WebUI๋ฅผ ์ด์šฉํ•ด์„œ ์ธํ”„๋ผ์ŠคํŠธ๋Ÿญ์ณ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ๋Š” couchdb๋กœ ๊ด€๋ฆฌ๋ฅผ ํ•˜๋ฉฐ, solr์„ ์ด์šฉํ•ด์„œ ๊ฒ€์ƒ‰ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

  1. Node:

์ธํ”„๋ผ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋‹จ์œ„ ์‹œ์Šคํ…œ์œผ๋กœ chef client๊ฐ€ ์„ค์น˜๋œ๋‹ค. Bearmetal ํ˜น์€ VM ํ™˜๊ฒฝ์ผ ์ˆ˜ ์žˆ๋‹ค. ๋…ธ๋“œ๋Š” chef-client ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•ด์„œ chef server๋กœ ๋ถ€ํ„ฐ run list๋ฅผ ๊ฐ€์ ธ์™€์„œ ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๊ณ  ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•œ๋‹ค. ๋…ธ๋“œ๋Š” ํด๋ผ์ด์–ธํŠธ๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค.

  1. Workstation :

Chef server๋Š” (์ž๋™ํ™”๋ฅผ ์œ„ํ•œ)๋ฐ์ดํ„ฐ์™€ ๋กœ์ง์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ์™€ ๋กœ์ง์€ knife๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐœ๋ฐœ์„ ํ•˜๋Š”๋ฐ, knife๊ฐ€ ์„ค์น˜๋œ ์„œ๋ฒ„๋ฅผ workstation์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ฆ‰ chef ๊ฐœ๋ฐœ ๋…ธ๋“œ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. chef ๊ฐœ๋ฐœ์ž๋Š” workstation์— ์„ค์น˜๋œ knife๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ์™€ ์ฝ”๋“œ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์ด ์ •๋ณด๋ฅผ chef server์— upload ํ•œ๋‹ค.

Chef ๊ตฌ์„ฑ์š”์†Œ๋“ค

Nodes, Run List

๋…ธ๋“œ๋Š” chef client๊ฐ€ ์„ค์น˜๋˜๋Š” ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ๋‹ค. ๋…ธ๋“œ ์ž๋™ํ™”๋Š” ๋ฐ์ดํ„ฐ์ธ attributes์™€ ๋กœ์ง์„ ๋‹ด๊ณ  ์žˆ๋Š” run list์— ์˜ํ•ด์„œ ์ด๋ฃจ์–ด์ง„๋‹ค. Attributes๋Š” ๋…ธ๋“œ์˜ ์†์„ฑ ๊ฐ’๋“ค์ด ์ €์žฅ๋œ๋‹ค. ๋…ธ๋“œ ๋ณ€์ˆ˜๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ดํ•ด๊ฐ€ ์‰ฝ๋‹ค.

Run list๋Š” ์ž๋™ํ™”๋ฅผ ์œ„ํ•œ ๋กœ์ง์„ ๋‹ด๊ณ  ์žˆ๋Š” ์ฝ”๋“œ ์กฐ๊ฐ์ด๋‹ค. ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ run list๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ, run list๋Š” ์ฝ”๋“œ์™€ attributes๋ฅผ ์ด์šฉํ•ด์„œ ์ž๋™ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ฝ”๋“œ์™€ ๋ณ€์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์กฐ๊ฐ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ชฉ๋ก์ด run list์˜ ์ •์ฒด๋‹ค..

Roles

Chef๋Š” ๋Œ€๋Ÿ‰์˜ ๋…ธ๋“œ๋ฅผ ์ž๋™ํ™”ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ๋‹ค. ์ด๋“ค ๋…ธ๋“œ๋“ค์€ ๋™์ผํ•œ ์†์„ฑ์„ ๊ฐ€์ง„ ๊ทธ๋ฃน์ด๋ฃจ ์ด๋ฃจ์–ด์งˆ ๊ฒƒ์ด๋‹ค. ์˜ˆ์ปจ๋ฐ, ์›น ์„œ๋น„์Šค ๋…ธ๋“œ๋“ค์ด๋ผ๋ฉด apache, dbms, php๋ฅผ ํฌํ•จํ•ด์„œ ๋™์ผํ•œ ์†์„ฑ์„ ๊ฐ€์งˆ ๊ฒƒ์ด๋‹ค.

Role๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ™์€ ํŠน์„ฑ์„ ๊ฐ€์ง€๋Š” node๋“ค์„ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. Role๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ run list๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ, ๊ฐ™์€ role์„ ๊ณต์œ ํ•˜๋Š” node๋“ค์€ ๋ชจ๋‘ ๋™์ผํ•œ ์„ค์ •๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋œ๋‹ค.

Cookbooks

Cookbooks๋Š” recipe, resource definition, attribute, library, cookbook file ๊ทธ๋ฆฌ๊ณ  template ํŒŒ์ผ, ๊ธฐํƒ€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์˜ ๋ชจ์Œ์ด๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ Cookbook๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‹จ์œ„๋กœ ๊ฐœ๋ฐœํ•œ๋‹ค. ์ฆ‰ mysql cookbook, apache cookbook, DHCP cookbook ํ˜•์‹์œผ๋กœ ๊ฐœ๋ฐœํ•œ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ chef ์ฝ”๋“œ์˜ ๊ฐœ๋ฐœ์€ cookbook์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

Recipes

Recipe๋Š” cookbook์˜ ๊ตฌ์„ฑ์š”์†Œ๋กœ ์„ค์ • ๋กœ์ง์„ ๋‹ด๊ณ  ์žˆ๋Š” ์ฝ”๋“œ๋‹ค. recipe๋Š” ruby ์ฝ”๋“œ๋กœ ๋งŒ๋“ค์–ด์ ธ ์žˆ์œผ๋ฉฐ, ruby ์ฝ”๋“œ์™€ attribute, resource ๋“ฑ์„ ์ด์šฉํ•ด์„œ ๋งŒ๋“ ๋‹ค.

Resources

๋ฆฌ์†Œ์Šค๋Š” ์ž๋™ํ™”๋ฅผ ์œ„ํ•ด์„œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜•ํƒœ๋กœ ๊ฐœ๋ฐœํ•ด ๋‘” chef ๊ตฌ์„ฑ์š”์†Œ๋‹ค. Chef๋Š” user(์œ ์ €๊ด€๋ฆฌ), group, directory, file, cron, service ๋“ฑ ์‹œ์Šคํ…œ ์ž๋™ํ™”์— ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค์„ resource ํ˜•ํƒœ๋กœ ์ œ๊ณตํ•œ๋‹ค.

๋ฆฌ์†Œ์Šค๋Š” ๋ฉ€ํ‹ฐ ํ”Œ๋žซํผ์„ ์ง€ํ–ฅํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด package๋ฆฌ์†Œ์Šค๋ฅผ ์ด์šฉํ•˜๋ฉด ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, apt, yum, BSD ports๋“ฑ์˜ ํ”Œ๋ ›ํผ์— ๋งž๋Š” ํŒจํ‚ค์ง• ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•œ๋‹ค.

Data Bags

Data bags๋Š” chef server์— ์ €์žฅ๋˜๋Š” key - value ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋‹ค. data bags์˜ ๋ฐ์ดํ„ฐ๋Š” ๋ชจ๋“  cookbook์—์„œ ์ „์—ญ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ธํ”„๋ผ์ŠคํŠธ๋Ÿญ์ณ ์ „์ฒด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ