kubeform ํ๋ก์ ํธ์์ ์ฌ์ฉ์๊ฐ ์ ์ํ k8s ๋ค์ด์ด๊ทธ๋จ๋๋ก AWS EKS ํ๊ฒฝ์ ์์ฑํ๊ณ ์ฌ์ฉ์๊ฐ ์ ์ํ docker image๋ค์ ์ ์ฉ์ํค๋ ์์
์ ์๋ํํ์ต๋๋ค.
Flask API ์๋ฒ์์ POST ์์ฒญ์ ๋ฐ์ผ๋ฉด, ์ฌ์ฉ์์ IAM User๋ฅผ ๊ธฐ๋ฐ์ผ๋ก AWS EKS ํด๋ฌ์คํฐ๋ฅผ Terraform์ ์ด์ฉํด ์์ฑํฉ๋๋ค.
์์ฑํ ์ดํ ์ฌ์ฉ์๊ฐ ์ ์ํ docker image๋ค์ ์์ปค๋
ธ๋์ applyํ๋ ์์
์ ์๋ํ ํ๊ธฐ ์ํด yaml manifest ํ์ผ๋ค์ ์๋์ผ๋ก ํธ์งํ๊ณ ์ ์ฉ์ํค๋ ์์
์ ์๋ฃํ์ต๋๋ค.
-
flask - API Server by Flask
- Flask๋ฅผ ์ด์ฉํด API ์๋ฒ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค๊ณ , ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ํํ๋๋ฐ์ ์ฌ์ฉํ์์ต๋๋ค.
-
terraform - AWS EKS ์์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ํ๊ฒฝ์ ํ๋ก๋น์ ๋ํ Terraform ๊ตฌ์ฑ
- ํด๋ผ์ฐ๋ ํ๊ฒฝ์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ ์ ์ํ๊ธฐ ์ํด AWS ์ธํ๋ผ๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
- ์์ปค๋ ธ๋๋ค์ ํด๋น๋๋ EC2๋ค๊ณผ ์ด EC2 ์ธ์คํด์ค๋ค์ private ์๋ธ๋ท์ ๋ฐฐ์นํ๊ณ , ์ด๋ค์ด ์ธ๋ถ์ ํต์ ํ๊ธฐ์ํ NAT gateway, NLB ๋ฑ ๋ง์ AWS ์ธํ๋ผ๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
- ์ด ๋ชจ๋ ๋ฆฌ์์ค๋ค์ Terraform์ ์ฌ์ฉํด ์ธํ๋ผ๋ค์ ํ๋ก๋น์ ๋ ํด๋๋ ์์ ์ ์๋ฃํ์ต๋๋ค.
-
sample, k8s - kubectl ๋ช ๋ น์ ์ํด ํ์ํ yaml ๋งค๋ํจ์คํธ ํ์ผ๋ค
- ์์ฑ๋ ํด๋ผ์ฐ๋ ๋ฆฌ์์ค๋ค์ ๋ฐฐ๊ฒฝ์ผ๋ก ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ ์์ฑํ๊ธฐ ์ํด ๊ตฌ์ฑ๊ด๋ฆฌ ํ์ผ๋ค์ ์๋์ผ๋ก ์์ฑํฉ๋๋ค.
- ๊ตฌ์ฑ๊ด๋ฆฌ ํ์ผ๋ค์ kubectl ๋ช ๋ น์ผ๋ก ํด๋ฌ์คํฐ๋ฅผ ์์ฑํ ๋ค์, ์ ๋ณด๋ค์ ๊ฐ์ ธ์ ํด๋ผ์ด์ธํธ๋ก ์ ์กํฉ๋๋ค.
์ฌ์ฉ์์๊ฒ EKS ์ฟ ๋ฒ๋คํฐ์ค ํ๊ฒฝ์ ์ ์ํด์ฃผ๋ ์ ์ฐจ๋ ํฌ๊ฒ 2๊ฐ์ง๋ก ๋๋ฉ๋๋ค.
- Terraform์ผ๋ก ์ฌ์ฉ์์ ํด๋ผ์ฐ๋ ํ๊ฒฝ์์ ์ฌ๋ฌ ๊ฐ์ AWS ์ธํ๋ผ๋ฅผ ์์ฑ
- EKS์ kubectl์ผ๋ก ์ ์ํด ์ฌ์ฉ์๊ฐ ์ ์ํ ํด๋ฌ์คํฐ ๊ตฌ์กฐ๋ฅผ ๋ํ๋ก์ด๋จผํธํ ํ์ฌ ์ ์ฉ
ํด๋ผ์ฐ๋ ์์ ์ฟ ๋ฒ๋คํฐ์ค ํ๊ฒฝ์ ์ค์นํ๊ธฐ ์ํด์๋ ๋จ์ํ EKS ์๋น์ค๋ง ์์ฑํด์๋ ์๋ฉ๋๋ค. EKS๋ ๋ง์คํฐ ๋ ธ๋์ ์ญํ ์ ํ๋ ๋๋์ผ๋ฟ, ์์ปค๋ ธ๋๋ค์ ํด๋น๋๋ EC2๋ค๊ณผ ์ด EC2 ์ธ์คํด์ค๋ค์ private ์๋ธ๋ท์ ๋ฐฐ์นํ๊ณ , ์ด๋ค์ด ์ธ๋ถ์ ํต์ ํ๊ธฐ์ํ NAT gateway, NLB ๋ฑ ๋ง์ AWS ์ธํ๋ผ๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. ์ด ๋ชจ๋ ๋ฆฌ์์ค๋ค์ Terraform์ ์ฌ์ฉํด ์ธํ๋ผ๋ค์ ํ๋ก๋น์ ๋ ํด๋๋ ์์ ์ ์๋ฃํ์ต๋๋ค. ์ฌ์ฉ์๊ฐ ์ ์ํ ์์ปค๋ ธ๋ ๊ฐ์,์ธ์คํด์ค ์ ํ ๋ฑ๋ค์ ๋ณ์๋ก ๋ฐ์ Terraform apply์์ ์ ์๋ฃํ๋ฉด 10๋ถ~12๋ถ ์ฌ์ด์ ๋ชจ๋ ์ธํ๋ผ ๊ตฌ์ฑ์ด ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค.
[EKS์ kubectl์ผ๋ก ์ ์ํด ์ฌ์ฉ์๊ฐ ์ ์ํ ํด๋ฌ์คํฐ ๊ตฌ์กฐ๋ฅผ ๋ํ๋ก์ด๋จผํธํ ํ์ฌ ์ ์ฉ]
AWS์์ ์ธํ๋ผ ์์ฑ์ด ์๋ฃ๋๋ฉด ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ ์ ์ฉ์ํฌ ์ฐจ๋ก์ ๋๋ค. ํด๋ผ์ด์ธํธ์์ ๋ฐ์ ์ฌ์ฉ์๊ฐ ์ ์ํ ํด๋ฌ์คํฐ ์ ๋ณด๋ฅผ JSON ํํ๋ก ์ ๊ณต๋ฐ์ ์ด ์์๋ค์ deployment.yaml, service.yaml, namespace.yaml ๋ฑ์ ๊ตฌ์ฑ๊ด๋ฆฌ ํ์ผ๋ก ์๋์ผ๋ก ์์ฑํ๋ ์๊ณ ๋ฆฌ์ฆ์ Flask ์๋ฒ๋ก ์์ฒด ์ค๊ณ, ๊ฐ๋ฐํ์์ต๋๋ค. ๊ตฌ์ฑ๊ด๋ฆฌ ํ์ผ์ด ์๋์ผ๋ก ์์ฑ๋๋ฉด, ์ด ํ์ผ๋ค์ EKS์ ์ ์ฉ์ํค๋ ๋จ๊ณ๋ก ๋์ด๊ฐ๋๋ค. kubectl์ ํตํด ๋ชจ๋ ์๋น์ค๋ค์ ์ ์ฉ์ํค๊ณ ๋๋ฉด ๊ฐ๊ฐ์ ์๋น์ค๋ก ์ฐ๊ฒฐ๋๋ ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ ์ง์ ์ ๋ค์ ์ ์ ์๊ณ , ์ด ์ ๋ณด๋ค์ ๋ชจ์ ์ฌ์ฉ์๋ค์ด ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋๋ก ํด๋ผ์ด์ธํธ๋ก ์ ๋ฌํฉ๋๋ค.
- I will not be accepting PR's on this repository. Feel free to fork and maintain your own version.
- This project is open source and available under the MIT License.
