27์ 2019์ผ ํ์คํฐ๋ฒ์ ์ผํ์ผ๋ก ์ด๋ฆฐ DevOpsConf XNUMX ์ปจํผ๋ฐ์ค ๋ฉ์ธ ํ์์
ํ๋ ์ ํ ์ด์ ์ดํ ์ฐ๋ฆฌ์ ์ ํธ๋ฆฌํฐ(์ด์ ์๋ dapp์ผ๋ก ์๋ ค์ง)๋ ๋ค์๊ณผ ๊ฐ์ ์ญ์ฌ์ ์ธ ์ด์ ํ์ ๋๋ฌํ์ต๋๋ค. GitHub์ ๋ณ 1000๊ฐ โ ์ ์ ๋์ด๋๋ ์ฌ์ฉ์ ์ปค๋ฎค๋ํฐ๊ฐ ๋ง์ DevOps ์์ง๋์ด์ ์ถ์ ๋ ์ฝ๊ฒ ๋ง๋ค์ด์ฃผ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๊ทธ๋์, ์ฐ๋ฆฌ๋ ์ ์
Kubernetes์ ์ฝ๋ ์ ๊ณต
๊ฐ์ฐ์ ๋ ์ด์ werf์ ๊ดํ ๊ฒ์ด ์๋๋ผ Kubernetes์ CI/CD์ ๊ดํ ๊ฒ์
๋๋ค. ์ด๋ ์ฐ๋ฆฌ ์ํํธ์จ์ด๊ฐ Docker ์ปจํ
์ด๋์ ํจํค์ง๋์ด ์์์ ์๋ฏธํฉ๋๋ค. (๋ด๊ฐ ์ด ์๊ธฐ๋ฅผ ํ์๋๋ฐ
Kubernetes์์ ์ ๋ฌ์ ์ด๋ค ๋ชจ์ต์ธ๊ฐ์?
- ๋น๋๋ฅผ ์ํ ์ฝ๋์ ์ง์นจ์ด ํฌํจ๋ Git ์ ์ฅ์๊ฐ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ Docker ์ด๋ฏธ์ง์ ๋ด์ฅ๋์ด Docker ๋ ์ง์คํธ๋ฆฌ์ ๊ฒ์๋ฉ๋๋ค.
- ๋์ผํ ์ ์ฅ์์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๊ณ ์คํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ง์นจ๋ ํฌํจ๋์ด ์์ต๋๋ค. ๋ฐฐํฌ ๋จ๊ณ์์ ์ด๋ฌํ ์ง์นจ์ Kubernetes๋ก ์ ์ก๋๋ฉฐ, Kubernetes๋ ๋ ์ง์คํธ๋ฆฌ์์ ์ํ๋ ์ด๋ฏธ์ง๋ฅผ ๋ฐ์ ์คํํฉ๋๋ค.
- ๋ํ ์ผ๋ฐ์ ์ผ๋ก ํ ์คํธ๊ฐ ์์ต๋๋ค. ์ด๋ค ์ค ์ผ๋ถ๋ ์ด๋ฏธ์ง๋ฅผ ๊ฒ์ํ ๋ ์ํํ ์ ์์ต๋๋ค. ๋ํ (๋์ผํ ์ง์นจ์ ๋ฐ๋ผ) ์ ํ๋ฆฌ์ผ์ด์ ๋ณต์ฌ๋ณธ์ ๋ณ๋์ K8s ๋ค์์คํ์ด์ค ๋๋ ๋ณ๋์ ํด๋ฌ์คํฐ์ ๋ฐฐํฌํ๊ณ ๊ทธ๊ณณ์์ ํ ์คํธ๋ฅผ ์คํํ ์๋ ์์ต๋๋ค.
- ๋ง์ง๋ง์ผ๋ก Git(๋๋ ๋ฒํผ ํด๋ฆญ)์์ ์ด๋ฒคํธ๋ฅผ ์์ ํ๊ณ ์ง์ ๋ ๋ชจ๋ ๋จ๊ณ(๋น๋, ๊ฒ์, ๋ฐฐํฌ, ํ ์คํธ)๋ฅผ ํธ์ถํ๋ CI ์์คํ ์ด ํ์ํฉ๋๋ค.
์ฌ๊ธฐ์๋ ๋ช ๊ฐ์ง ์ค์ํ ์ฐธ๊ณ ์ฌํญ์ด ์์ต๋๋ค.
- ์ฐ๋ฆฌ๋ ๋ถ๋ณ์ ์ธํ๋ผ๋ฅผ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ (๋ถ๋ณ ์ธํ๋ผ), ๋ชจ๋ ๋จ๊ณ(์คํ
์ด์ง, ํ๋ก๋์
๋ฑ)์์ ์ฌ์ฉ๋๋ ์ ํ๋ฆฌ์ผ์ด์
์ด๋ฏธ์ง, ํ๋์ฏค์ ์์ด์ผ ํด. ๋๋ ์ด๊ฒ์ ๋ํด ๋ ์์ธํ ๊ทธ๋ฆฌ๊ณ ์๋ฅผ ๋ค์ด ์ด์ผ๊ธฐํ์ต๋๋ค.
์ฌ๊ธฐ์ . - ์ฐ๋ฆฌ๋ ์ฝ๋ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ์ธํ๋ผ๋ฅผ ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ (IAC), ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋, ์กฐ๋ฆฝ ๋ฐ ์คํ ์ง์นจ์ ๋ค์๊ณผ ๊ฐ์์ผ ํฉ๋๋ค. ์ ํํ ํ๋์ ์ ์ฅ์์. ์ด์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ค์์ ์ฐธ์กฐํ์ธ์.
๊ฐ์ ๋ณด๊ณ ์ . - ๋ฐฐ์ก ์ฒด์ธ (๋ฐฐ๋ฌ) ์ฐ๋ฆฌ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ๋ด ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด ์กฐ๋ฆฝ๋๊ณ , ํ ์คํธ๋๊ณ , ์ถ์๋์์ต๋๋ค. (์ถ์ ๋จ๊ณ) ๊ทธ๊ฒ ๋ค์ ๋๋ค. ๋ฐฐ์ก์ด ์ด๋ฃจ์ด์ก์ต๋๋ค. ํ์ง๋ง ์ค์ ๋ก ์ฌ์ฉ์๋ ๋น์ ์ด ์ถ์ํ ๊ฒ์ ์ป์ต๋๋ค. ์๋ ๊ทธ๋ฐ ๋ค์ ๋น์ ์ด ๊ทธ๊ฒ์ ํ๋ก๋์ ์ ์ ๋ฌํ์ ๋ ๊ทธ๊ฐ ๊ฑฐ๊ธฐ์ ๊ฐ ์ ์์๊ณ ์ด ํ๋ก๋์ ์ด ์๋ํ์ ๋. ๊ทธ๋์ ๋ฐฐ์ก ์ฒด์ธ์ด ๋๋๋ค๊ณ ์๊ฐํด์ ์ด์ ๋จ๊ณ์์๋ง (์ด์)๋๋ ๋ ์ ํํ๊ฒ๋ ์ฝ๋๊ฐ ํ๋ก๋์ ์์ ์ ๊ฑฐ๋ ์๊ฐ์๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค(์ ์ฝ๋๋ก ๊ต์ฒด).
์์ Kubernetes ์ ๋ฌ ์ฒด๊ณ๋ก ๋์๊ฐ ๋ณด๊ฒ ์ต๋๋ค. ์ด๋ ์ฐ๋ฆฌ๋ฟ๋ง ์๋๋ผ ๋ง ๊ทธ๋๋ก ์ด ๋ฌธ์ ๋ฅผ ๋ค๋ฃจ๋ ๋ชจ๋ ์ฌ๋์ด ๋ฐ๋ช
ํ ๊ฒ์
๋๋ค. ์ค์ ๋ก ์ด ํจํด์ ์ด์ GitOps๋ผ๊ณ ๋ถ๋ฆฝ๋๋ค. (์ฉ์ด์ ๊ทธ ๋ค์ ์จ์ ์์ด๋์ด์ ๋ํด ์์ธํ ์์๋ณผ ์ ์์ต๋๋ค.
๋น๋ ๋จ๊ณ
๋ชจ๋๊ฐ Dockerfile์ ์์ฑํ๊ณ ์คํํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ์๋ 2019๋
์๋ Docker ์ด๋ฏธ์ง ๊ตฌ์ถ์ ๋ํด ์ด์ผ๊ธฐํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค. docker build
?.. ์ ๊ฐ ์ฃผ๋ชฉํ๊ณ ์ถ์ ๋์์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ด๋ฏธ์ง ๋ฌด๊ฒ ์ค์ํ๋ฏ๋ก ์ฌ์ฉํ์ธ์
๋ค๋จ์์ ์์ ์ ์ค์ ๋ก ํ์ํ ์ ํ๋ฆฌ์ผ์ด์ ๋ง ์ด๋ฏธ์ง์ ๋จ๊ฒจ ๋๋ ๊ฒ์ ๋๋ค. - ๋ ์ด์ด ์ ์ฒด์ธ์ ๊ฒฐํฉํ์ฌ ์ต์ํํด์ผ ํฉ๋๋ค.
RUN
-์๋ฏธ์ ๋ฐ๋ผ ๋ช ๋ นํฉ๋๋ค. - ๊ทธ๋ฌ๋ ์ด๋ ๋ฌธ์ ๋ฅผ ์ถ๊ฐํฉ๋๋ค. ๋๋ฒ๊น , ์ด์ ๋ธ๋ฆฌ๊ฐ ์ถฉ๋ํ๋ฉด ๋ฌธ์ ๋ฅผ ์ผ์ผํจ ์ฒด์ธ์์ ์ฌ๋ฐ๋ฅธ ๋ช ๋ น์ ์ฐพ์์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ์กฐ๋ฆฝ ์๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ํ๊ฒ ์ ์ฉํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๊ณ ์ถ๊ธฐ ๋๋ฌธ์ ์ค์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ํ ๋๋ง๋ค ์ธ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ข ์์ฑ์ ๋ค์ ๋น๋ํ๊ณ ์ถ์ง๋ ์์ต๋๋ค.
- ์ข ์ข ํ๋์ Git ์ ์ฅ์์์ ํ์ํ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ๋ง์ ์ด๋ฏธ์ง์ด๋ Dockerfile ์ธํธ(๋๋ ํ๋์ ํ์ผ์ ๋ช ๋ช ๋ ๋จ๊ณ)์ ์์ฐจ์ ์ด์ ๋ธ๋ฆฌ๊ฐ ํฌํจ๋ Bash ์คํฌ๋ฆฝํธ๋ก ํด๊ฒฐ๋ ์ ์์ต๋๋ค.
์ด๋ ๋ชจ๋๊ฐ ์ง๋ฉดํ๋ ๋น์ฐ์ ์ผ๊ฐ์ ๋ถ๊ณผํ์ต๋๋ค. ๊ทธ๋ฌ๋ ํนํ ๋ค์๊ณผ ๊ฐ์ ๋ค๋ฅธ ๋ฌธ์ ๋ ์์ต๋๋ค.
- ์ข ์ข ์กฐ๋ฆฝ ๋จ๊ณ์์ ๋ฌด์ธ๊ฐ๊ฐ ํ์ํฉ๋๋ค. ์ฐ (์๋ฅผ ๋ค์ด, ํ์ฌ ๋๋ ํฐ๋ฆฌ์ apt์ ๊ฐ์ ๋ช ๋ น ๊ฒฐ๊ณผ๋ฅผ ์บ์ํฉ๋๋ค.)
- ์ฐ๋ฆฌ๋ ์ํ๋ค ์ฑ ์๊ฐ์๋ ์์ ์ฐ๋ ๋์ .
- ์ฐ๋ฆฌ๋ ์ํ๋ค Docker ์์ด ๋น๋ (์ปจํ ์ด๋๋ฅผ ์คํํ ์ ์๋ Kubernetes ํด๋ฌ์คํฐ๊ฐ ์ด๋ฏธ ์๋๋ฐ ์ด๋ฅผ ์ํด ๋ชจ๋ ๊ฒ์ ๊ตฌ์ฑํด์ผ ํ๋ ์ถ๊ฐ ๊ฐ์ ๋จธ์ ์ด ํ์ํ ์ด์ ๋ ๋ฌด์์ ๋๊น?)
- ๋ณ๋ ฌ ์กฐ๋ฆฝ, ์ด๋ ๋ค์ํ ๋ฐฉ์์ผ๋ก ์ดํด๋ ์ ์์ต๋๋ค. Dockerfile์ ๋ค๋ฅธ ๋ช ๋ น(๋ค๋จ๊ณ๊ฐ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ), ๋์ผํ ์ ์ฅ์์ ์ฌ๋ฌ ์ปค๋ฐ, ์ฌ๋ฌ Dockerfile.
- ๋ถ์ฐ ์ด์ ๋ธ๋ฆฌ: ์ฐ๋ฆฌ๋ "์ผ์์ ์ธ" ํญ๋ชฉ์ ํฌ๋์ ์์งํ๋ ค๊ณ ํฉ๋๋ค. ์บ์๊ฐ ์ฌ๋ผ์ง๋ฏ๋ก ๋ณ๋๋ก ์ด๋๊ฐ์ ์ ์ฅํด์ผ ํฉ๋๋ค.
- ๋๋์ด ์๋ง์ ์ ์ ์ ์ด๋ฆ์ ๋ถ์๋ค ์๋ ๋ง๋ฒ: ์ ์ฅ์์ ๊ฐ์ ๋ช ๊ฐ์ง ๋ช ๋ น์ ์ ๋ ฅํ๊ณ ์ฌ๋ฐ๋ฅด๊ฒ ์ํํ๋ ๋ฐฉ๋ฒ๊ณผ ์์ ์ ๋ํ ์ดํด๋ฅผ ๋ฐํ์ผ๋ก ์กฐ๋ฆฝ๋ ๊ธฐ์ฑ ์ด๋ฏธ์ง๋ฅผ ์ป๋ ๊ฒ์ด ์ด์์ ์ ๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ์ธ์ ์ผ๋ก ๋ชจ๋ ๋์์ค๊ฐ ์ด๋ฐ ์์ผ๋ก ์์ธก๋ ์ ์๋์ง ํ์ ํ์ง ๋ชปํฉ๋๋ค.
ํ๋ก์ ํธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
-
๋ชจ๋น/๋น๋ํท โ ์ด๋ฌํ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ๋ ธ๋ ฅํ๋ Docker Inc(ํ์ฌ Docker ๋ฒ์ ์ ์ด๋ฏธ ํตํฉ๋์ด ์์)์ ๋น๋์ ๋๋ค. -
์นด๋์ฝ โ Docker ์์ด ๋น๋ํ ์ ์๊ฒ ํด์ฃผ๋ Google์ ๋น๋์ ๋๋ค. -
Buildpacks.io โ ์๋ ๋ง๋ฒ์ ๋ง๋ค๋ ค๋ CNCF์ ์๋, ํนํ ๋ ์ด์ด์ ๋ํ ๋ฆฌ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ ํฅ๋ฏธ๋ก์ด ์๋ฃจ์ ์ ๋๋ค. - ๊ทธ๋ฆฌ๊ณ ๋ค์๊ณผ ๊ฐ์ ๋ค๋ฅธ ์ ํธ๋ฆฌํฐ๋ค๋ ์์ต๋๋ค.
Buildah ,์ ํ ๋๊ตฌ/img ...
...GitHub์ ์ผ๋ง๋ ๋ง์ ๋ณ์ด ์๋์ง ์ดํด๋ณด์ธ์. ์ฆ, ํํธ์ผ๋ก๋ docker build
์กด์ฌํ๊ณ ๋ฌด์ธ๊ฐ๋ฅผ ํ ์ ์์ง๋ง ์ค์ ๋ก๋ ๋ฌธ์ ๊ฐ ์์ ํ ํด๊ฒฐ๋์ง ์์์ต๋๋ค - ์ด์ ๋ํ ์ฆ๊ฑฐ๋ ๊ฐ๊ฐ ๋ฌธ์ ์ ์ผ๋ถ๋ฅผ ํด๊ฒฐํ๋ ๋์ฒด ์์ง๊ฐ์ ๋ณํ ๊ฐ๋ฐ์
๋๋ค.
Werf์์ ์กฐ๋ฆฝ
๊ทธ๋์ ์ฐ๋ฆฌ๋
ํ๋์์ผ๋ก ํ์๋ ๋ฌธ์ ๋ ์ด๋ฏธ ๊ตฌํ๋์์ผ๋ฉฐ, ๋ณ๋ ฌ ๋น๋๋ ๋์ผํ ํธ์คํธ ๋ด์์ ์ํ๋์์ผ๋ฉฐ, ๋
ธ๋์์ผ๋ก ํ์๋ ๋ฌธ์ ๋ ์ฌ๋ฆ ๋ง๊น์ง ์๋ฃ๋ ์์ ์
๋๋ค.
๋ฑ๋ก์์ ๊ฒ์๋๋ ๋จ๊ณ(๊ฒ์)
์ฐ๋ฆฌ๋ ์ ํ๋ฅผ ๊ฑธ์์ต๋๋ค docker push
... - ์ด๋ฏธ์ง๋ฅผ ๋ ์ง์คํธ๋ฆฌ์ ์
๋ก๋ํ ๋ ์ด๋ ค์ด ์ ์ ๋ฌด์์
๋๊น? ๊ทธ๋ฌ๋ฉด "์ด๋ฏธ์ง์ ์ด๋ค ํ๊ทธ๋ฅผ ๋ถ์ฌ์ผ ํ ๊น์?"๋ผ๋ ์ง๋ฌธ์ด ์๊น๋๋ค. ๊ทธ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง๊ณ ์๋ ์ด์ ๋ก ๋ฐ์ํฉ๋๋ค. ๊นํ๋ก์ฐ (๋๋ ๋ค๋ฅธ Git ์ ๋ต) ๋ฐ Kubernetes์ ๊ด๋ จ์ด ์์ผ๋ฉฐ ์
๊ณ์์๋ Kubernetes์์ ์ผ์ด๋๋ ์ผ์ด Git์์ ์ผ์ด๋๋ ์ผ์ ๋ฐ๋ฅด๋๋ก ๋
ธ๋ ฅํ๊ณ ์์ต๋๋ค. ๊ฒฐ๊ตญ Git์ ์ฐ๋ฆฌ์ ์ ์ผํ ์ ๋ณด ์์ค์
๋๋ค.
๊ทธ๊ฒ ๋ญ๊ฐ ๊ทธ๋ ๊ฒ ํ๋ ๋ฐ? ์ฌํ์ฑ ๋ณด์ฅ: ๋ณธ์ง์ ์ผ๋ก ๋ถ๋ณ์ธ Git์ ์ปค๋ฐ์์ (๋ถ๋ณ), ๋์ผํ๊ฒ ์ ์ง๋์ด์ผ ํ๋ Docker ์ด๋ฏธ์ง๋ก ๋ณํ๋ฉ๋๋ค.
์ฐ๋ฆฌ์๊ฒ๋ ์ค์ํด์ ์์ฐ์ง๋ฅผ ๊ฒฐ์ ํ๋ค, Kubernetes์์ ์คํ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ด๋ค ์ปค๋ฐ์์ ๋น๋๋์๋์ง ์ดํดํ๊ณ ์ถ๊ธฐ ๋๋ฌธ์ ๋๋ค(๊ทธ๋ฐ ๋ค์ ๋น๊ต ๋ฐ โโ์ ์ฌํ ์์ ์ ์ํํ ์ ์์ต๋๋ค).
ํ๊ทธ ์ง์ ์ ๋ต
์ฒซ ๋ฒ์งธ๋ ๊ฐ๋จํด์ ์์ ํ๊ทธ. ํ๊ทธ๊ฐ ์ง์ ๋ ์ด๋ฏธ์ง๊ฐ ์๋ ๋ ์ง์คํธ๋ฆฌ๊ฐ ์์ต๋๋ค. 1.0
. Kubernetes์๋ ์ด ์ด๋ฏธ์ง๊ฐ ์
๋ก๋๋๋ ๋จ๊ณ์ ํ๋ก๋์
์ด ์์ต๋๋ค. Git์์๋ ์ปค๋ฐ์ ํ๊ณ ์ด๋ ์์ ์๋ ํ๊ทธ๋ฅผ ์ง์ ํฉ๋๋ค. 2.0
. ์ ์ฅ์์ ์ง์นจ์ ๋ฐ๋ผ ์ด๋ฅผ ์์งํ๊ณ ํ๊ทธ์ ํจ๊ป ๋ ์ง์คํธ๋ฆฌ์ ๋ฐฐ์นํฉ๋๋ค. 2.0
. ์ฐ๋ฆฌ๋ ์ด๋ฅผ ๋ฌด๋์ ์ถ์ํ๊ณ ๋ชจ๋ ๊ฒ์ด ์ ์์ด๋ฉด ํ๋ก๋์
์ ์ ์ฉํฉ๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์ ๋ฌธ์ ์ ์ ๋จผ์ ํ๊ทธ๋ฅผ ๋ฃ์ ๋ค์ ํ
์คํธํ๊ณ ์ถ์ํ๋ค๋ ๊ฒ์
๋๋ค. ์? ์ฒซ์งธ, ์ด๋ ๋จ์ํ ๋น๋
ผ๋ฆฌ์ ์
๋๋ค. ์์ง ํ
์คํธ๋ ํ์ง ์์ ์ํํธ์จ์ด ๋ฒ์ ์ ์ถ์ํ๊ณ ์์ต๋๋ค(ํ์ธํ๋ ค๋ฉด ํ๊ทธ๋ฅผ ๋ฃ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ฌ๋ฆฌ ํ ์๋ ์์ต๋๋ค). ๋์งธ, ์ด ๊ฒฝ๋ก๋ Gitflow์ ํธํ๋์ง ์์ต๋๋ค.
๋ ๋ฒ์งธ ์ต์
- git ์ปค๋ฐ + ํ๊ทธ. ๋ง์คํฐ ๋ธ๋์น์๋ ํ๊ทธ๊ฐ ์์ต๋๋ค 1.0
; ๋ ์ง์คํธ๋ฆฌ์ - ํ๋ก๋์
์ ๋ฐฐํฌ๋ ์ด๋ฏธ์ง์
๋๋ค. ๋ํ Kubernetes ํด๋ฌ์คํฐ์๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฐ ์คํ
์ด์ง ์ค๊ณฝ์ด ์์ต๋๋ค. ๋ค์์ผ๋ก Gitflow: ๊ฐ๋ฐ์ ์ํ ๋ฉ์ธ ๋ธ๋์น(develop
) ์๋ก์ด ๊ธฐ๋ฅ์ ๋ง๋ค์ด ์๋ณ์๋ฅผ ์ฌ์ฉํ ์ปค๋ฐ์ ์์ฑํฉ๋๋ค. #c1
. ์ฐ๋ฆฌ๋ ์ด ์๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ์์งํ๊ณ ๋ ์ง์คํธ๋ฆฌ์ ๊ฒ์ํฉ๋๋ค(#c1
). ๋์ผํ ์๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ก ์ถ์ํฉ๋๋ค. ์ปค๋ฐ์๋ ๋์ผํ ์์
์ ์ํํฉ๋๋ค. #c2
ะธ #c3
.
๊ธฐ๋ฅ์ด ์ถฉ๋ถํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ ๋ ์ฐ๋ฆฌ๋ ๋ชจ๋ ๊ฒ์ ์์ ํํ๊ธฐ ์์ํฉ๋๋ค. Git์์ ๋ธ๋์น ๋ง๋ค๊ธฐ release_1.1
(๋ฒ ์ด์ค์ #c3
์ผ๋ก develop
). ์ด ๋ฆด๋ฆฌ์ค๋ฅผ ์์งํ ํ์๊ฐ ์์ต๋๋ค. ์๋ํ๋ฉด... ์ด๋ ์ด์ ๋จ๊ณ์์ ์ํ๋์์ต๋๋ค. ๋ฐ๋ผ์ ๊ฐ๋จํ ์คํ
์ด์ง์ผ๋ก ๋กค์์ํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ฒ๊ทธ๋ฅผ ์์ ํฉ๋๋ค #c4
๋ง์ฐฌ๊ฐ์ง๋ก ์คํ
์ด์ง์ผ๋ก ๋กค์์ํฉ๋๋ค. ๋์์, ๊ฐ๋ฐ์ด ์งํ ์ค์
๋๋ค. develop
, ์ฃผ๊ธฐ์ ์ผ๋ก ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์ ธ์ต๋๋ค. release_1.1
. ์ด๋ ์์ ์์ ์ฐ๋ฆฌ๋ ์ปดํ์ผ๋์ด ์คํ
์ด์ง์ ์
๋ก๋๋ ์ปค๋ฐ์ ์ป๊ฒ ๋๋๋ฐ, ์ด๋ ๋ง์กฑ์ค๋ฝ์ต๋๋ค(#c25
).
๊ทธ๋ฐ ๋ค์ ๋ฆด๋ฆฌ์ค ๋ธ๋์น๋ฅผ (๋นจ๋ฆฌ ๊ฐ๊ธฐ๋ก) ๋ณํฉํฉ๋๋ค(release_1.1
) ๋ง์คํฐ์์. ์ด ์ปค๋ฐ์ ์ ๋ฒ์ ์ด ํฌํจ๋ ํ๊ทธ๋ฅผ ์ถ๊ฐํฉ๋๋ค(1.1
). ํ์ง๋ง ์ด ์ด๋ฏธ์ง๋ ์ด๋ฏธ ๋ ์ง์คํธ๋ฆฌ์ ์์ง๋์ด ์์ผ๋ฏ๋ก ๋ค์ ์์งํ์ง ์์ผ๋ ค๋ฉด ๊ธฐ์กด ์ด๋ฏธ์ง์ ๋ ๋ฒ์งธ ํ๊ทธ๋ฅผ ์ถ๊ฐํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค(์ด์ ๋ ์ง์คํธ๋ฆฌ์ ํ๊ทธ๊ฐ ์์ต๋๋ค). #c25
ะธ 1.1
). ๊ทธ๋ฐ ๋ค์ ์ด๋ฅผ ํ๋ก๋์
์ ์ถ์ํฉ๋๋ค.
์คํ
์ด์ง์๋ ์ด๋ฏธ์ง๊ฐ ํ๋๋ง ์
๋ก๋๋๋ค๋ ๋จ์ ์ด ์์ต๋๋ค(#c25
), ํ๋ก๋์
ํ๊ฒฝ์์๋ ์ข ๋ค๋ฆ
๋๋ค(1.1
), ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ์ด๊ฒ์ด "๋ฌผ๋ฆฌ์ ์ผ๋ก" ๋ ์ง์คํธ๋ฆฌ์ ๋์ผํ ์ด๋ฏธ์ง๋ผ๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
์ง์ง ๋จ์ ์ ๋ณํฉ ์ปค๋ฐ์ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋นจ๋ฆฌ ๊ฐ์์ผ ํ๋ค๋ ๊ฒ์
๋๋ค.
๋ ๋์๊ฐ ํธ๋ฆญ์ ์ํํ ์ ์์ต๋๋ค... ๊ฐ๋จํ Dockerfile์ ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
FROM ruby:2.3 as assets
RUN mkdir -p /app
WORKDIR /app
COPY . ./
RUN gem install bundler && bundle install
RUN bundle exec rake assets:precompile
CMD bundle exec puma -C config/puma.rb
FROM nginx:alpine
COPY --from=assets /app/public /usr/share/nginx/www/public
๋ค์ ์์น์ ๋ฐ๋ผ ํ์ผ์ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
- ์ฌ์ฉ๋ ์ด๋ฏธ์ง ์๋ณ์์ SHA256(
ruby:2.3
ะธnginx:alpine
)๋ ๋ด์ฉ์ ์ฒดํฌ์ฌ์ ๋๋ค. - ๋ชจ๋ ํ (
RUN
,CMD
๋ฑ๋ฑ.); - ์ถ๊ฐ๋ ํ์ผ์ SHA256์ ๋๋ค.
... ๊ทธ๋ฐ ํ์ผ์์ ์ฒดํฌ์ฌ(๋ค์ SHA256)์ ๊ฐ์ ธ์ต๋๋ค. ์ด๊ฒ ์๋ช Docker ์ด๋ฏธ์ง์ ๋ด์ฉ์ ์ ์ํ๋ ๋ชจ๋ ๊ฒ.
๋ค์ ๋ค์ด์ด๊ทธ๋จ์ผ๋ก ๋์๊ฐ์ ์ปค๋ฐ ๋์ ์ด๋ฌํ ์๋ช
์ ์ฌ์ฉํฉ๋๋ค., ์ฆ. ์๋ช
์ผ๋ก ์ด๋ฏธ์ง์ ํ๊ทธ๋ฅผ ์ง์ ํ์ธ์.
์ด์ ์๋ฅผ ๋ค์ด ๋ฆด๋ฆฌ์ค์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ง์คํฐ๋ก ๋ณํฉํด์ผ ํ๋ ๊ฒฝ์ฐ ์ค์ ๋ณํฉ ์ปค๋ฐ์ ์ํํ ์ ์์ต๋๋ค. ์๋ณ์๋ ๋ค๋ฅด์ง๋ง ์๋ช
์ ๋์ผํฉ๋๋ค. ๋์ผํ ์๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ํ๋ก๋์
์ ์ถ์ํฉ๋๋ค.
๋จ์ ์ ์ด์ ์ด๋ค ์ข ๋ฅ์ ์ปค๋ฐ์ด ํ๋ก๋์ ์ ํธ์๋์๋์ง ํ์ธํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ฒดํฌ์ฌ์ ํ ๋ฐฉํฅ์ผ๋ก๋ง ์๋ํฉ๋๋ค. ์ด ๋ฌธ์ ๋ ๋ฉํ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ ์ถ๊ฐ ๋ ์ด์ด๋ก ํด๊ฒฐ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋์ค์ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
werf์ ํ๊ทธ ์ง์
Werf์์๋ ๋ ๋์๊ฐ ํ๋์ ๋จธ์ ์ ์ ์ฅ๋์ง ์๋ ์บ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ์ฐ ๋น๋๋ฅผ ์ค๋นํ๊ณ ์์ต๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ๋ ๊ฐ์ง ์ ํ์ Docker ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๊ณ ์์ต๋๋ค. ๋จ๊ณ ะธ ์์.
werf Git ์ ์ฅ์๋ ๋น๋์ ๋ค์ํ ๋จ๊ณ๋ฅผ ์ค๋ช ํ๋ ๋น๋๋ณ ์ง์นจ์ ์ ์ฅํฉ๋๋ค(์ค์น ์ , ์ค์น, ์ค์ ์ , ์ค์น). ์ฒซ ๋ฒ์งธ ๋จ๊ณ์ ์ฒดํฌ์ฌ์ผ๋ก ์ ์๋ ์๋ช ์ ์ฌ์ฉํ์ฌ ์ฒซ ๋ฒ์งธ ๋จ๊ณ ์ด๋ฏธ์ง๋ฅผ ์์งํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์์ค ์ฝ๋๋ฅผ ์ถ๊ฐํ๊ณ ์ ์คํ ์ด์ง ์ด๋ฏธ์ง์ ๋ํด ์ฒดํฌ์ฌ์ ๊ณ์ฐํฉ๋๋ค.... ์ด๋ฌํ ์์ ์ ๋ชจ๋ ์คํ ์ด์ง์ ๋ํด ๋ฐ๋ณต๋์ด ๊ฒฐ๊ณผ์ ์ผ๋ก ์คํ ์ด์ง ์ด๋ฏธ์ง ์ธํธ๋ฅผ ์ป์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์๋ณธ์ ๋ํ ๋ฉํ๋ฐ์ดํฐ๋ ํฌํจ๋ ์ต์ข ์ด๋ฏธ์ง๋ฅผ ๋ง๋ญ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ์ด ์ด๋ฏธ์ง์ ๋ค์ํ ๋ฐฉ์์ผ๋ก ํ๊ทธ๋ฅผ ์ง์ ํฉ๋๋ค(์์ธํ ๋ด์ฉ์ ๋์ค์ ์ค๋ช ).
๊ทธ ํ์ ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋๋ง ๋ณ๊ฒฝ๋ ์ ์ปค๋ฐ์ด ๋ํ๋๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๋ฌด์จ ์ผ์ด ์ผ์ด๋ ๊ฒ? ์ฝ๋ ๋ณ๊ฒฝ์ ์ํด ํจ์น๊ฐ ์์ฑ๋๊ณ ์๋ก์ด ๋ฌด๋ ์ด๋ฏธ์ง๊ฐ ์ค๋น๋ฉ๋๋ค. ์๋ช
์ ์ด์ ์คํ
์ด์ง ์ด๋ฏธ์ง์ ์ ํจ์น์ ์ฒดํฌ์ฌ์ผ๋ก ๊ฒฐ์ ๋ฉ๋๋ค. ์ด ์ด๋ฏธ์ง๋ก๋ถํฐ ์๋ก์ด ์ต์ข
์ด๋ฏธ์ง๊ฐ ํ์ฑ๋ฉ๋๋ค. ๋ค๋ฅธ ๋จ๊ณ์ ๋ณ๊ฒฝ์๋ ๋น์ทํ ๋์์ด ๋ฐ์ํฉ๋๋ค.
๋ฐ๋ผ์ ์คํ ์ด์ง ์ด๋ฏธ์ง๋ ๋ถ์ฐ์ ์ผ๋ก ์ ์ฅํ ์ ์๋ ์บ์์ด๋ฉฐ, ์ด๋ฏธ ์์ฑ๋ ์ด๋ฏธ์ง๋ Docker Registry์ ์ ๋ก๋๋ฉ๋๋ค.
๋ ์ง์คํธ๋ฆฌ ์ฒญ์
ํ๊ทธ๋ฅผ ์ญ์ ํ ํ์๋ ๊ณ์ ๋จ์ ์๋ ๋ ์ด์ด๋ฅผ ์ญ์ ํ๋ ๊ฒ์ ๋ํด ๋งํ๋ ๊ฒ์ด ์๋๋๋ค. ์ด๋ Docker ๋ ์ง์คํธ๋ฆฌ ์์ฒด์ ํ์ค ๊ธฐ๋ฅ์ ๋๋ค. ์ฐ๋ฆฌ๋ ๋ง์ Docker ํ๊ทธ๊ฐ ์ถ์ ๋๊ณ ๊ทธ ์ค ์ผ๋ถ๊ฐ ๋ ์ด์ ํ์ํ์ง ์์ง๋ง ๊ณต๊ฐ์ ์ฐจ์งํ๊ฑฐ๋ ๋น์ฉ์ ์ง๋ถํ๋ ์ํฉ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค.
์ฒญ์ ์ ๋ต์ ๋ฌด์์ ๋๊น?
- ๊ทธ๋ฅ ์๋ฌด๊ฒ๋ ์ํด๋ ๋ผ ์ฒญ์ํ์ง ๋ง์ธ์. ๋๋ก๋ ์์ฒญ๋๊ฒ ์ฝํ ํ๊ทธ๋ฅผ ํธ๋ ๊ฒ๋ณด๋ค ์ถ๊ฐ ๊ณต๊ฐ์ ์ํด ์ฝ๊ฐ์ ๋น์ฉ์ ์ง๋ถํ๋ ๊ฒ์ด ๋ ์ฝ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ํน์ ์ง์ ๊น์ง๋ง ์๋ํฉ๋๋ค.
- ์ ์ฒด ์ฌ์ค์ . CI ์์คํ ์์ ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ์ญ์ ํ๊ณ ํ์ฌ ์ด๋ฏธ์ง๋ง ์ฌ๊ตฌ์ถํ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ปจํ ์ด๋๊ฐ ํ๋ก๋์ ์์ ๋ค์ ์์๋๋ฉด ์์ง ๋๊ตฌ๋ ํ ์คํธํ์ง ์์ ์ ์ด๋ฏธ์ง๊ฐ ๋ก๋๋ฉ๋๋ค. ์ด๊ฒ์ ๋ถ๋ณ ์ธํ๋ผ์ ๋ํ ์์ด๋์ด๋ฅผ ์ฃฝ์ ๋๋ค.
- ์ฒญ๋ก์. ํ ๋ ์ง์คํธ๋ฆฌ๊ฐ ์ค๋ฒํ๋ก๋๊ธฐ ์์ํ์ต๋๋ค. ์ด๋ฏธ์ง๋ฅผ ๋ค๋ฅธ ๋ ์ง์คํธ๋ฆฌ์ ์ ๋ก๋ํฉ๋๋ค. ์ด์ ๋ฐฉ๋ฒ๊ณผ ๋์ผํ ๋ฌธ์ : ์ค๋ฒํ๋ก๊ฐ ์์๋ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ์ด๋ ์์ ์์ ์ง์ธ ์ ์์ต๋๊น?
- ์๊ฐ๋๋ณ๋ก. 1๊ฐ์์ด ์ง๋ ์ด๋ฏธ์ง๋ฅผ ๋ชจ๋ ์ญ์ ํ์๊ฒ ์ต๋๊น? ํ์ง๋ง ๋ถ๋ช ํ ๋ฌ ๋์ ์ ๋ฐ์ดํธ๊ฐ ์ ๋๋ ์๋น์ค๊ฐ ์์ ํ ๋ฐโฆ
- ์๋์ผ๋ก ์ด๋ฏธ ์ญ์ ํ ์ ์๋ ํญ๋ชฉ์ ๊ฒฐ์ ํฉ๋๋ค.
์ค์ ๋ก ์คํ ๊ฐ๋ฅํ ๋ ๊ฐ์ง ์ต์ ์ด ์์ต๋๋ค. ์ฒญ์ํ์ง ์๊ฑฐ๋ ์ฒญ๋ก์ + ์๋ ์กฐํฉ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ํ์์ ๊ฒฝ์ฐ ๋ค์ ์ฌํญ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค. ๋ ์ง์คํธ๋ฆฌ๋ฅผ ์ ๋ฆฌํด์ผ ํ ๋๋ผ๋ ๊ฒ์ ์ดํดํ๋ฉด ์ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ ์๋ฅผ ๋ค์ด ํ ๋ฌ ๋์ ๋ชจ๋ ์ ์ด๋ฏธ์ง๋ฅผ ์ฌ๊ธฐ์ ์ถ๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ ๋ฌ ํ์๋ Kubernetes์ ์ด๋ค ํฌ๋๊ฐ ์ฌ์ ํ ์ด์ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ์๋์ง ํ์ธํ๊ณ ์ด๋ฅผ ์ ๋ ์ง์คํธ๋ฆฌ๋ก ์ ์กํฉ๋๋ค.
์ฐ๋ฆฌ๋ ๋ฌด์์ ์ด๋ฅด๋ ์ต๋๊น? ์ํ? ์ฐ๋ฆฌ๋ ๋ค์์ ์์งํฉ๋๋ค:
- Git ํค๋: ๋ชจ๋ ํ๊ทธ, ๋ชจ๋ ๋ธ๋์น - ์ด๋ฏธ์ง์ Git์ ํ๊ทธ๋ ๋ชจ๋ ๊ฒ์ด ํ์ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค(๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ Git ์์ฒด์์ ์ญ์ ํด์ผ ํฉ๋๋ค).
- ํ์ฌ Kubernetes๋ก ํํ๋๋ ๋ชจ๋ ํฌ๋
- ์ด์ ReplicaSet(์ต๊ทผ์ ๋ฆด๋ฆฌ์ค๋ ๊ฒ), ๊ทธ๋ฆฌ๊ณ Helm ๋ฆด๋ฆฌ์ค๋ฅผ ์ค์บํ๊ณ ๊ฑฐ๊ธฐ์์ ์ต์ ์ด๋ฏธ์ง๋ฅผ ์ ํํ ๊ณํ๋ ์์ต๋๋ค.
... ๊ทธ๋ฆฌ๊ณ ์ด ์ธํธ์์ ์ญ์ ํ์ง ์์ ์ด๋ฏธ์ง ๋ชฉ๋ก์ธ ํ์ดํธ๋ฆฌ์คํธ๋ฅผ ๋ง๋ญ๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ๊ฒ์ ์ ๋ฆฌํ ํ ๊ณ ์ ๋จ๊ณ ์ด๋ฏธ์ง๋ฅผ ์ฐพ์์ ์ญ์ ํฉ๋๋ค.
๋ฐฐํฌ ๋จ๊ณ
์ ๋ขฐํ ์ ์๋ ์ ์ธ์ฑ
๋ฐฐํฌ์์ ๊ฐ์ฅ ์ฃผ๋ชฉํ๊ณ ์ถ์ ์ ์ ์ ์ธ์ ์ผ๋ก ์ ์ธ๋ ์ ๋ฐ์ดํธ๋ ๋ฆฌ์์ค ๊ตฌ์ฑ์ ๋กค์์์ ๋๋ค. Kubernetes ๋ฆฌ์์ค๋ฅผ ์ค๋ช ํ๋ ์๋ณธ YAML ๋ฌธ์๋ ํญ์ ํด๋ฌ์คํฐ์์ ์ค์ ๋ก ์คํ๋๋ ๊ฒฐ๊ณผ์ ๋งค์ฐ ๋ค๋ฆ ๋๋ค. Kubernetes๊ฐ ๊ตฌ์ฑ์ ์ถ๊ฐํ๊ธฐ ๋๋ฌธ์:
- ์๋ณ์;
- ์๋น์ค ์ ๋ณด;
- ๋ง์ ๊ธฐ๋ณธ๊ฐ;
- ํ์ฌ ์ํ์ ์น์ ;
- ์น์ธ ์นํ ์ ์ผ๋ถ๋ก ๋ณ๊ฒฝ๋ ์ฌํญ
- ๋ค์ํ ์ปจํธ๋กค๋ฌ(๋ฐ ์ค์ผ์ค๋ฌ)์ ์์ ๊ฒฐ๊ณผ์ ๋๋ค.
๋ฐ๋ผ์ ์๋ก์ด ๋ฆฌ์์ค ๊ตฌ์ฑ์ด ๋ํ๋๋ฉด( ), ํ์ฌ์ "๋ผ์ด๋ธ" ๊ตฌ์ฑ์ ๊ฐ์ ธ์์ ๋ฎ์ด์ธ ์๋ ์์ต๋๋ค(์ด๊ณ ์๋ค). ์ด๋ ๊ฒ ํ๋ ค๋ฉด ๋น๊ต๋ฅผ ํด์ผ ํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก ์ ์ฉ๋ ๊ตฌ์ฑ(๋ง์ง๋ง์ผ๋ก ์ ์ฉ๋) ๊ทธ๋ฆฌ๊ณ ๊ตด๋ฌ๊ฐ๋ค ์ด๊ณ ์๋ค ํจ์น๋ฅผ ๋ฐ์์ต๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์ ์๋ฐฉํฅ ๋ณํฉ. ์๋ฅผ ๋ค์ด Helm์์ ์ฌ์ฉ๋ฉ๋๋ค.
๋ ์์ต๋๋ค ์๋ฐฉํฅ ๋ณํฉ, ์ด๋ ๋ค์๊ณผ ๊ฐ์ ์ ์์ ๋ค๋ฆ ๋๋ค.
- ๋น๊ต ๋ง์ง๋ง์ผ๋ก ์ ์ฉ๋ ะธ , ์ญ์ ๋ ๋ด์ฉ์ ์ดํด๋ด ๋๋ค.
- ๋น๊ต ะธ ์ด๊ณ ์๋ค, ๋ฌด์์ด ์ถ๊ฐ๋๊ฑฐ๋ ๋ณ๊ฒฝ๋์๋์ง ์ดํด๋ด ๋๋ค.
- ํฉ์ฐ๋ ํจ์น๊ฐ ์ ์ฉ๋ฉ๋๋ค. ์ด๊ณ ์๋ค.
์ฐ๋ฆฌ๋ Helm์ ์ฌ์ฉํ์ฌ 1000๊ฐ ์ด์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๋ฏ๋ก ์ค์ ๋ก ์๋ฐฉํฅ ๋ณํฉ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ Helm์ด ์ ์์ ์ผ๋ก ์๋ํ๋ ๋ฐ ๋์์ด ๋๋ ํจ์น๋ฅผ ํตํด ํด๊ฒฐํ ์ฌ๋ฌ ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ค์ ์ถ์ ์ํ
CI ์์คํ
์ ๋ค์ ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Kubernetes์ ๋ํ ์๋ก์ด ๊ตฌ์ฑ์ ์์ฑํ ํ ์ฌ์ฉ์ ์ํด ์ ์กํฉ๋๋ค. (์ ์ฉํ๋ค) ํด๋ฌ์คํฐ์ - Helm ์ฌ์ฉ ๋๋ kubectl apply
. ๋ค์์ผ๋ก, ์ด๋ฏธ ์ค๋ช
ํ N ๋ฐฉํฅ ๋ณํฉ์ด ๋ฐ์ํ๋ฉฐ, ์ด์ ๋ํด Kubernetes API๋ CI ์์คํ
๊ณผ ํด๋น ์ฌ์ฉ์์๊ฒ ์น์ธ์ ์ผ๋ก ์๋ตํฉ๋๋ค.
๊ทธ๋ฌ๋ ํฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๊ฒฐ๊ตญ ์ฑ๊ณต์ ์ธ ์ ์ฉ์ด ์ฑ๊ณต์ ์ธ ์ถ์๋ฅผ ์๋ฏธํ์ง๋ ์์ต๋๋ค.. Kubernetes๊ฐ ์ด๋ค ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํด์ผ ํ๋์ง ์ดํดํ๊ณ ์ ์ฉํ๋๋ผ๋ ๊ฒฐ๊ณผ๊ฐ ์ด๋ป๊ฒ ๋ ์ง๋ ์์ง ์ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํ๋ฐํธ์๋์์ ํฌ๋๋ฅผ ์
๋ฐ์ดํธํ๊ณ ๋ค์ ์์ํ๋ฉด ์ฑ๊ณตํ ์ ์์ง๋ง ๋ฐฑ์๋์์๋ ์ฑ๊ณตํ์ง ๋ชปํ ์ ์์ผ๋ฉฐ ์คํ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์
์ด๋ฏธ์ง์ ๋ค๋ฅธ ๋ฒ์ ์ ์ป๊ฒ ๋ฉ๋๋ค.
๋ชจ๋ ์์
์ ์ฌ๋ฐ๋ฅด๊ฒ ์ํํ๋ ค๋ฉด ์ด ์ฒด๊ณ์ ์ถ๊ฐ ๋งํฌ, ์ฆ Kubernetes API์์ ์ํ ์ ๋ณด๋ฅผ ์์ ํ๊ณ ์ค์ ์ํ์ ๋ํ ์ถ๊ฐ ๋ถ์์ ์ํด ์ ์กํ๋ ํน์ ์ถ์ ๊ธฐ๊ฐ ํ์ํฉ๋๋ค. ์ฐ๋ฆฌ๋ Go์์ ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค์์ต๋๋ค.
werf ์์ค์์ ์ด ์ถ์ ๊ธฐ์ ๋์์ ๋ฐฐํฌ ๋๋ StatefulSet์ ๋ฐฐ์น๋ ์ฃผ์์ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ๋ฉ๋๋ค. ์ฃผ์ ์ฃผ์ - fail-mode
- ๋ค์ ์๋ฏธ๋ฅผ ์ดํดํฉ๋๋ค.
-
IgnoreAndContinueDeployProcess
โ ์ฐ๋ฆฌ๋ ์ด ๊ตฌ์ฑ ์์๋ฅผ ๋กค์์ํ๋ ๋ฐ ๋ฐ๋ฅธ ๋ฌธ์ ๋ฅผ ๋ฌด์ํ๊ณ ๋ฐฐํฌ๋ฅผ ๊ณ์ํฉ๋๋ค. -
FailWholeDeployProcessImmediately
โ ์ด ๊ตฌ์ฑ ์์์ ์ค๋ฅ๋ก ์ธํด ๋ฐฐํฌ ํ๋ก์ธ์ค๊ฐ ์ค์ง๋ฉ๋๋ค. -
HopeUntilEndOfDeployProcess
โ ๋ฐฐํฌ๊ฐ ๋๋ โโ๋๊น์ง ์ด ๊ตฌ์ฑ ์์๊ฐ ์๋ํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์๋ฅผ ๋ค์ด ๋ฆฌ์์ค์ ์ฃผ์ ๊ฐ์ ์กฐํฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. fail-mode
:
์ฒ์ ๋ฐฐํฌํ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค(MongoDB)๊ฐ ์์ง ์ค๋น๋์ง ์์์ ์ ์์ต๋๋ค. ๋ฐฐํฌ๊ฐ ์คํจํฉ๋๋ค. ํ์ง๋ง ์์๋๋ ์๊ฐ๊น์ง ๊ธฐ๋ค๋ฆด ์ ์์ผ๋ฉฐ ๋ฐฐํฌ๋ ๊ณ์ ์งํ๋ฉ๋๋ค.
werf์๋ kubedog์ ๋ํ ๋ ๊ฐ์ง ์ฃผ์์ด ๋ ์์ต๋๋ค.
-
failures-allowed-per-replica
- ๊ฐ ๋ณต์ ๋ณธ์ ๋ํด ํ์ฉ๋ ๋ํ ํ์ -
show-logs-until
โ werf๊ฐ ๋กค์์๋ ๋ชจ๋ ํฌ๋์ ๋ก๊ทธ๋ฅผ (stdout์์) ํ์ํ ๋๊น์ง์ ์๊ฐ์ ์กฐ์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์PodIsReady
(ํธ๋ํฝ์ด ํฌ๋๋ก ๋ค์ด์ค๊ธฐ ์์ํ ๋ ์ํ์ง ์๋ ๋ฉ์์ง๋ฅผ ๋ฌด์ํ๊ธฐ ์ํด) ๊ฐ๋ ์ ํจํฉ๋๋ค.ControllerIsReady
ะธEndOfDeploy
.
๋ฐฐํฌ์์ ๋ ๋ฌด์์ ์ํฉ๋๊น?
์ด๋ฏธ ์ค๋ช ํ ๋ ๊ฐ์ง ์ฌํญ ์ธ์๋ ๋ค์์ ์ํฉ๋๋ค.
- ๋ณด๊ณ ๋ก๊ทธ -๊ทธ๋ฆฌ๊ณ ํ์ํ ๊ฒ๋ง ์๊ณ ๋ชจ๋ ๊ฒ์ด ์ฐ์๋๋ ๊ฒ์ ์๋๋๋ค.
- ๊ธธ ์งํ, ์์ ์ด ๋ช ๋ถ ๋์ "์กฐ์ฉํ" ์ค๋จ๋๋ฉด ๊ฑฐ๊ธฐ์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ์ดํดํ๋ ๊ฒ์ด ์ค์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ๊ฐ์ง๊ณ ์๋ค ์๋ ๋กค๋ฐฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ(๋ฐ๋ผ์ ๋ฐฐํฌ์ ์ค์ ์ํ๋ฅผ ์๋ ๊ฒ์ด ์ค์ํฉ๋๋ค) ๋กค์์์ ์์์ ์ด์ด์ผ ํฉ๋๋ค. ๋๊น์ง ์งํ๋๊ฑฐ๋ ๋ชจ๋ ๊ฒ์ด ์ด์ ์ํ๋ก ๋์๊ฐ๋๋ค.
๊ฒฐ๊ณผ
ํ์ฌ๋ก์ ์ฐ๋ฆฌ์๊ฒ๋ ๋ค์ํ ์ ๊ณต ๋จ๊ณ(๊ตฌ์ถ, ๊ฒ์, ๋ฐฐํฌ)์์ ์ค๋ช
๋ ๋ชจ๋ ๋ฏธ๋ฌํ ์ฐจ์ด๋ฅผ ๊ตฌํํ๋ ค๋ฉด CI ์์คํ
๊ณผ ์ ํธ๋ฆฌํฐ๋ง์ผ๋ก ์ถฉ๋ถํฉ๋๋ค.
๊ฒฐ๋ก ๋์ :
Werf์ ๋์์ผ๋ก ์ฐ๋ฆฌ๋ DevOps ์์ง๋์ด๋ฅผ ์ํ ๋ง์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ์ข์ ์ง์ ์ ์ด๋ฃจ์์ผ๋ฉฐ ๋ ๋์ ์ปค๋ฎค๋ํฐ์์ ์ ์ด๋ ์ด ์ ํธ๋ฆฌํฐ๋ฅผ ์ค์ ๋ก ์ฌ์ฉํด ๋ณผ ์ ์๋ค๋ฉด ๊ธฐ์ ๊ฒ์
๋๋ค. ํจ๊ปํ๋ฉด ์ข์ ๊ฒฐ๊ณผ๋ฅผ ์ป๋ ๊ฒ์ด ๋ ์ฌ์ธ ๊ฒ์
๋๋ค.
๋น๋์ค ๋ฐ ์ฌ๋ผ์ด๋
๊ณต์ฐ ์์(~47๋ถ):
๋ณด๊ณ ์ ๋ฐํ:
PS
๋ธ๋ก๊ทธ์ Kubernetes์ ๋ํ ๊ธฐํ ๋ณด๊ณ ์:
- ยซ
Kubernetes์ ์๋ ํฌ๊ธฐ ์กฐ์ ๋ฐ ๋ฆฌ์์ค ๊ด๋ฆฌ ยป (Dmitry Stolyarov; 27๋ 2019์ XNUMX์ผ "Strike" ๊ด๋ จ); - ยซ
Kubernetes ํ์ฅ ๋ฐ ๋ณด์ ยป (Andrey Polovov; 8๋ 2019์ XNUMX์ผ Saint HighLoad++); - ยซ
๋ฐ์ดํฐ๋ฒ ์ด์ค์ Kubernetes ยป (Dmitry Stolyarov; HighLoad++์์ 8๋ 2018์ XNUMX์ผ); - ยซ
๋ชจ๋ํฐ๋ง ๋ฐ Kubernetes ยป (Dmitry Stolyarov; 28๋ 2018์ XNUMX์ผ RootConf์์); - ยซ
Kubernetes ๋ฐ GitLab์ ์ฌ์ฉํ CI/CD ๋ชจ๋ฒ ์ฌ๋ก ยป (Dmitry Stolyarov; HighLoad++์์ 7๋ 2017์ XNUMX์ผ); - ยซ
์๊ท๋ชจ ํ๋ก์ ํธ์์์ Kubernetes ๊ฒฝํ ยป (Dmitry Stolyarov; 6๋ 2017์ XNUMX์ผ RootConf์์).
์ถ์ฒ : habr.com