๋ชจ์Šคํฌ๋ฐ”์—์„œ Slurm DevOps ๋“ฑ๋ก์ด ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

TL; DR

์Šฌ๋Ÿผ ๋ฐ๋ธŒ์˜ต์Šค 30์›” 1์ผ๋ถ€ํ„ฐ XNUMX์›” XNUMX์ผ๊นŒ์ง€ ๋ชจ์Šคํฌ๋ฐ”์—์„œ ๊ฐœ์ตœ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์‹œ ํ•œ๋ฒˆ ์‹ค์ œ๋กœ DevOps ๋„๊ตฌ๋ฅผ ๋ถ„์„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
์„ธ๋ถ€ ์‚ฌํ•ญ ๋ฐ ํ”„๋กœ๊ทธ๋žจ์€ ์ปท ์•„๋ž˜์— ์žˆ์Šต๋‹ˆ๋‹ค.
Ivan Kruglov์™€ ํ•จ๊ป˜ ๋ณ„๋„์˜ Slurm SRE๋ฅผ ์ค€๋น„ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— SRE๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐœํ‘œ๋Š” ๋‚˜์ค‘์— ์˜ฌ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.
์ฒซ ๋ฒˆ์งธ Slurm ์ดํ›„ ํ›„์›ํ•ด ์ฃผ์‹  Selectel์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

๋ชจ์Šคํฌ๋ฐ”์—์„œ Slurm DevOps ๋“ฑ๋ก์ด ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ฒ ํ•™, ํšŒ์˜๋ก , ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์„ฑ๊ณต์— ๋Œ€ํ•˜์—ฌ

์ €๋Š” XNUMX์›” ๋ง ๋ชจ์Šคํฌ๋ฐ”์—์„œ ์—ด๋ฆฐ DevOpsConf์— ์ฐธ์„ํ–ˆ์Šต๋‹ˆ๋‹ค.
๋‚ด๊ฐ€ ๋“ค์€ ๋‚ด์šฉ ์š”์•ฝ:
โ€” DevOps๋Š” ๋ชจ๋“  ๊ทœ๋ชจ์˜ ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
โ€” DevOps๋Š” ๋‹ค๋ฅธ ๋ฌธํ™”์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฌธํ™”์ด๋ฉฐ ํšŒ์‚ฌ ๋‚ด๋ถ€์—์„œ ๋‚˜์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค. DevOps ์—”์ง€๋‹ˆ์–ด๋ฅผ ๊ณ ์šฉํ•˜๊ณ  ๊ทธ๊ฐ€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐœ์„ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ๊ฟˆ๊ฟ€ ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.
โ€” DevOps ํ˜์‹ ์— ํ•„์š”ํ•œ ๊ฒƒ ๋ชฉ๋ก์˜ ๋งจ ๋์—๋Š” ๊ธฐ์ˆ , ์ฆ‰ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€๋ฅด์น˜๋Š” ๋ฐ”๋กœ DevOps ๋„๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

DevOps ์ฒ ํ•™๊ณผ ๋ฌธํ™”๋Š” ์ฒด๊ณ„์ ์œผ๋กœ ๊ฐ€๋ฅด์น  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ณผ์ •์— ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์˜ณ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ์‚ฌ๋žŒ์€ ๋ˆ„๊ตฌ๋‚˜ ์ฑ…์—์„œ ์ฝ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด ๊ทธ๋Š” ์ž์‹ ์˜ ์นด๋ฆฌ์Šค๋งˆ์™€ ๊ถŒ์œ„๋กœ ๋ชจ๋“  ์‚ฌ๋žŒ์„ ์„ค๋“ํ•  ๋งค์šฐ ๋ฉ‹์ง„ ์ฝ”์น˜๋ฅผ ์ฐพ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ ์ €๋Š” ํ•ญ์ƒ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ๋ฌธํ™”๋ฅผ ๊ฒŒ๋ฆด๋ผ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” '์•„๋ž˜๋กœ๋ถ€ํ„ฐ์˜ ์šด๋™'์„ ์ง€์ง€ํ•ด ์™”์Šต๋‹ˆ๋‹ค. The Phoenix Project์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. Git์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •๋˜์–ด ํŒ€์›Œํฌ๊ฐ€ ํ˜•์„ฑ๋˜๋ฉด ์ฒœ์ฒœํžˆ ๊ทœ์ •์œผ๋กœ ๋ณด์™„ํ•˜๊ณ  ๊ฐ€์น˜๊ฐ€ ๋‚˜์˜ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋„๊ตฌ์— ๋Œ€ํ•ด์„œ๋งŒ ์ด์•ผ๊ธฐํ•˜๋Š” DevOps Slurm์„ ์ค€๋น„ํ•  ๋•Œ ์ฐธ๊ฐ€์ž๋“ค์˜ ๋ฐ˜์‘์ด ๋‘๋ ค์› ์Šต๋‹ˆ๋‹ค. โ€œํ›Œ๋ฅญํ•œ ๋ง์”€์„ ํ•˜์…จ์Šต๋‹ˆ๋‹ค. ์•ˆํƒ€๊น์ง€๋งŒ ๊ฒฐ์ฝ” ๊ตฌํ˜„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.โ€ ํšŒ์˜๋ก ์ด ๋„ˆ๋ฌด ๋งŽ์•„์„œ ์šฐ๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋žจ ๋ฐ˜๋ณต์„ ์ฆ‰์‹œ ์ค‘๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์„ค๋ฌธ์กฐ์‚ฌ์— ์ฐธ์—ฌํ•œ ๋Œ€๋‹ค์ˆ˜์˜ ์ฐธ๊ฐ€์ž๋Š” ์–ป์€ ์ง€์‹์ด ์‹ค์ œ๋กœ ์ ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ ๊ฐ€๊นŒ์šด ์‹œ์ผ ๋‚ด์— ์ž๊ตญ์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ตฌํ˜„ํ•  ๊ฒƒ์ด๋ผ๊ณ  ๋‹ตํ–ˆ์Šต๋‹ˆ๋‹ค. ๋™์‹œ์— ์šฐ๋ฆฌ๊ฐ€ ์„ค๋ช…ํ–ˆ๋˜ ๋ชจ๋“  ๋‚ด์šฉ์€ Git, Ansible, CI/CD, SRE ๋“ฑ ์œ ์šฉํ•œ ํ•ญ๋ชฉ ๋ชฉ๋ก์— ํฌํ•จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ฒ˜์Œ์— ๊ทธ๋“ค์€ Slurm Kubernetes์— ๋Œ€ํ•ด k3s๋ฅผ 8์ผ ์•ˆ์— ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ๋งํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

