๋ฉ๋ชจ. ๋ฒ์ญ: ์ ๋ฝ ํ์ฌ Adevinta์์ ์์ ์ํํธ์จ์ด ์์ง๋์ด ์ง์ฑ ์ ๋งก๊ณ ์๋ Galo Navarro๊ฐ ์์ฑํ ์ด ๊ธฐ์ฌ๋ ์ธํ๋ผ ์ด์ ๋ถ์ผ์ ๋ํ ํฅ๋ฏธ๋กญ๊ณ ์ ์ตํ "์กฐ์ฌ"์ ๋๋ค. ์ ์๊ฐ ๋งจ ์ฒ์์ ์ค๋ช ํ๋ ์ด์ ๋ก ์๋ ์ ๋ชฉ์ ๋ฒ์ญ์์ ์ฝ๊ฐ ํ์ฅ๋์์ต๋๋ค.
์ ์์ ๋ฉ๋ชจ: ์ด ๊ฒ์๋ฌผ์ธ ๊ฒ ๊ฐ์ต๋๋ค
๋ช ์ฃผ ์ ์ ์ฐ๋ฆฌ ํ์ ๋จ์ผ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ CI/CD, Kubernetes ๊ธฐ๋ฐ ๋ฐํ์, ๋ฉํธ๋ฆญ ๋ฐ ๊ธฐํ ๊ธฐ๋ฅ์ด ํฌํจ๋ ํต์ฌ ํ๋ซํผ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ๊ณ ์์์ต๋๋ค. ์ด๋ฌํ ์ด์ ์ ์ํ์ ์ธ ์ฑ๊ฒฉ์ ๋ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฅํ ๋ช ๋ฌ ๋ด์ ์ฝ 150๊ฐ์ ์๋น์ค๋ฅผ ์ถ๊ฐ๋ก ์ด์ ํ ๊ณํ์ด์์ต๋๋ค. ์ด๋ค ๋ชจ๋๋ ์คํ์ธ ์ต๋ ๊ท๋ชจ์ ์จ๋ผ์ธ ํ๋ซํผ(Infojobs, Fotocasa ๋ฑ)์ ์ด์์ ๋ด๋นํ๊ณ ์์ต๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ Kubernetes์ ๋ฐฐํฌํ๊ณ ์ผ๋ถ ํธ๋ํฝ์ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๋ฆฌ๋๋ ์ ํ ํ ๋๋ผ์ด ์ผ์ด ์ฐ๋ฆฌ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์์์ต๋๋ค. ์ง์ฐ (์จ์ด ์์) Kubernetes์ ์์ฒญ์ EC10๋ณด๋ค 2๋ฐฐ ๋ ๋์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ ์ฐพ๊ฑฐ๋ ๋ง์ดํฌ๋ก์๋น์ค(๋ฐ ์ ์ฒด ํ๋ก์ ํธ)์ ๋ง์ด๊ทธ๋ ์ด์ ์ ํฌ๊ธฐํด์ผ ํ์ต๋๋ค.
EC2๋ณด๋ค Kubernetes์์ ์ง์ฐ ์๊ฐ์ด ํจ์ฌ ๋ ๊ธด ์ด์ ๋ ๋ฌด์์ ๋๊น?
๋ณ๋ชฉ ํ์์ ์ฐพ๊ธฐ ์ํด ์ ์ฒด ์์ฒญ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ์งํ๋ฅผ ์์งํ์ต๋๋ค. ์ฐ๋ฆฌ์ ์ํคํ
์ฒ๋ ๊ฐ๋จํฉ๋๋ค. API ๊ฒ์ดํธ์จ์ด(Zuul)๋ ์์ฒญ์ EC2 ๋๋ Kubernetes์ ๋ง์ดํฌ๋ก์๋น์ค ์ธ์คํด์ค๋ก ํ๋ก์ํฉ๋๋ค. Kubernetes์์๋ NGINX Ingress Controller๋ฅผ ์ฌ์ฉํ๊ณ ๋ฐฑ์๋๋ ๋ค์๊ณผ ๊ฐ์ ์ผ๋ฐ ๊ฐ์ฒด์
๋๋ค.
EC2
+---------------+
| +---------+ |
| | | |
+-------> BACKEND | |
| | | | |
| | +---------+ |
| +---------------+
+------+ |
Public | | |
-------> ZUUL +--+
traffic | | | Kubernetes
+------+ | +-----------------------------+
| | +-------+ +---------+ |
| | | | xx | | |
+-------> NGINX +------> BACKEND | |
| | | xx | | |
| +-------+ +---------+ |
+-----------------------------+
๋ฌธ์ ๋ ๋ฐฑ์๋์ ์ด๊ธฐ ์ง์ฐ ์๊ฐ๊ณผ ๊ด๋ จ๋ ๊ฒ ๊ฐ์ต๋๋ค(๊ทธ๋ํ์์ ๋ฌธ์ ์์ญ์ "xx"๋ก ํ์ํ์ต๋๋ค). EC2์์๋ ์ ํ๋ฆฌ์ผ์ด์ ์๋ต์ ์ฝ 20ms๊ฐ ๊ฑธ๋ ธ์ต๋๋ค. Kubernetes์์๋ ๋๊ธฐ ์๊ฐ์ด 100~200ms๋ก ๋์ด๋ฌ์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋ฐํ์ ๋ณ๊ฒฝ๊ณผ ๊ด๋ จ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ฉ์์๋ฅผ ์ ์ํ๊ฒ ๊ธฐ๊ฐํ์ต๋๋ค. JVM ๋ฒ์ ์ ๋์ผํ๊ฒ ์ ์ง๋ฉ๋๋ค. ์ปจํ ์ด๋ํ ๋ฌธ์ ๋ ์ด์ ์๋ฌด ๊ด๋ จ์ด ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๋ฏธ EC2์ ์ปจํ ์ด๋์์ ์ฑ๊ณต์ ์ผ๋ก ์คํ๋๊ณ ์์์ต๋๋ค. ๋ก๋ ์ค์ด์ ๊ฐ์? ๊ทธ๋ฌ๋ ์ด๋น 1๊ฐ์ ์์ฒญ์์๋ ๋์ ์ง์ฐ ์๊ฐ์ด ๊ด์ฐฐ๋์์ต๋๋ค. ๊ฐ๋น์ง ์์ง์ ์ํ ์ผ์ ์ค์ง๋ ๋ฌด์๋ ์ ์์ต๋๋ค.
Kubernetes ๊ด๋ฆฌ์ ์ค ํ ๋ช ์ ๊ณผ๊ฑฐ์ DNS ์ฟผ๋ฆฌ๋ก ์ธํด ๋น์ทํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ธ๋ถ ์ข ์์ฑ์ด ์๋์ง ๊ถ๊ธํดํ์ต๋๋ค.
๊ฐ์ค 1: DNS ์ด๋ฆ ํ์ธ
๊ฐ ์์ฒญ์ ๋ํด ์ฐ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ค์๊ณผ ๊ฐ์ ๋๋ฉ์ธ์์ AWS Elasticsearch ์ธ์คํด์ค์ 1~3ํ ์ก์ธ์คํฉ๋๋ค. elastic.spain.adevinta.com
. ์ปจํ
์ด๋ ๋ด๋ถ
์ปจํ ์ด๋์ DNS ์ฟผ๋ฆฌ:
[root@be-851c76f696-alf8z /]# while true; do dig "elastic.spain.adevinta.com" | grep time; sleep 2; done
;; Query time: 22 msec
;; Query time: 22 msec
;; Query time: 29 msec
;; Query time: 21 msec
;; Query time: 28 msec
;; Query time: 43 msec
;; Query time: 39 msec
์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ ์ค์ธ EC2 ์ธ์คํด์ค ์ค ํ๋์ ์ ์ฌํ ์์ฒญ:
bash-4.4# while true; do dig "elastic.spain.adevinta.com" | grep time; sleep 2; done
;; Query time: 77 msec
;; Query time: 0 msec
;; Query time: 0 msec
;; Query time: 0 msec
;; Query time: 0 msec
์กฐํ์ ์ฝ 30ms๊ฐ ์์๋ ์ ์ ๊ณ ๋ คํ๋ฉด Elasticsearch์ ์ก์ธ์คํ ๋ DNS ํ์ธ์ด ์ค์ ๋ก ์ง์ฐ ์๊ฐ ์ฆ๊ฐ์ ๊ธฐ์ฌํ๊ณ ์์์ด ๋ถ๋ช ํด์ก์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ ๋ค์ ๋ ๊ฐ์ง ์ด์ ๋ก ์ด์ํ์ต๋๋ค.
- ์ฐ๋ฆฌ๋ ์ด๋ฏธ ๋์ ์ง์ฐ ์๊ฐ ์์ด AWS ๋ฆฌ์์ค์ ์ํธ ์์ฉํ๋ ์๋ง์ Kubernetes ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์ ํ๊ณ ์์ต๋๋ค. ์ด์ ๊ฐ ๋ฌด์์ด๋ , ๊ทธ๊ฒ์ ํนํ ์ด ์ฌ๊ฑด๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค.
- ์ฐ๋ฆฌ๋ JVM์ด ๋ฉ๋ชจ๋ฆฌ ๋ด DNS ์บ์ฑ์ ์ํํ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ์ด๋ฏธ์ง์์ TTL ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ด ๊ธฐ๋ก๋ฉ๋๋ค.
$JAVA_HOME/jre/lib/security/java.security
10์ด๋ก ์ค์ ํฉ๋๋ค.networkaddress.cache.ttl = 10
. ์ฆ, JVM์ ๋ชจ๋ DNS ์ฟผ๋ฆฌ๋ฅผ 10์ด ๋์ ์บ์ํด์ผ ํฉ๋๋ค.
์ฒซ ๋ฒ์งธ ๊ฐ์ค์ ํ์ธํ๊ธฐ ์ํด ์ ์ DNS ํธ์ถ์ ์ค๋จํ๊ณ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์๋์ง ํ์ธํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ๋จผ์ , ๋๋ฉ์ธ ์ด๋ฆ์ด ์๋ IP ์ฃผ์๋ฅผ ํตํด Elasticsearch์ ์ง์ ํต์ ํ๋๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ๊ตฌ์ฑํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ์ด๋ฅผ ์ํด์๋ ์ฝ๋ ๋ณ๊ฒฝ๊ณผ ์๋ก์ด ๋ฐฐํฌ๊ฐ ํ์ํ๋ฏ๋ก ๊ฐ๋จํ ๋๋ฉ์ธ์ IP ์ฃผ์์ ๋งคํํ์ต๋๋ค. /etc/hosts
:
34.55.5.111 elastic.spain.adevinta.com
์ด์ ์ปจํ ์ด๋๋ ๊ฑฐ์ ์ฆ์ IP๋ฅผ ์์ ํ์ต๋๋ค. ์ด๋ก ์ธํด ์ฝ๊ฐ์ ๊ฐ์ ์ด ์ด๋ฃจ์ด์ก์ผ๋ ์์ ๋๊ธฐ ์๊ฐ ์์ค์ ์ฝ๊ฐ ๋ ๊ฐ๊น์์ก์ต๋๋ค. DNS ํ์ธ์ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ ธ์ง๋ง ์ค์ ์ด์ ๋ ์ฌ์ ํ ํ์ ๋์ง ์์์ต๋๋ค.
๋คํธ์ํฌ๋ฅผ ํตํ ์ง๋จ
์ฐ๋ฆฌ๋ ๋ค์์ ์ฌ์ฉํ์ฌ ์ปจํ
์ด๋์ ํธ๋ํฝ์ ๋ถ์ํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. tcpdump
๋คํธ์ํฌ์์ ์ ํํ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ํ์ธํ๋ ค๋ฉด ๋ค์์ ์ํํ์ธ์.
[root@be-851c76f696-alf8z /]# tcpdump -leni any -w capture.pcap
๊ทธ๋ฐ ๋ค์ ์ฌ๋ฌ ์์ฒญ์ ๋ณด๋ด๊ณ ํด๋น ์บก์ฒ๋ฅผ ๋ค์ด๋ก๋ํ์ต๋๋ค(kubectl cp my-service:/capture.pcap capture.pcap
) ์ถ๊ฐ ๋ถ์์ ์ํด
DNS ์ฟผ๋ฆฌ์๋ ์์ฌ์ค๋ฌ์ด ์ ์ด ํ๋๋ ์์์ต๋๋ค(๋์ค์ ์ค๋ช ํ ํ ๊ฐ์ง ์์ ์ฌํญ์ ์ ์ธํ๊ณ ). ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ ์๋น์ค๊ฐ ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์๋ ํน์ ํ ์ด์ํ ์ ์ด ์์์ต๋๋ค. ๋ค์์ ์๋ต์ด ์์๋๊ธฐ ์ ์ ์์ฒญ์ด ์๋ฝ๋๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๋ ์บก์ฒ ์คํฌ๋ฆฐ์ท์ ๋๋ค.
ํจํค์ง ๋ฒํธ๋ ์ฒซ ๋ฒ์งธ ์ด์ ํ์๋ฉ๋๋ค. ๋ช
ํ์ฑ์ ์ํด ๋ค์ํ TCP ํ๋ฆ์ ์์์ผ๋ก ๊ตฌ๋ถํ์ต๋๋ค.
ํจํท 328๋ก ์์ํ๋ ๋
น์ ์คํธ๋ฆผ์ ํด๋ผ์ด์ธํธ(172.17.22.150)๊ฐ ์ปจํ
์ด๋(172.17.36.147)์ ๋ํ TCP ์ฐ๊ฒฐ์ ์ค์ ํ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ์ด๊ธฐ ํธ๋์
ฐ์ดํฌ(328-330) ํ ํจํค์ง 331์ด ๊ฐ์ ธ์์ต๋๋ค. HTTP GET /v1/..
โ ๋น์ฌ ์๋น์ค์ ๋ํ ์์ ์์ฒญ. ์ ์ฒด ํ๋ก์ธ์ค์๋ 1ms๊ฐ ๊ฑธ๋ ธ์ต๋๋ค.
ํ์ ์คํธ๋ฆผ(ํจํท 339)์ ์ฐ๋ฆฌ ์๋น์ค๊ฐ Elasticsearch ์ธ์คํด์ค์ HTTP ์์ฒญ์ ๋ณด๋์์ ๋ณด์ฌ์ค๋๋ค(๊ธฐ์กด ์ฐ๊ฒฐ์ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ TCP ํธ๋์ ฐ์ดํฌ๊ฐ ์์ต๋๋ค). 18ms๊ฐ ๊ฑธ๋ ธ์ต๋๋ค.
์ง๊ธ๊น์ง๋ ๋ชจ๋ ๊ฒ์ด ๊ด์ฐฎ์ผ๋ฉฐ ์๊ฐ์ ๋๋ต ์์๋๋ ์ง์ฐ(ํด๋ผ์ด์ธํธ์์ ์ธก์ ํ ๋ 20-30ms)๊ณผ ์ผ์นํฉ๋๋ค.
๊ทธ๋ฌ๋ ํ๋์ ์น์
์๋ 86ms๊ฐ ๊ฑธ๋ฆฝ๋๋ค. ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋ ๊ฑธ๊น์? ํจํท 333์ ํตํด ์ฐ๋ฆฌ ์๋น์ค๋ ๋ค์์๊ฒ HTTP GET ์์ฒญ์ ๋ณด๋์ต๋๋ค. /latest/meta-data/iam/security-credentials
, ๊ทธ๋ฆฌ๊ณ ๊ทธ ์งํ์ ๋์ผํ TCP ์ฐ๊ฒฐ์ ํตํด ๋ ๋ค๋ฅธ GET ์์ฒญ์ด /latest/meta-data/iam/security-credentials/arn:..
.
์ฐ๋ฆฌ๋ ์ถ์ ์ ๋ฐ์ ๊ฑธ์ณ ๋ชจ๋ ์์ฒญ์์ ์ด๊ฒ์ด ๋ฐ๋ณต๋๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ์ค์ ๋ก ์ปจํ ์ด๋์์๋ DNS ํ์ธ์ด ์ฝ๊ฐ ๋๋ฆฝ๋๋ค(์ด ํ์์ ๋ํ ์ค๋ช ์ ๋งค์ฐ ํฅ๋ฏธ๋กญ์ง๋ง ๋ณ๋์ ๊ธฐ์ฌ๋ฅผ ์ํด ์ ์ฅํ๊ฒ ์ต๋๋ค). ๊ธด ์ง์ฐ์ ์์ธ์ ๊ฐ ์์ฒญ์ ๋ํ AWS ์ธ์คํด์ค ๋ฉํ๋ฐ์ดํฐ ์๋น์ค ํธ์ถ ๋๋ฌธ์ธ ๊ฒ์ผ๋ก ๋ฐํ์ก์ต๋๋ค.
๊ฐ์ค 2: AWS์ ๋ํ ๋ถํ์ํ ํธ์ถ
๋ ๋์ ๋ชจ๋์ ์ํจ
/ # curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
arn:aws:iam::<account_id>:role/some_role
๋ ๋ฒ์งธ ์์ฒญ์ ๋ ๋ฒ์งธ ์๋ํฌ์ธํธ์ ์ด ์ธ์คํด์ค์ ๋ํ ์์ ๊ถํ์ ์์ฒญํฉ๋๋ค.
/ # curl http://169.254.169.254/latest/meta-data/iam/security-credentials/arn:aws:iam::<account_id>:role/some_role`
{
"Code" : "Success",
"LastUpdated" : "2012-04-26T16:39:16Z",
"Type" : "AWS-HMAC",
"AccessKeyId" : "ASIAIOSFODNN7EXAMPLE",
"SecretAccessKey" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"Token" : "token",
"Expiration" : "2017-05-17T15:09:54Z"
}
ํด๋ผ์ด์ธํธ๋ ์งง์ ๊ธฐ๊ฐ ๋์ ์ด๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ์ ๊ธฐ์ ์ผ๋ก ์ ์ธ์ฆ์๋ฅผ ๋ฐ์์ผ ํฉ๋๋ค(์ธ์ฆ์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์). Expiration
). ๋ชจ๋ธ์ ๊ฐ๋จํฉ๋๋ค. AWS๋ ๋ณด์์์ ์ด์ ๋ก ์์ ํค๋ฅผ ์์ฃผ ๊ต์ฒดํ์ง๋ง ํด๋ผ์ด์ธํธ๋ ์ ์ธ์ฆ์ ํ๋๊ณผ ๊ด๋ จ๋ ์ฑ๋ฅ ์ ํ๋ฅผ ๋ณด์ํ๊ธฐ ์ํด ๋ช ๋ถ ๋์ ์์ ํค๋ฅผ ์บ์ํ ์ ์์ต๋๋ค.
AWS Java SDK๋ ์ด ํ๋ก์ธ์ค๋ฅผ ๊ตฌ์ฑํ๋ ์ฑ ์์ ๋งก์์ผ ํ์ง๋ง ์ด๋ค ์ด์ ๋ก ์ด๋ฐ ์ผ์ด ๋ฐ์ํ์ง ์์ต๋๋ค.
GitHub์์ ๋ฌธ์ ๋ฅผ ๊ฒ์ํ ํ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
AWS SDK๋ ๋ค์ ์กฐ๊ฑด ์ค ํ๋๊ฐ ๋ฐ์ํ๋ฉด ์ธ์ฆ์๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
- ๋ง๋ฃ์ผ (
Expiration
)์ ๋น ์ง๋คEXPIRATION_THRESHOLD
, 15๋ถ์ผ๋ก ํ๋์ฝ๋ฉ๋์์ต๋๋ค. - ๋ง์ง๋ง ์ธ์ฆ์ ๊ฐฑ์ ์๋ ์ดํ ๋ค์๋ณด๋ค ๋ ๋ง์ ์๊ฐ์ด ๊ฒฝ๊ณผํ์ต๋๋ค.
REFRESH_THRESHOLD
, 60๋ถ ๋์ ํ๋์ฝ๋ฉ๋์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ๋ฐ์ ์ธ์ฆ์์ ์ค์ ๋ง๋ฃ ๋ ์ง๋ฅผ ํ์ธํ๊ธฐ ์ํด ์ปจํ ์ด๋์ EC2 ์ธ์คํด์ค ๋ชจ๋์์ ์์ cURL ๋ช ๋ น์ ์คํํ์ต๋๋ค. ์ปจํ ์ด๋๋ก๋ถํฐ ๋ฐ์ ์ธ์ฆ์์ ์ ํจ ๊ธฐ๊ฐ์ ์ ํํ 15๋ถ์ผ๋ก ํจ์ฌ ์งง์ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค.
์ด์ ๋ชจ๋ ๊ฒ์ด ๋ช ํํด์ก์ต๋๋ค. ์ฒซ ๋ฒ์งธ ์์ฒญ์ ๋ํด ์ฐ๋ฆฌ ์๋น์ค๋ ์์ ์ธ์ฆ์๋ฅผ ๋ฐ์์ต๋๋ค. 15๋ถ ์ด์ ์ ํจํ์ง ์์๊ธฐ ๋๋ฌธ์ AWS SDK๋ ํ์ ์์ฒญ ์ ์ด๋ฅผ ์ ๋ฐ์ดํธํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ๋ชจ๋ ์์ฒญ์์ ๋ฐ์ํ์ต๋๋ค.
์ธ์ฆ์ ์ ํจ๊ธฐ๊ฐ์ด ์งง์์ง ์ด์ ๋ ๋ฌด์์ ๋๊น?
AWS ์ธ์คํด์ค ๋ฉํ๋ฐ์ดํฐ๋ Kubernetes๊ฐ ์๋ EC2 ์ธ์คํด์ค์ ์๋ํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ๋ฐ๋ฉด์ ์ฐ๋ฆฌ๋ ์ ํ๋ฆฌ์ผ์ด์
์ธํฐํ์ด์ค๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ์ง ์์์ต๋๋ค. ์ด๋ฅผ ์ํด ์ฐ๋ฆฌ๋
KIAM์ ํฌ๋์ ๋จ๊ธฐ ์ธ์ฆ์๋ฅผ ์ ๊ณตํฉ๋๋ค. ํฌ๋์ ํ๊ท ์๋ช
์ด EC2 ์ธ์คํด์ค๋ณด๋ค ์งง๋ค๋ ์ ์ ๊ณ ๋ คํ๋ฉด ์ด๋ ์๋ฏธ๊ฐ ์์ต๋๋ค. ์ธ์ฆ์์ ๊ธฐ๋ณธ ์ ํจ ๊ธฐ๊ฐ
๊ฒฐ๊ณผ์ ์ผ๋ก ๋ ๊ธฐ๋ณธ๊ฐ์ ์๋ก ๊ฒน์ณ ๋์ผ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ณต๋ ๊ฐ ์ธ์ฆ์๋ 15๋ถ ํ์ ๋ง๋ฃ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ AWS Java SDK๋ ๋ง๋ฃ ๋ ์ง๊น์ง 15๋ถ ๋ฏธ๋ง ๋จ์ ์ธ์ฆ์๋ฅผ ๊ฐ์ ๋ก ๊ฐฑ์ ํฉ๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์์ ์ธ์ฆ์๋ ๊ฐ ์์ฒญ๋ง๋ค ๊ฐ์ ๋ก ๊ฐฑ์ ๋์ด์ผ ํ๋ฉฐ, ์ด๋ก ์ธํด AWS API์ ๋ํ ๋ช ๋ฒ์ ํธ์ถ์ด ์๋ฐ๋๊ณ ์ง์ฐ ์๊ฐ์ด ํฌ๊ฒ ์ฆ๊ฐํฉ๋๋ค. AWS Java SDK์์ ์ฐ๋ฆฌ๋ ๋ฐ๊ฒฌํ์ต๋๋ค.
ํด๊ฒฐ์ฑ ์ ๊ฐ๋จํ๋ค๋ ๊ฒ์ด ๋ฐํ์ก์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ ํจ ๊ธฐ๊ฐ์ด ๋ ๊ธด ์ธ์ฆ์๋ฅผ ์์ฒญํ๋๋ก KIAM์ ์ฌ๊ตฌ์ฑํ์ต๋๋ค. ์ด๋ฐ ์ผ์ด ๋ฐ์ํ์ AWS ๋ฉํ๋ฐ์ดํฐ ์๋น์ค์ ์ฐธ์ฌ ์์ด ์์ฒญ์ด ํ๋ฅด๊ธฐ ์์ํ๊ณ ์ง์ฐ ์๊ฐ์ EC2๋ณด๋ค ํจ์ฌ ๋ฎ์ ์์ค์ผ๋ก ๋จ์ด์ก์ต๋๋ค.
์กฐ์ฌ ๊ฒฐ๊ณผ
๋ง์ด๊ทธ๋ ์ด์ ๊ฒฝํ์ ๋ฐ๋ฅด๋ฉด ๋ฌธ์ ์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์์ธ ์ค ํ๋๋ Kubernetes๋ ํ๋ซํผ์ ๋ค๋ฅธ ์์์ ๋ฒ๊ทธ๊ฐ ์๋๋๋ค. ๋ํ ์ฐ๋ฆฌ๊ฐ ์ด์ํ๋ ๋ง์ดํฌ๋ก์๋น์ค์ ๊ทผ๋ณธ์ ์ธ ๊ฒฐํจ์ ํด๊ฒฐํ์ง ์์ต๋๋ค. ๋จ์ํ ์๋ก ๋ค๋ฅธ ์์๋ฅผ ํฉ์น๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ด์ ์ ์๋ก ์ํธ์์ฉํ ์ ์ด ์๋ ๋ณต์กํ ์์คํ ์ ํผํฉํ์ฌ ๋ ํฐ ๋จ์ผ ์์คํ ์ ํ์ฑํ ๊ฒ์ผ๋ก ๊ธฐ๋ํฉ๋๋ค. ์์, ์์๊ฐ ๋ง์์๋ก ์ค๋ฅ์ ์ฌ์ง๊ฐ ๋ง์์ง๊ณ ์ํธ๋กํผ๋ ๋์์ง๋๋ค.
์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ๊ธด ์ง์ฐ ์๊ฐ์ Kubernetes, KIAM, AWS Java SDK ๋๋ ๋ง์ดํฌ๋ก์๋น์ค์ ๋ฒ๊ทธ๋ ์๋ชป๋ ๊ฒฐ์ ์ผ๋ก ์ธํ ๊ฒ์ด ์๋๋๋ค. ์ด๋ KIAM๊ณผ AWS Java SDK์ ๋ ๊ฐ์ง ๋ ๋ฆฝ์ ์ธ ๊ธฐ๋ณธ ์ค์ ์ ๊ฒฐํฉํ ๊ฒฐ๊ณผ์์ต๋๋ค. ๊ฐ๋ณ์ ์ผ๋ก ์ดํด๋ณด๋ฉด ๋ ๋งค๊ฐ๋ณ์, ์ฆ AWS Java SDK์ ํ์ฑ ์ธ์ฆ์ ๊ฐฑ์ ์ ์ฑ ๊ณผ KAIM์ ์งง์ ์ธ์ฆ์ ์ ํจ ๊ธฐ๊ฐ์ด ๋ชจ๋ ์๋ฏธ๊ฐ ์์ต๋๋ค. ํ์ง๋ง ํฉ์น๋ฉด ๊ฒฐ๊ณผ๋ฅผ ์์ธกํ ์ ์๊ฒ ๋ฉ๋๋ค. ๋ ๊ฐ์ ๋ ๋ฆฝ์ ์ด๊ณ ๋ ผ๋ฆฌ์ ์ธ ์๋ฃจ์ ์ ๊ฒฐํฉํ ๋ ์๋ฏธ๊ฐ ์์ ํ์๋ ์์ต๋๋ค.
๋ฒ์ญ๊ฐ์ ์ถ์
AWS IAM์ Kubernetes์ ํตํฉํ๊ธฐ ์ํ KIAM ์ ํธ๋ฆฌํฐ์ ์ํคํ
์ฒ์ ๋ํด ์์ธํ ์์๋ณผ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ ๋ธ๋ก๊ทธ์์๋ ์ฝ์ด๋ณด์ธ์:
- ยซ
ํ๋ก๋์ ์์์ Kubernetes ์คํจ์ ๋ํ 3๊ฐ์ง ์ด์ผ๊ธฐ: ๋ฐ์นํ์ฑ, ์ฐ์ํ ์ข ๋ฃ, ์นํ "; - ยซ
Kubernetes์ Pod ์ฐ์ ์์๊ฐ Grafana Labs์ ๊ฐ๋ ์ค์ง ์๊ฐ์ ์ด๋ํ ๋ฐฉ๋ฒ "; - ยซ
์ฟ ๋ฒ๋คํฐ์ค ์ด์์ ์ฌ๋ฏธ์๋ ์์คํ ๋ฒ๊ทธ 6๊ฐ์ง [๋ฐ ํด๋น ์๋ฃจ์ ] "; - ยซ
SRE ์ผ์์ํ์ ๋ํ 6๊ฐ์ง ์ค์ฉ์ ์ธ ์ด์ผ๊ธฐ ".
์ถ์ฒ : habr.com