SRE ์ฃผ์ œ๋ฅผ ์ฃผ๋„ํ•œ Ivan Kruglov์™€ ๋ณ„๋„์˜ ํ”„๋กœ๊ทธ๋žจ์— ๋™์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๋…ผ์˜ ์ค‘์ด๋ฉฐ ๊ณง ๋ฐœํ‘œํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Slurm DevOps์—์„œ๋Š” ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚ ๊นŒ์š”?

ํ”„๋กœ๊ทธ๋žจ

์ฃผ์ œ #1: Git์„ ์‚ฌ์šฉํ•œ ํŒ€์›Œํฌ

  • ๊ธฐ๋ณธ ๋ช…๋ น git init, commit, add, diff, log, status, pull, push
  • Git ํ๋ฆ„, ๋ถ„๊ธฐ ๋ฐ ํƒœ๊ทธ, ๋ณ‘ํ•ฉ ์ „๋žต
  • ์—ฌ๋Ÿฌ ์›๊ฒฉ ๋‹ด๋‹น์ž์™€ ํ˜‘๋ ฅ
  • GitHub ํ๋ฆ„
  • ํฌํฌ, ์›๊ฒฉ, ํ’€ ์š”์ฒญ
  • ํŒ€๊ณผ ๊ด€๋ จ๋œ Gitflow ๋ฐ ๊ธฐํƒ€ ํ๋ฆ„์— ๋Œ€ํ•œ ์ถฉ๋Œ, ๋ฆด๋ฆฌ์Šค, ๋‹ค์‹œ ํ•œ ๋ฒˆ

์ฃผ์ œ #2: ๊ฐœ๋ฐœ ๊ด€์ ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘์—…

  • Python์œผ๋กœ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์ž‘์„ฑ
  • ํ™˜๊ฒฝ ๋ณ€์ˆ˜
  • ํ†ตํ•ฉ ๋ฐ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ
  • ๊ฐœ๋ฐœ ์‹œ docker-compose ์‚ฌ์šฉ

์ฃผ์ œ #3: CI/CD: ์ž๋™ํ™” ์†Œ๊ฐœ

  • ์ž๋™ํ™” ์†Œ๊ฐœ
  • ๋„๊ตฌ(bash, make, gradle)
  • git-hooks๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค ์ž๋™ํ™”
  • ๊ณต์žฅ ์กฐ๋ฆฝ ๋ผ์ธ ๋ฐ IT ๋ถ„์•ผ์˜ ์‘์šฉ
  • "์ผ๋ฐ˜" ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•์˜ ์˜ˆ
  • CI/CD์šฉ ์ตœ์‹  ์†Œํ”„ํŠธ์›จ์–ด: Drone CI, BitBucket Pipelines, Travis ๋“ฑ

์ฃผ์ œ #4: CI/CD: Gitlab ์ž‘์—…

  • ๊นƒ๋žฉ CI
  • Gitlab Runner, ์œ ํ˜• ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
  • Gitlab CI, ๊ตฌ์„ฑ ๊ธฐ๋Šฅ, ๋ชจ๋ฒ” ์‚ฌ๋ก€
  • Gitlab CI ๋‹จ๊ณ„
  • Gitlab CI ๋ณ€์ˆ˜
  • ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ
  • ์‹คํ–‰ ์ œ์–ด ๋ฐ ์ œํ•œ: ๊ฒฝ์šฐ์—๋งŒ
  • ์•„ํ‹ฐํŒฉํŠธ ์ž‘์—…
  • .gitlab-ci.yml ๋‚ด์˜ ํ…œํ”Œ๋ฆฟ, ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์—์„œ ์ž‘์—…์„ ์žฌ์‚ฌ์šฉ
  • ํฌํ•จ - ์„น์…˜
  • gitlab-ci.yml์˜ ์ค‘์•™ ์ง‘์ค‘์‹ ๊ด€๋ฆฌ(ํŒŒ์ผ XNUMX๊ฐœ ๋ฐ ๋‹ค๋ฅธ ์ €์žฅ์†Œ๋กœ ์ž๋™ ํ‘ธ์‹œ)

์ฃผ์ œ #5: ์ฝ”๋“œํ˜• ์ธํ”„๋ผ

  • IaC: ์ธํ”„๋ผ๋ฅผ ์ฝ”๋“œ๋กœ ์ ‘๊ทผ
  • ์ธํ”„๋ผ ์ œ๊ณต์ž๋กœ์„œ์˜ ํด๋ผ์šฐ๋“œ ์ œ๊ณต์ž
  • ์‹œ์Šคํ…œ ์ดˆ๊ธฐํ™” ๋„๊ตฌ, ์ด๋ฏธ์ง€ ๊ตฌ์ถ•(ํŒจ์ปค)
  • Terraform์„ ์˜ˆ์‹œ๋กœ ์‚ฌ์šฉํ•˜๋Š” IaC
  • ๊ตฌ์„ฑ ์ €์žฅ, ํ˜‘์—…, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž๋™ํ™”
  • Ansible ํ”Œ๋ ˆ์ด๋ถ ์ƒ์„ฑ ์—ฐ์Šต
  • ๋ฉฑ๋“ฑ์„ฑ, ์„ ์–ธ์„ฑ
  • Ansible์„ ์˜ˆ๋กœ ์‚ฌ์šฉํ•˜๋Š” IaC

์ฃผ์ œ #6: ์ธํ”„๋ผ ํ…Œ์ŠคํŠธ

  • Molecule ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ํ…Œ์ŠคํŠธ ๋ฐ ์ง€์†์ ์ธ ํ†ตํ•ฉ
  • ๋ฐฉ๋ž‘์ž ์‚ฌ์šฉ

์ฃผ์ œ #7: Prometheus๋ฅผ ์‚ฌ์šฉํ•œ ์ธํ”„๋ผ ๋ชจ๋‹ˆํ„ฐ๋ง

  • ๋ชจ๋‹ˆํ„ฐ๋ง์ด ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
  • ๋ชจ๋‹ˆํ„ฐ๋ง ์œ ํ˜•
  • ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์˜ ์•Œ๋ฆผ
  • ๊ฑด๊ฐ•ํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๋ˆ„๊ตฌ๋‚˜ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์•Œ๋ฆผ
  • ๊ฑด๊ฐ•๊ฒ€์ง„, ์ฃผ์˜ํ•ด์•ผ ํ•  ์ 
  • ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ์ž๋™ํ™”

์ฃผ์ œ #8: ELK๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๊น…

  • ์ตœ๊ณ ์˜ ๋กœ๊น… ๋ฐฉ๋ฒ•
  • ELK ์Šคํƒ

์ฃผ์ œ #9: ChatOps๋ฅผ ํ†ตํ•œ ์ธํ”„๋ผ ์ž๋™ํ™”

  • DevOps ๋ฐ ChatOps
  • ChatOps: ๊ฐ•์ 
  • Slack ๋ฐ ๋Œ€์•ˆ
  • ChatOps์šฉ ๋ด‡
  • ํœด๋ด‡๊ณผ ๋Œ€์•ˆ
  • ะ‘ะตะทะพะฟะฐัะฝะพัั‚ัŒ
  • ๋ชจ๋ฒ” ์‚ฌ๋ก€์™€ ์ตœ์•… ์‚ฌ๋ก€

์œ„์น˜ : ๋ชจ์Šคํฌ๋ฐ” ์„ธ๋ฐ”์Šคํ† ํด ํ˜ธํ…” ํšŒ์˜์‹ค.

๋‚ ์งœ : 30์›” 1์ผ๋ถ€ํ„ฐ 3์›” XNUMX์ผ๊นŒ์ง€ XNUMX์ผ๊ฐ„ ์—ด์‹ฌํžˆ ์ผํ–ˆ์Šต๋‹ˆ๋‹ค.

๋“ฑ๋ก

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€