ํต์ฌ ์์ฝ
์ฟ ๋ฒ๋คํฐ์ค ์์ Kafka๋ฅผ ์ฌ๋ฆฌ๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ ๋ ๊ฐ๋์ ๋๋ค. ํ๋๋ Bitnami Helm ์ฐจํธ๋ก "์ค์น ํจํค์ง์ฒ๋ผ ํ ๋ฒ ์ฐ์ด๋ด๋" ๋ฐฉ์์ด๊ณ , ๋ค๋ฅธ ํ๋๋ Strimzi ์คํผ๋ ์ดํฐ๋ก "ํด๋ฌ์คํฐ ์์ ์์ฃผํ๋ ๊ด๋ฆฌ ๋ก๋ด์๊ฒ ์ด์์ ๋งก๊ธฐ๋" ๋ฐฉ์์ ๋๋ค. ๋์ ๊ฐ์ Kafka๋ฅผ ์ฌ๋ฆฌ์ง๋ง ์ฌ์ ์์ฒด๊ฐ ๋ค๋ฆ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์ฆ Kafka๋ ZooKeeper ์์ด ๋๋ KRaft ๋ชจ๋๊ฐ ๊ธฐ๋ณธ์ด ๋์๋๋ฐ, ์ด๊ฒ ๋ฌด์์ด๊ณ ์ ๋ฐ๋์๋์ง๋ฅผ ๋จผ์ ์ดํดํ๋ฉด ๋ ๋ฐฉ์์ ์ฐจ์ด๊ฐ ํจ์ฌ ๋๋ ทํด์ง๋๋ค.
์ด ๊ธ์์๋ โ KRaft๊ฐ ๋ฌด์์ธ์ง โก Helm๊ณผ Operator์ ์๋ฆฌ ์ฐจ์ด โข Strimzi์ Bitnami๋ฅผ ๊ฐ๊ฐ ์ด๋ป๊ฒ ์ค์นํ๊ณ ์ด์ํ๋์ง โฃ ์ธ์ ๋ฌด์์ ๊ณจ๋ผ์ผ ํ๋์ง๋ฅผ ์์๋๋ก ์ ๋ฆฌํฉ๋๋ค.
1. ๋จผ์ , Kafka๊ฐ K8s์์ ๊น๋ค๋ก์ด ์ด์
Kafka๋ ๊ทธ๋ฅ ๋ ์๊ธฐ๋ง ํ๋ฉด ๋๋ ๋ฌด์ํ(stateless) ์น ์๋ฒ๊ฐ ์๋๋๋ค. ์ํ๋ฅผ ๊ฐ์ง(stateful) ๋ถ์ฐ ์์คํ ์ ๋๋ค.
๋น์ ํ์๋ฉด, ๋ฌด์ํ ์น ์๋ฒ๋ ํธ์์ ์๋ฐ์ ๊ฐ์ต๋๋ค. ๋๊ฐ ์๋ ๋๊ฐ์ด ์ผํ๊ณ , ํ ๋ช ์ด ๋น ์ง๋ฉด ๋ค๋ฅธ ์ฌ๋์ผ๋ก ๋ฐ๋ก ๋์ฒด๋ฉ๋๋ค. ์ง๋, ๊ธฐ์ต๋ ์์ต๋๋ค. ๋ฐ๋ฉด Kafka ๋ธ๋ก์ปค๋ ์๊ธฐ ์ ์ฉ ์ฌ๋ฌผํจ์ ๊ฐ์ง ์ฐฝ๊ณ ์ง์์ ๋๋ค. ๊ฐ์ ๋งก์ ์ง(๋ฐ์ดํฐ)์ ์๊ธฐ ์ฌ๋ฌผํจ(๋์คํฌ)์ ๋ณด๊ดํ๊ณ ์์ด์, ์ ๊น ์๋ฆฌ๋ฅผ ๋น์ ๋ค ๋์์๋ ๋ฐ๋์ ์๊ธฐ ์ฌ๋ฌผํจ ์์ผ๋ก ๋์์์ผ ํฉ๋๋ค. ์๋ฌด ์๋ฆฌ์๋ ์๋ก ์์ผ๋ฉด ๊ทธ ์ฌ๋์ด ๋ณด๊ดํ๋ ์ง์ ๋ชป ์ฐพ์ต๋๋ค.
- ๊ฐ ๋ธ๋ก์ปค๋ ์๊ธฐ ๋์คํฌ์ ๋ฉ์์ง ๋ก๊ทธ๋ฅผ ์์ต๋๋ค. ๊ทธ๋์ ํ๋๊ฐ ์ฃฝ์๋ค ์ด์๋๋ ๊ฐ์ ๋์คํฌ(PVC)์ ๋ค์ ๋ถ์ด์ผ ํฉ๋๋ค(์ฌ๋ฌผํจ ์์ผ๋ก ๋ณต๊ท). ์๋ฌด ๋ฐ์๋ ์๋ก ๋ ์ ์ ๋ฉ๋๋ค.
- ๋ธ๋ก์ปค๋ง๋ค ๊ณ ์ ํ ID์ ์์ ์ ์ธ ๋คํธ์ํฌ ์ด๋ฆ์ด ํ์ํฉ๋๋ค.
kafka-0,kafka-1์ฒ๋ผ ๋ฒํธ๊ฐ ๊ณ ์ ๋ผ์ผ ์๋ก๋ฅผ ์ฐพ์ต๋๋ค. ์ง์๋ง๋ค ์ฌ๋ฒ๊ณผ ์๋ฆฌ ๋ฒํธ๊ฐ ๊ณ ์ ๋ ์ ์ ๋๋ค. - ์ ๊ทธ๋ ์ด๋ํ ๋ ์์๊ฐ ์ค์ํฉ๋๋ค. ํ๊บผ๋ฒ์ ๋ค ๋ด๋ ธ๋ค ์ฌ๋ฆฌ๋ฉด ๋ฐ์ดํฐ๊ฐ ๊นจ์ง๊ฑฐ๋ ๋ฉ์์ง๊ฐ ์ ์ค๋ ์ ์์ต๋๋ค. ์ฐฝ๊ณ ์ง์์ ์ ์ ๋์์ ํด๊ทผ์ํค๋ฉด ๊ทธ ์๊ฐ ๋ค์ด์จ ์ง์ ์๋ฌด๋ ๋ชป ๋ฐ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
๊ทธ๋์ K8s์์๋ Deployment๊ฐ ์๋๋ผ StatefulSet(์์·๊ณ ์ ์ด๋ฆ·๊ณ ์ ๋์คํฌ๋ฅผ ๋ณด์ฅํ๋ ๋ฆฌ์์ค)์ผ๋ก ๋์ฐ๋ ๊ฒ ์ ์์ ๋๋ค. ๋ฐ๋ก ์ด "์ํ ๊ด๋ฆฌ"์ ๋ฌด๊ฒ ๋๋ฌธ์, Kafka๋ฅผ ์ด๋ป๊ฒ ๋ฐฐํฌ·์ด์ํ๋๋๊ฐ ์ค์ํ ์ ํ์ง๊ฐ ๋ฉ๋๋ค.
์ฐธ๊ณ : ๋จ์ํ
apache/kafka์ด๋ฏธ์ง๋ฅผ Deployment ํ๋๋ก ๋์ฐ๋ ๊ตฌ์ฑ๋ ์๊ธด ํฉ๋๋ค. ๊ฐ๋ฐ์ฉ ๋จ์ผ ์ธ์คํด์ค๋ก๋ ๋์ํ์ง๋ง, ๋์คํฌ ์์์ฑ·์์ ๋ณด์ฅ·๊ณ ๊ฐ์ฉ์ฑ์ด ์์ด์ ์ด์์๋ ๋ถ์ ํฉํฉ๋๋ค. ์ด ๊ธ์์ ๋ค๋ฃจ๋ Strimzi/Bitnami๋ ๋ ๋ค StatefulSet ๊ธฐ๋ฐ์ ์ ๋๋ก ๋ ๋ฐฉ์์ ๋๋ค.
2. KRaft๋ ๋ฌด์์ธ๊ฐ
์๋ ๋ฐฉ์: ZooKeeper
์์ Kafka๋ ํผ์ ์ด๋ฆผ์ ๋ชป ํ์ต๋๋ค. ๋ฉํ๋ฐ์ดํฐ(๋ธ๋ก์ปค๊ฐ ๋ช ๋ ์ด์์๋์ง, ํ ํฝ์ด ๋ช ๊ฐ์ธ์ง, ํํฐ์ ๋ฆฌ๋๊ฐ ๋๊ตฌ์ธ์ง, ๊ถํ ์ค์ ์ ์ด๋ค์ง)๋ฅผ ์๊ธฐ๊ฐ ๊ด๋ฆฌํ์ง ๋ชปํ๊ณ , ZooKeeper๋ผ๋ ๋ณ๋ ์์คํ ์ ๋งก๊ฒผ์ต๋๋ค.
๋น์ ํ์๋ฉด, Kafka๋ "์ฅ์ฌํ๋ ๊ฐ๊ฒ"์ด๊ณ ZooKeeper๋ ๊ทธ ์ ๊ฑด๋ฌผ์ ๋ณ๋ ๊ด๋ฆฌ์ฌ๋ฌด์์์ต๋๋ค. ๋๊ฐ ์ ์ฃผํ๋์ง, ๋๊ฐ ๋ํ์ธ์ง ๊ฐ์ ์ฅ๋ถ๋ฅผ ์ ๋ถ ๊ด๋ฆฌ์ฌ๋ฌด์๊ฐ ๋ค๊ณ ์์๋ ์ ์ ๋๋ค. ๊ฐ๊ฒ๋ฅผ ์ด์ํ๋ ค๋ฉด ๊ด๋ฆฌ์ฌ๋ฌด์ ๊ฑด๋ฌผ์ ๋ฐ๋ก ์ง๊ณ , ๋ฐ๋ก ๊ด๋ฆฌํ๊ณ , ๋ฐ๋ก ์ฅ์ ์ ๋๋นํด์ผ ํ์ต๋๋ค.
์ด ๊ตฌ์กฐ์ ๋ฌธ์ :
- ์ด์ํด์ผ ํ ์์คํ ์ด ๋์ด ๋ฉ๋๋ค(Kafka + ZooKeeper). ๊ฐ๊ฐ ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ๊ณ ๋ชจ๋ํฐ๋งํด์ผ ํฉ๋๋ค.
- ZooKeeper๊ฐ ํ๋ค๋ฆฌ๋ฉด Kafka ์ ์ฒด๊ฐ ํ๋ค๋ฆฝ๋๋ค.
- ๋ฉํ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ZooKeeper๋ฅผ ๊ฑฐ์ณ์ผ ํด์, ํด๋ฌ์คํฐ๊ฐ ์ปค์ง๋ฉด ๋๋ ค์ง๊ณ ํ๊ณ๊ฐ ์๊ฒผ์ต๋๋ค.
์๋ก์ด ๋ฐฉ์: KRaft (Kafka Raft)
KRaft๋ ์ด๋ฆ ๊ทธ๋๋ก "Kafka + Raft" ์
๋๋ค. ZooKeeper๋ฅผ ์์ ๊ณ , Kafka๊ฐ ์๊ธฐ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ง์ ๊ด๋ฆฌํ๋๋ก ๋ฐ๊พผ ๋ชจ๋์
๋๋ค. ๋ฉํ๋ฐ์ดํฐ๋ Kafka ๋ด๋ถ์ ํน์ ํ ํฝ(__cluster_metadata)์ ์ ์ฅ๋๊ณ , Raft๋ผ๋ ํฉ์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ฌ๋ฌ ๋
ธ๋๊ฐ ์ผ๊ด๋๊ฒ ๋๊ธฐํํฉ๋๋ค.
๋น์ ํ์๋ฉด, ๋ณ๋ ๊ด๋ฆฌ์ฌ๋ฌด์ ๊ฑด๋ฌผ์ ์์ ๊ณ ๊ฐ๊ฒ ๊ฑด๋ฌผ ์์ ๊ด๋ฆฌ์ค์ ๋ด์ฅํ ๊ฒ์ ๋๋ค. ์ ์ฃผ์ ์ฅ๋ถ๋ฅผ ๊ฑด๋ฌผ์ด ์ค์ค๋ก ๊ด๋ฆฌํฉ๋๋ค. ๊ด๋ฆฌํ ๊ฑด๋ฌผ์ด ๋์์ ํ๋๋ก ์ค์์ต๋๋ค.
์ฌ๊ธฐ์ ์ ๊ฐ๋ ์ด ๋ฑ์ฅํฉ๋๋ค. KRaft์์๋ ๋ ธ๋๊ฐ ์ญํ (role) ์ ๊ฐ์ง๋๋ค.
- controller(์ปจํธ๋กค๋ฌ): ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ํฉ์์ ์ฐธ์ฌํ๋ ์ญํ . ๊ณผ๊ฑฐ ZooKeeper๊ฐ ํ๋ ์ผ์ ๋์ ํฉ๋๋ค. ๋ณดํต ํ์ ๋(3, 5๋)๋ก ๊ตฌ์ฑํด ๊ณผ๋ฐ ํฉ์(quorum)๋ฅผ ์ด๋ฃน๋๋ค.
- broker(๋ธ๋ก์ปค): ์ค์ ๋ฉ์์ง๋ฅผ ๋ฐ๊ณ ์๊ณ ๋ด์ฃผ๋ ์ญํ . ์ฐ๋ฆฌ๊ฐ ์๋ ๊ทธ Kafka์ ๋ณธ์ ์ ๋๋ค.
๋น์ ํ์๋ฉด, ํ ํ์ฌ๋ก ๋ณด๋ฉด ๋ฉ๋๋ค. ์ปจํธ๋กค๋ฌ๋ ์ด์ฌํ/์ด๋ฌดํ์ ๋๋ค. ์ง์ ๋ฌผ๊ฑด์ ๋๋ฅด์ง ์์ง๋ง, "๋๊ฐ ์ฐ๋ฆฌ ์ง์์ธ์ง", "์ง๊ธ ํ์ฅ์ด ๋๊ตฌ์ธ์ง", "์กฐ์ง๋๊ฐ ์ด๋ป๊ฒ ๋๋์ง"๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ๋ธ๋ก์ปค๋ ํ์ฅ ์ง์์ ๋๋ค. ์ค์ ๋ก ์ง(๋ฉ์์ง)์ ๋ฐ๊ณ ์๊ณ ๋ด์ค๋๋ค. ์ปจํธ๋กค๋ฌ๋ฅผ ํ์๋ก ๋๋ ์ด์ ๋ ์ด์ฌํ ์๊ฒฐ์ ๊ณผ๋ฐ์ผ๋ก ํ๊ธฐ ์ํด์์ ๋๋ค. 3๋ช ์ค 2๋ช ์ด ๋์ํ๋ฉด ๊ฒฐ์ ์ด ํ์ ๋๋, ํ ๋ช ์ด ์๋ฆฌ๋ฅผ ๋น์๋ ํ์ฌ ์์ฌ๊ฒฐ์ ์ด ๋ฉ์ถ์ง ์์ต๋๋ค.
ํ ๋
ธ๋๊ฐ controller์ broker๋ฅผ ๊ฒธํ ์๋ ์๊ณ (์๊ท๋ชจ — ์ฌ์ฅ์ด ํ์ฅ๋ ๋ฐ๋ 1์ธ ํ์ฌ), ๋ถ๋ฆฌํ ์๋ ์์ต๋๋ค(์ด์ — ๊ฒฝ์์ง๊ณผ ํ์ฅ์ง์ด ๋๋ ํฐ ํ์ฌ). ๊ทธ๋์ K8s์์ KRaft Kafka๋ฅผ ๋์ฐ๋ฉด ...-controller-0, ...-broker-0 ๊ฐ์ ํ๋๊ฐ ๋ฐ๋ก ๋ณด์ด๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
Raft๊ฐ ๊ถ๊ธํ๋ค๋ฉด: ์ฌ๋ฌ ๋ ธ๋๊ฐ "์ง๊ธ ๋ฆฌ๋๊ฐ ๋๊ตฌ๋ค", "์ด ๋ณ๊ฒฝ์ ํ์ ํ๋ค"๋ฅผ ๊ณผ๋ฐ ํฌํ๋ก ํฉ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ํ์์์ ์๊ฑด์ ๊ณผ๋ฐ ์๋ค๊ธฐ๋ก ํต๊ณผ์ํค๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ์ฐธ์์ ์ ๋ฐ ๋๊ฒ ์ฐฌ์ฑํด์ผ ํ์ ๋๋ฏ๋ก, ํ ๋ช ์ด ์๋ฆฌ๋ฅผ ๋น์ฐ๊ฑฐ๋ ์๊ฒฌ์ด ์๊ฐ๋ ค๋ ํ์ ์ ์ฒด๊ฐ ์ผ๊ด๋ ๊ฒฐ๋ก ์ ์ ์งํฉ๋๋ค. ๋ถ์ฐ ์์คํ ์์ "ํ ๋ช ์ด ์ฃฝ์ด๋ ๋๋จธ์ง๊ฐ ์ผ๊ด๋ ๊ฒฐ์ ์ ์ ์ง"ํ๊ฒ ํด์ฃผ๋ ํ์ค์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค.
์์ฝํ๋ฉด, KRaft = ZooKeeper๋ฅผ ๋ผ์ด๋ธ ์๋ฆฝํ Kafka์ด๊ณ , 2024๋ ์ดํ Kafka(ํนํ 4.0๋ถํฐ)๋ KRaft๊ฐ ๊ธฐ๋ณธ์ด์ ์ฌ์ค์ ์ ์ผํ ๊ฒฝ๋ก๊ฐ ๋์์ต๋๋ค. Strimzi๋ Bitnami๋ ์์ฆ ๋ฒ์ ์ ๋ค KRaft๋ก ๋์ํฉ๋๋ค.
3. Helm vs Operator: ๋ ์ฌ์์ ์ฐจ์ด
์ด์ ๋ณธ๋ก ์ ๋๋ค. Bitnami๋ Helm ์ฐจํธ, Strimzi๋ Operator์ ๋๋ค. ์ด ๋์ "Kafka๋ฅผ ๊น๋ ๋๊ตฌ"๋ผ๋ ์ ์ ๊ฐ์ง๋ง, ๋์ ์๋ฆฌ๊ฐ ๊ทผ๋ณธ์ ์ผ๋ก ๋ค๋ฆ ๋๋ค.
Helm = ์ค์น ํ ํ๋ฆฟ (ํ ๋ฒ ์ฐ์ด๋)
Helm์ YAML ํ
ํ๋ฆฟ ์์ง + ํจํค์ง ๋งค๋์ ์
๋๋ค. values.yaml์ด๋ผ๋ ์ค์ ๊ฐ์ ๋ฃ์ผ๋ฉด, ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ง ํ
ํ๋ฆฟ์ ๊ฐ์ ์ฑ์ K8s ๋งค๋ํ์คํธ(StatefulSet, Service, ConfigMap...)๋ฅผ ๋ ๋๋งํด์ ํด๋ฌ์คํฐ์ ์ ์ฉํฉ๋๋ค. ๊ทธ๊ฑธ๋ก ๋์
๋๋ค.
๋น์ ํ์๋ฉด, Helm์ ์ด์ผ์ ๊ฐ๊ตฌ ์กฐ๋ฆฝ๊ณผ ๊ฐ์ต๋๋ค. ์ค๋ช ์๋๋ก ํ ๋ฒ ์กฐ๋ฆฝํ๋ฉด ๊ฐ๊ตฌ๊ฐ ์์ฑ๋ฉ๋๋ค. ํ์ง๋ง ๊ทธ ๋ค์ ๋์ฌ๊ฐ ํ๋ฆฌ๊ฑฐ๋ ์๋์ด ๋น ์ ธ๋ ๊ฐ๊ตฌ๊ฐ ์ค์ค๋ก ๊ณ ์น์ง ์์ต๋๋ค. ์ฌ๋์ด ๋ค์ ์์ ์๋ด์ผ ํฉ๋๋ค.
์๋ฐ ๊ฐ๋ฐ์์๊ฒ๋ Maven archetype์ด ๊ฐ๊น์ต๋๋ค. ๋ช ๋ น ํ ๋ฒ์ผ๋ก ํ๋ก์ ํธ ๋ผ๋๋ฅผ ์์ฑํด์ฃผ์ง๋ง, ์์ฑ๋ ๋ค์๋ถํฐ๋ ๊ด์ฌํ์ง ์์ต๋๋ค. ์ดํ ๋ฌด์จ ์ผ์ด ์๊ธฐ๋ , ๋ค์์ ์ฌ๋์ด
helm upgrade๋ฅผ ์คํํ๊ธฐ ์ ๊น์ง Helm์ ์ ๋ค์ด ์์ต๋๋ค.
์ฆ Helm์ "์ค์น ์์ ์ ํ ๋ฒ ์ผํ๋" ๋๊ตฌ์ ๋๋ค. ์ค์น ํ์ ์ด์(์ ๊ทธ๋ ์ด๋, ์ฅ์ ๋ณต๊ตฌ, ๋ฆฌ๋ฐธ๋ฐ์ฑ)์ ์ ๋ถ ์ฌ๋ ๋ชซ์ ๋๋ค.
Operator = ์์ฃผํ๋ ๊ด๋ฆฌ ๋ก๋ด (๊ณ์ ๋ง์ถฐ์ค)
Operator๋ ํด๋ฌ์คํฐ ์์์ ๊ณ์ ๋๋ ์ปจํธ๋กค๋ฌ์
๋๋ค. Kafka๋ผ๋ CRD(์ปค์คํ
๋ฆฌ์์ค) ์ "๋ด๊ฐ ์ํ๋ ์ํ"(๋ธ๋ก์ปค 3๋, Kafka 3.9.0, TLS ์ผ๊ธฐ ๋ฑ)๋ฅผ ์ ์ธํด๋๋ฉด, ์คํผ๋ ์ดํฐ๊ฐ ํ์ฌ ์ํ๋ฅผ ๋์์์ด ๊ฐ์ํ๋ฉด์ ์ํ๋ ์ํ๋ก ๋ง์ถฐ์ค๋๋ค. ์ด๊ฑธ ๋ฆฌ์ปจ์ค๋ ์ด์
(reconciliation, ์กฐ์ ๋ฃจํ)์ด๋ผ๊ณ ํฉ๋๋ค.
๋น์ ํ์๋ฉด, Operator๋ ์จ๋์กฐ์ ๊ธฐ(thermostat) ์ ๊ฐ์ต๋๋ค. "์ค๋ด 24๋"๋ผ๊ณ ์ค์ ํด๋๋ฉด, ์จ๋์กฐ์ ๊ธฐ๋ ๊ณ์ ์จ๋๋ฅผ ์ฌ๋ฉด์ ๋์ฐ๋ฉด ๋๋ฐฉ์, ์ถ์ฐ๋ฉด ๋๋ฐฉ์ ์ผญ๋๋ค. ์ฌ๋์ด ๋งค๋ฒ ์์ด์ปจ์ ์ผ๊ณ ๋์ง ์์๋ ๋ฉ๋๋ค. ์ค์ ๊ฐ(์ํ๋ ์ํ)๋ง ์ ํด๋๋ฉด ๊ธฐ๊ณ๊ฐ ์์์ ํ์ค์ ๊ฑฐ๊ธฐ์ ๋ง์ถฅ๋๋ค. Strimzi๋ "๋ธ๋ก์ปค 3๋, ๋ฒ์ 3.9.0"์ด๋ผ๊ณ ์ ์ด๋๋ฉด ๊ณ์ ๊ทธ ์ํ๋ฅผ ์ ์งํฉ๋๋ค.
๋ ์ต์ํ ์๋ก๋ ArgoCD๊ฐ ์ ํํ ๊ฐ์ ์๋ฆฌ์ ๋๋ค. ArgoCD๋ Git์ ์ ํ "์ํ๋ ์ํ"๋ฅผ ๋ณด๊ณ , ํด๋ฌ์คํฐ์ ์ค์ ์ํ๊ฐ ์ด๊ธ๋๋ฉด ์๋์ผ๋ก ๋ง์ถฐ์ค๋๋ค(sync). Strimzi๋ ๊ทธ ๋์์ด Git์ด ์๋๋ผ
KafkaCRD์ผ ๋ฟ, "์ํ๋ ์ํ๋ฅผ ์ ์ธ → ์ปจํธ๋กค๋ฌ๊ฐ ๊ณ์ ๋ง์ถค" ์ด๋ผ๋ ๊ณจ๊ฒฉ์ด ๋๊ฐ์ต๋๋ค. ํ๋ง๋๋ก Strimzi๋ Kafka ์ ์ฉ ArgoCD๋ผ๊ณ ๋ด๋ ๋ฌด๋ฐฉํฉ๋๋ค.์๋ฐ/์คํ๋ง ๊ฐ๋ฐ์์๊ฒ๋, Operator๊ฐ ํด๋ฌ์คํฐ์ ์์ฃผํ๋ ๋ฌดํ ๋ฃจํํ ์ปจํธ๋กค๋ฌ์ ๋๋ค.
@Scheduled๋ก ๋์์์ด ๋๋ ์์ ์ด "์ง๊ธ ์ํ"์ "์ํ๋ ์ํ(์ค์ )"๋ฅผ ๋น๊ตํด ์ฐจ์ด๋ฅผ ๋ฉ์ฐ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. CRD๋ ๊ทธ ์ปจํธ๋กค๋ฌ๊ฐ ๋ฐ๋ผ๋ณด๋ ์ปค์คํ ์ํฐํฐ/์ค์ ์ด๋ผ๊ณ ๋ณด๋ฉด ๋ฉ๋๋ค.
์ฐจ์ด๋ฅผ ํ ๋ฌธ์ฅ์ผ๋ก:
- Helm: "์ด๋ ๊ฒ ์ค์นํด์ค" → ์ค์นํ๊ณ ๋.
- Operator: "์ด ์ํ๋ฅผ ์ ์งํด์ค" → ๊ณ์ ์ง์ผ๋ณด๋ฉฐ ์ ์ง.
์ด ์ฐจ์ด๊ฐ ๋ชจ๋ ์ฅ๋จ์ ์ ๋ฟ๋ฆฌ์ ๋๋ค.
4. Bitnami๋ก Kafka ์ค์นํ๊ธฐ
์ค์น ์๋ฆฌ
Bitnami๋ Kafka์ฉ Helm ์ฐจํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. KRaft ๋ชจ๋๋ฅผ ๊ธฐ๋ณธ์ผ๋ก, controller์ broker๋ฅผ ๋ถ๋ฆฌํ StatefulSet ๊ตฌ์ฑ์ ๋ง๋ค์ด์ค๋๋ค.
1) ์ฐจํธ ์ถ๊ฐ / ํ์ธ
# Bitnami๋ OCI ๋ ์ง์คํธ๋ฆฌ๋ก ์ ๊ณต๋ฉ๋๋ค
helm show values oci://registry-1.docker.io/bitnamicharts/kafka > kafka-values.yaml
2) values.yaml ์์ฑ
# kafka-values.yaml (ํต์ฌ๋ง ๋ฐ์ท)
controller:
replicaCount: 3 # KRaft ์ปจํธ๋กค๋ฌ 3๋ (๊ณผ๋ฐ ํฉ์)
persistence:
enabled: true
size: 8Gi # ๊ฐ ์ปจํธ๋กค๋ฌ ๋์คํฌ
broker:
replicaCount: 3 # ๋ธ๋ก์ปค 3๋
persistence:
enabled: true
size: 20Gi
listeners:
client:
protocol: PLAINTEXT # ๊ฐ๋ฐ์ฉ. ์ด์์ SASL/TLS ๊ถ์ฅ
kraft:
enabled: true # KRaft ๋ชจ๋ (์์ฆ์ ๊ธฐ๋ณธ๊ฐ)
3) ์ค์น
helm install devops-kafka \
oci://registry-1.docker.io/bitnamicharts/kafka \
-n devops-infra --create-namespace \
-f kafka-values.yaml
์ค์นํ๋ฉด ์ด๋ฐ ํ๋๊ฐ ๋น๋๋ค.
devops-kafka-controller-0 1/1 Running
devops-kafka-controller-1 1/1 Running
devops-kafka-controller-2 1/1 Running
devops-kafka-broker-0 1/1 Running
devops-kafka-broker-1 1/1 Running
devops-kafka-broker-2 1/1 Running
4) ์ค์ ๋ณ๊ฒฝ / ์ ๊ทธ๋ ์ด๋
๊ฐ์ ๋ฐ๊พธ๋ฉด ์ฌ๋์ด ์ง์ helm upgrade๋ฅผ ์คํํฉ๋๋ค.
# broker๋ฅผ 3 → 5๋๋ก ๋๋ฆฌ๊ณ ์ถ๋ค๋ฉด values ์์ ํ
helm upgrade devops-kafka \
oci://registry-1.docker.io/bitnamicharts/kafka \
-n devops-infra -f kafka-values.yaml
ํ ํฝ ์์ฑ ๊ฐ์ ์ผ์ ์์ ์ Kafka CLI๋ก ์ง์ ํฉ๋๋ค.
kubectl exec -it devops-kafka-broker-0 -n devops-infra -- \
kafka-topics.sh --create --topic my-topic \
--bootstrap-server localhost:9092 \
--partitions 3 --replication-factor 3
์ค์ ๋ก ๊น๋ ค ์๋์ง ํ์ธํ๋ ๋ฒ
๋ฐฐํฌ ๋ฐฉ์์ ๊ตฌ๋ถํ๋ ๊ฒฐ์ ์ ๋จ์๋ ๋ผ๋ฒจ์ ๋๋ค.
kubectl get sts devops-kafka-broker -n devops-infra --show-labels
# app.kubernetes.io/managed-by=Helm
# helm.sh/chart=kafka-32.4.3 ← Bitnami Helm ์ฐจํธ
# image: docker.io/bitnamilegacy/kafka:4.0.0-debian-12-r10
managed-by=Helm + helm.sh/chart=kafka-... ๊ฐ ๋ณด์ด๋ฉด Bitnami(Helm) ๋ฐฉ์์
๋๋ค.
5. Strimzi๋ก Kafka ์ค์นํ๊ธฐ
์ค์น ์๋ฆฌ
Strimzi๋ ๋ ๋จ๊ณ์
๋๋ค. ๋จผ์ ์คํผ๋ ์ดํฐ(๊ด๋ฆฌ ๋ก๋ด)๋ฅผ ์ค์นํ๊ณ , ๊ทธ๋ค์ Kafka CR(์ํ๋ ์ํ)์ ์ ์ธํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ์คํผ๋ ์ดํฐ๊ฐ ์ค์ StatefulSet/ํ๋๋ฅผ ๋ง๋ค์ด๋
๋๋ค.
1) ์คํผ๋ ์ดํฐ ์ค์น
kubectl create namespace kafka
# ์คํผ๋ ์ดํฐ + CRD ํ ๋ฒ์ ์ค์น
kubectl create -f 'https://strimzi.io/install/latest?namespace=kafka' -n kafka
์ด ์์ ์ ํด๋ฌ์คํฐ์ CRD๊ฐ ๋ฑ๋ก๋ฉ๋๋ค. ์ด๊ฒ Strimzi์ ์ง๋ฌธ์ ๋๋ค.
kubectl get crd | grep strimzi
# kafkas.kafka.strimzi.io
# kafkanodepools.kafka.strimzi.io
# kafkatopics.kafka.strimzi.io
# kafkausers.kafka.strimzi.io
2) KafkaNodePool + Kafka CR ์ ์ธ
์์ฆ Strimzi๋ KRaft + NodePool ๋ฐฉ์์ ์๋๋ค. ๋ ธ๋ ํ๋ก controller/broker ์ญํ ์ ๋๋๋๋ค.
# controller ํ
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaNodePool
metadata:
name: controller
labels:
strimzi.io/cluster: my-kafka
spec:
replicas: 3
roles:
- controller # ์ปจํธ๋กค๋ฌ ์ญํ
storage:
type: persistent-claim
size: 8Gi
---
# broker ํ
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaNodePool
metadata:
name: broker
labels:
strimzi.io/cluster: my-kafka
spec:
replicas: 3
roles:
- broker # ๋ธ๋ก์ปค ์ญํ
storage:
type: persistent-claim
size: 20Gi
---
# Kafka ๋ณธ์ฒด (์ํ๋ ์ํ ์ ์ธ)
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
name: my-kafka
annotations:
strimzi.io/node-pools: enabled
strimzi.io/kraft: enabled # KRaft ๋ชจ๋
spec:
kafka:
version: 3.9.0
listeners:
- name: plain
port: 9092
type: internal
tls: false
config:
default.replication.factor: 3
min.insync.replicas: 2
entityOperator:
topicOperator: {} # ํ ํฝ์ CRD๋ก ๊ด๋ฆฌ
userOperator: {} # ์ ์ ๋ฅผ CRD๋ก ๊ด๋ฆฌ
kubectl apply -f kafka-cluster.yaml -n kafka
์ ์ฉํ๋ฉด ์คํผ๋ ์ดํฐ๊ฐ ์์์ StatefulSet๊ณผ ํ๋๋ฅผ ๋ง๋ญ๋๋ค. ์ฌ๋์ด StatefulSet์ ์ง์ ์์ฑํ์ง ์์ต๋๋ค.
3) ํ ํฝ์ "์ ์ธํ"์ผ๋ก ๊ด๋ฆฌ
Strimzi์ ๊ฐ์ ์ ๋๋ค. ํ ํฝ๋ CLI๊ฐ ์๋๋ผ YAML(CRD) ๋ก ๋ง๋ญ๋๋ค.
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic
metadata:
name: my-topic
labels:
strimzi.io/cluster: my-kafka
spec:
partitions: 3
replicas: 3
kubectl apply -f my-topic.yaml -n kafka
์ด๋ฌ๋ฉด ํ ํฝ ์ ์๊ฐ Git์ ๋จ๊ณ , ArgoCD ๊ฐ์ GitOps ๋๊ตฌ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค. "ํ ํฝ๋ ์ฝ๋์ฒ๋ผ" ๋ค๋ฃจ๋ ๊ฒ์ ๋๋ค.
4) ์ค์ ๋ณ๊ฒฝ / ์ ๊ทธ๋ ์ด๋
Kafka CR์ version์ ๋ฐ๊พธ๊ณ kubectl apply ํ๋ฉด ์คํผ๋ ์ดํฐ๊ฐ ์์ ํ ์์๋ก ๋กค๋ง ์
๊ทธ๋ ์ด๋๋ฅผ ์ํํฉ๋๋ค. ์ปจํธ๋กค๋ฌ → ๋ธ๋ก์ปค ์์, ํํฐ์
๋ฆฌ๋ ์์ ์ฑ ํ์ธ๊น์ง ์๋์
๋๋ค. ์ฌ๋์ "์ํ๋ ๋ฒ์ "๋ง ์ ์ต๋๋ค.
๋น์ ํ์๋ฉด, ๋ค๋ฆฌ ๋ณด์๊ณต์ฌ๋ฅผ ์ฐจ์ ํ๋์ฉ ๋ง์ผ๋ฉด์ ํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ์ ์ฐจ์ ์ ๋์์ ๋ง์ผ๋ฉด ๊ตํต์ด ๋ง๋น๋๋, ํ ์ฐจ์ ์ฉ ๋ง๊ณ ์ฐจ๊ฐ ๋น ์ง ๊ฑธ ํ์ธํ ๋ค ๋ค์ ์ฐจ์ ์ผ๋ก ๋์ด๊ฐ๋๋ค. ์คํผ๋ ์ดํฐ๋ ๋ธ๋ก์ปค๋ฅผ ํ ๋์ฉ ๋ด๋ ค ๊ต์ฒดํ๊ณ , ๊ทธ ์ฌ์ด ๋ฐ์ดํฐ๊ฐ ๋ค๋ฅธ ๋ธ๋ก์ปค์ ์์ ํ๊ฒ ์๋์ง ํ์ธํ ๋ค์์ผ ๋ค์ ๋๋ก ๋์ด๊ฐ๋๋ค. Helm์ ์ด "ํ ์ฐจ์ ์ฉ, ์์ ํ์ธํ๋ฉฐ"๋ฅผ ๋ณด์ฅํด์ฃผ์ง ์์์ ์ฌ๋์ด ์ง์ ์ฑ๊ฒจ์ผ ํฉ๋๋ค.
spec:
kafka:
version: 3.9.0 # → 4.0.0 ์ผ๋ก ๋ฐ๊พธ๊ณ apply ํ๋ฉด ์คํผ๋ ์ดํฐ๊ฐ ์์์ ๋กค๋ง
6. ์ ๋ฉด ๋น๊ต
| ํญ๋ชฉ | Bitnami (Helm) | Strimzi (Operator) |
|---|---|---|
| ํจ๋ฌ๋ค์ | ์ค์น ํ ํ๋ฆฟ (ํ ๋ฒ ์ฐ์ด๋) | ์์ฃผ ์ปจํธ๋กค๋ฌ (๊ณ์ ๋ง์ถฐ์ค) |
| ์ค์ ๋ฐฉ์ | values.yaml → ๋ ๋๋ง |
Kafka CRD (์ ์ธํ ๋ฆฌ์์ค) |
| ์ค์ ๋ณ๊ฒฝ ๋ฐ์ | ์ฌ๋์ด helm upgrade ์คํ |
CR ์์ → ์คํผ๋ ์ดํฐ ์๋ ๋ฐ์ |
| ๋กค๋ง ์ ๊ทธ๋ ์ด๋ | StatefulSet ๊ธฐ๋ณธ ๋์์ ์์กด | ์คํผ๋ ์ดํฐ๊ฐ ์์ ์์ ๋ณด์ฅ |
| ํ ํฝ/์ ์ ๊ด๋ฆฌ | CLI ์๋ | KafkaTopic/KafkaUser CRD (GitOps ๊ฐ๋ฅ) |
| TLS ์ธ์ฆ์ | ์ง์ ๋ฐ๊ธ·๊ฐฑ์ | ์คํผ๋ ์ดํฐ๊ฐ ์๋ ๋ฐ๊ธ·์๋ ๊ฐฑ์ (์ฌ๊ถ ์๋ ๊ฐฑ์ ์ฒ๋ผ) |
| ํํฐ์ ๋ฆฌ๋ฐธ๋ฐ์ฑ | ์๋ ์คํฌ๋ฆฝํธ | Cruise Control ๋ด์ฅ (์๋, ์ฐฝ๊ณ ์ง ์ฌ๋ฐฐ์น์ฒ๋ผ) |
| ํ์ต ๊ณก์ | ๋ฎ์ (Helm๋ง ์๋ฉด ๋จ) | ๋์ (CRD·์คํผ๋ ์ดํฐ ์ดํด ํ์) |
| ๋ฆฌ์์ค ์ค๋ฒํค๋ | Kafka ํ๋๋ง | + ์คํผ๋ ์ดํฐ ํ๋ ์์ ์ ์ |
| ๋ค๋ฅธ ๋ฏธ๋ค์จ์ด์ ํต์ผ์ฑ | ๋์ (PostgreSQL·Redis ๋ฑ ๊ฐ์ ์ฐจํธ๊ตฐ) | Kafka ์ ์ฉ |
| ์ ํฉ ๊ท๋ชจ | ์๊ท๋ชจ·๊ฐ๋ฐ·POC | ์ค๋ํ·์ด์·๋ค์ค ํด๋ฌ์คํฐ |
Strimzi ์ฅ๋จ์
์ฅ์ - Day-2 ์ด์(์ ๊ทธ๋ ์ด๋·๋ณต๊ตฌ·๋ฆฌ๋ฐธ๋ฐ์ฑ·์ธ์ฆ์ ๊ฐฑ์ ) ์๋ํ๊ฐ ํต์ฌ ๊ฐ์น์ ๋๋ค. Kafka๋ "์ค์น"๋ณด๋ค "์ด์"์ด ํจ์ฌ ์ด๋ ต์ต๋๋ค. - ํ ํฝ·์ ์ ๋ฅผ ์ ์ธํ์ผ๋ก ๊ด๋ฆฌ → GitOps(ArgoCD)์ ๊ถํฉ์ด ์ข์ต๋๋ค. - CNCF ์ํ๊ณ์ ์ฌ์ค์ ํ์ค Kafka ์คํผ๋ ์ดํฐ๋ก ์ปค๋ฎค๋ํฐ·๋ฌธ์๊ฐ ํํํฉ๋๋ค.
์๋ํ ๋ ๊ฐ์ง๋ฅผ ๋น์ ๋ก ์ง์ผ๋ฉด — - ์ธ์ฆ์ ์๋ ๊ฐฑ์ : ์ฌ๊ถ์ 10๋ ๋ง๋ค ๊ฐฑ์ ํด์ผ ํ๋๋ฐ, ๊น๋นกํ๋ฉด ์ถ๊ตญ ๋น์ผ ๊ณตํญ์์ ๋งํ๋๋ค. TLS ์ธ์ฆ์๋ ๋ง๋ฃ๋๋ฉด ํต์ ์ด ๋๊น๋๋ค. Strimzi๋ ๋ง๋ฃ ์ ์ ์์์ ์ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํด ๋ผ์์ค๋๋ค(์ฌ๊ถ ์๋ ์ฌ๋ฐ๊ธ ์๋น์ค๊ฐ ์๋ ์ ). - ํํฐ์ ๋ฆฌ๋ฐธ๋ฐ์ฑ(Cruise Control): ์ฐฝ๊ณ ์์ ์ง์ด ํน์ ์ ๋ฐ์๋ง ๋ชฐ๋ฆฌ๋ฉด ๊ทธ ์ ๋ฐ๋ง ๋ฌด๋์ง ์ํ์ด ์์ต๋๋ค. ๊ฐ๋ ์ง์ ๊ณ ๋ฅด๊ฒ ์ฌ๋ฐฐ์นํด์ผ ํ๋๋ฐ, Strimzi๋ ์ด ์ฐฝ๊ณ ์ ๋ฆฌ๋ฅผ ์๋์ผ๋ก ํด์ค๋๋ค. Bitnami๋ ์ฌ๋์ด ์ง์ ์คํฌ๋ฆฝํธ๋ก ์ฎ๊ฒจ์ผ ํฉ๋๋ค.
๋จ์ - ๊ฐ๋ ์ด ๋ฌด๊ฒ์ต๋๋ค(CRD, NodePool, ์คํผ๋ ์ดํฐ ๋์ ๋ชจ๋ธ). ์ ๋ฌธ ์ง์ ์ฅ๋ฒฝ์ด ์์ต๋๋ค. - ์คํผ๋ ์ดํฐ ํ๋๊ฐ ์์ ๋ ์์ด ๋ฆฌ์์ค๋ฅผ ์ถ๊ฐ๋ก ์๋๋ค. ์์ ๋จ์ผ ๋ ธ๋์๋ ๋ถ๋ด์ ๋๋ค. - "Kafka ํ๋ ๋์ฐ๊ณ ๋"์ด๋ฉด ๊ณผํฉ๋๋ค.
Bitnami ์ฅ๋จ์
์ฅ์ - ๊ฐ๋จํฉ๋๋ค. helm install ํ ์ค, values.yaml๋ง ๋ง์ง๋ฉด ๋ฉ๋๋ค. - ๊ฐ๋ณ์ต๋๋ค(๋ณ๋ ์คํผ๋ ์ดํฐ ์์). ๊ฐ๋ฐ·POC์ ์ ํฉํฉ๋๋ค. - PostgreSQL·Redis·Jenkins๊น์ง ๊ฐ์ Bitnami ์ฐจํธ๊ตฐ์ผ๋ก ํต์ผํ๊ธฐ ์ข์ต๋๋ค.
๋จ์ - Day-2 ์ด์์ด ์ ๋ถ ์๋์
๋๋ค(์
๊ทธ๋ ์ด๋·๋ฆฌ๋ฐธ๋ฐ์ฑ·์ธ์ฆ์). - ์ค์ ๋ณ๊ฒฝ ์์ ์ฑ(๋กค๋ง ์์ ๋ฑ)์ด ์คํผ๋ ์ดํฐ๋งํผ ๋ณด์ฅ๋์ง ์์ต๋๋ค. - ์ด๋ฏธ์ง ๋๊ฒฐ ์ด์: 2025๋
8์๋ถํฐ Bitnami๊ฐ ๋ฌด๋ฃ ์นดํ๋ก๊ทธ๋ฅผ bitnamilegacy๋ก ์ฎ๊ธฐ๊ณ ๋๊ฒฐํ์ต๋๋ค. ์ฆ bitnamilegacy/kafka ๊ฒฝ๋ก๋ ๋ณด์ ํจ์น๊ฐ ๋ ๋ค์ด์ค์ง ์์ต๋๋ค. ์ด์ ์ด๊ด ์ ๋ฐ๋์ ์ด๋ฏธ์ง ์์ค๋ฅผ ์ฌ๊ฒํ ํด์ผ ํฉ๋๋ค.
7. ์ธ์ ๋ฌด์์ ๊ณจ๋ผ์ผ ํ๋
- ๊ฐ๋ฐ·POC, ๋น ๋ฅด๊ฒ ๋์ฐ๊ณ ์ถ๋ค, ์ด์ ์๋ํ๋ ์์ง ๋ถํ์ → Bitnami(Helm). ๋จ์ํ๊ณ ๊ฐ๋ณ์ต๋๋ค.
- ์ด์, ๋ฌด์ค๋จ ์ ๊ทธ๋ ์ด๋·์๋ ๋ณต๊ตฌ·๋ค์ค ํด๋ฌ์คํฐ·GitOps ํ ํฝ ๊ด๋ฆฌ๊ฐ ํ์ → Strimzi(Operator). ์ด๊ธฐ ํ์ต ๋น์ฉ์ ๋ด๊ณ ์ด์ ์๋ํ๋ฅผ ์ป์ต๋๋ค.
ํ ๊ฐ์ง ํ์ค์ ์ธ ๊ธฐ์ค: "Kafka๋ฅผ ์์ผ๋ก ์ผ๋ง๋ ์์ฃผ ์๋ณผ ๊ฒ์ธ๊ฐ" ์ ๋๋ค. ๊ฑฐ์ ์ ๊ฑด๋๋ฆฌ๊ณ ํ ๋ฒ ๋์ ์ธ ๊ฑฐ๋ฉด Helm์ผ๋ก ์ถฉ๋ถํฉ๋๋ค. ๋ฒ์ ์ ์์ฃผ ์ฌ๋ฆฌ๊ณ , ํ ํฝ์ด ๊ณ์ ๋๊ณ , ์ธ์ฆ์๋ฅผ ๊ฐฑ์ ํ๊ณ , ์ฅ์ ๋ณต๊ตฌ๋ฅผ ์๋ํํ๊ณ ์ถ๋ค๋ฉด ๊ทธ ๋ฐ๋ณต ์์ ์ ๋์ ํด์ค ์คํผ๋ ์ดํฐ(Strimzi)์ ๊ฐ์น๊ฐ ์ปค์ง๋๋ค.
8. ํ์ฅ ์ด์ผ๊ธฐ: Strimzi๋ก ์์ํ๋ค๊ฐ Bitnami๋ก ๋ฐ๊พผ ์ด์
์ด๊ฑด ์๋ฃ๋ง ๋ณด๊ณ ๊ณ ๋ฅธ ๊ฒฐ๋ก ์ด ์๋๋ผ, ์ค์ ๋ก ํ ๋ฐํด ๋์๋ณธ ๋์ ๋ด๋ฆฐ ์ ํ์ ๋๋ค. ์์๋๋ก ์ ์ด๋ก๋๋ค.
์ฒ์์ Strimzi๋ฅผ ๊ณ ๋ฅธ ์ด์
์ฒ์์ "Kafka๋ ์ด์์ด ์ด๋ ต๋ค๋๊น ์ ๋๋ก ํ์"๋ ์๊ฐ์ด ์ปธ์ต๋๋ค. ๊ฒ์ํด๋ณด๋ฉด ์ด๋์๋ Strimzi๊ฐ ํ์ค์ผ๋ก ๋์ต๋๋ค. CNCF ํ๋ก์ ํธ์ด๊ณ , ์์ฉ ์ ํ์ ๊ธฐ๋ฐ์ด๊ธฐ๋ ํ๊ณ , ๋ฌด์๋ณด๋ค ์ด์ ์๋ํ๊ฐ ๋งค๋ ฅ์ ์ด์์ต๋๋ค.
- ๋ฒ์ ์ ์ฌ๋ฆด ๋ ์์์ ์์ ํ ์์๋ก ๋กค๋งํด์ค๋ค๋ ์ .
- ํ ํฝ์ YAML(
KafkaTopic)๋ก ์ ์ธํด์ Git์ ์ฝ๋์ฒ๋ผ ๊ด๋ฆฌํ ์ ์๋ค๋ ์ . ๋ง์นจ ์ฐ๋ฆฌ๋ ArgoCD๋ฅผ ์ฐ๋ ๊ถํฉ๋ ์ข์ ๋ณด์์ต๋๋ค. - ์ธ์ฆ์๋ ์์์ ๊ฐฑ์ ํด์ค๋ค๋ ์ .
๊ทธ๋ ์ฌ์ ์ ํ์ต์ ์ ์ถ ์ํํธ๋ฅผ ๊ณ์ฝํ๋ ๊ธฐ๋ถ์ด์์ต๋๋ค. ๋นํธ์ธ ๊ฐ์ ์ ์์คํ ์์ด์ปจ์ ํ ์คํ ๋ฉ์ด์ ๊น์ง, "์ด๊ฑฐ ํ๋๋ฉด ์ด๋ฆผ ๊ฑฑ์ ๋"์ด๋ผ๋ ์นดํ๋ก๊ทธ๋ฅผ ๋ณด๋ฉด ์ ๋๋ฆด ์๊ฐ ์์ต๋๋ค. ๊ทธ๋์ ์ ์ฉํ์ต๋๋ค.
์จ๋ณด๋ ๋ถํธํ๋ ์
๋ฌธ์ ๋ ์นดํ๋ก๊ทธ์ ํ์ต์ ์ด, ์ฐ๋ฆฌ๊ฐ ์ฌ๋ ์ง ๊ท๋ชจ์๋ ๊ณผํ๋ค๋ ๋ฐ ์์์ต๋๋ค.
1) ์์ ํด๋ฌ์คํฐ์ ์๊ตฌ๊ฐ ๋๋ฌด ๋ง์์ก์ต๋๋ค. ์ฐ๋ฆฌ ๊ฐ๋ฐ ํด๋ฌ์คํฐ๋ 2์ฝ์ด ๋จ์ผ ๋ ธ๋์ ๋๋ค. ๊ทธ๋ฐ๋ฐ Strimzi๋ฅผ ์ฌ๋ฆฌ๋ ์คํผ๋ ์ดํฐ ํ๋, ์ํฐํฐ ์คํผ๋ ์ดํฐ(ํ ํฝ/์ ์ ๊ด๋ฆฌ) ํ๋, ๊ฑฐ๊ธฐ์ ์ปจํธ๋กค๋ฌ ํ๊ณผ ๋ธ๋ก์ปค ํ ํ๋๊น์ง ์ค์ค์ด ๋ ์ผ ํ์ต๋๋ค. ์ ์ ๋ฉ์์ง๋ฅผ ๋๋ฅด๋ ๋ณธ์ (๋ธ๋ก์ปค)๋ณด๋ค ๊ทธ๊ฑธ ๊ด๋ฆฌํ๋ ์ฌ๋๋ค์ด ๋ ๋ถ์ ์ด๋ ๋ชจ์์๊ฐ ๋์ต๋๋ค.
๋น์ ํ์๋ฉด, ์๋ฃธ์ ์ง์ฌ์ ๊ฒฝ๋น์๊ณผ ๊ด๋ฆฌ์์ฅ์ ๋ค ๋ค์ธ ๊ฒฉ์ ๋๋ค. ํฐ ์ ํ์ด๋ผ๋ฉด ์ด ์ธ๋ ฅ์ด ๋ค ์ ๊ฐ์ ํ์ง๋ง, ์๋ฃธ์์๋ ์ ์ ๋ด๊ฐ ์ด ๊ณต๊ฐ์ ๊ทธ๋ค์ด ๋ค ์ฐจ์งํฉ๋๋ค. ๋จ์ผ ๋ ธ๋์์ CPU๊ฐ ๋ ๋น ๋ฏํ๋ ์ฐ๋ฆฌ ํ๊ฒฝ์์ ์ด ์ค๋ฒํค๋๊ฐ ๊ทธ๋๋ก ๋ถ๋ด์ด ๋์ต๋๋ค.
2) ๊ฐ๋จํ ์ผ๋ ํ ๋จ๊ณ๋ฅผ ๋ ๊ฑฐ์ณ์ผ ํ์ต๋๋ค. Strimzi์์๋ ๋ด๊ฐ StatefulSet์ ์ง์ ๋ง๋ค์ง ์์ต๋๋ค. Kafka CR์ ์ํ๋ ์ํ๋ฅผ ์ ์ผ๋ฉด ์คํผ๋ ์ดํฐ๊ฐ ๋์ ๋ง๋ค์ด์ค๋๋ค. ์ ๋ ๋๋ ํธํ๋ฐ, ์ ๋ ๋๊ฐ ๋ฌธ์ ์์ต๋๋ค. ํ๋๊ฐ ์ ๋จ๋ฉด ์์ธ์ด ๋ ๊ฒน์
๋๋ค. ๋ด ์ค์ ์ด ํ๋ฆฐ ๊ฑด์ง, ์คํผ๋ ์ดํฐ๊ฐ ๊ทธ๊ฑธ ์ด๋ป๊ฒ ํด์ํ๋์ง๋ฅผ ์คํผ๋ ์ดํฐ ๋ก๊ทธ๊น์ง ๋ค์ด๊ฐ์ ์ถ์ ํด์ผ ํฉ๋๋ค.
๋น์ ํ์๋ฉด, ํต์ญ์ฌ๋ฅผ ๊ฑฐ์ณ ๋ํํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ํ์์ ๋งค๋๋ฝ์ง๋ง, ๋ง์ด ์๋ชป ์ ๋ฌ๋๋ฉด "๋ด๊ฐ ์๋ชป ๋งํ๋, ํต์ญ์ด ์๋ชป ์ฎ๊ฒผ๋"๋ฅผ ์์ชฝ ๋ค ํ์ธํด์ผ ํฉ๋๋ค. ์ง์ ๋งํ๋ฉด(์ง์ ๋งค๋ํ์คํธ๋ฅผ ์ฐ๋ฉด) ์คํดํ ์ผ์ด ํ ๊ฒน ์ค์ด๋ญ๋๋ค.
3) ์คํผ๋ ์ดํฐ ์์ฒด๋ฅผ ๋ ์ด์ํด์ผ ํ์ต๋๋ค. Strimzi ๋ฒ์ ์ ์ฌ๋ฆฌ๋ฉด CRD ์คํค๋ง(apiVersion)๊ฐ ๋ฐ๋์ด ๊ธฐ์กด ๋ฆฌ์์ค๋ฅผ ๋ง์ด๊ทธ๋ ์ด์
ํด์ผ ํ๋ ์ผ์ด ์๊น๋๋ค. Kafka๋ฅผ ํธํ๊ฒ ์ด์ํ๋ ค๊ณ ๋์
ํ ๋๊ตฌ์ธ๋ฐ, ๊ทธ ๋๊ตฌ๋ฅผ ์ด์ํ๋ ์ผ์ด ์๋ก ์๊ธด ์
์
๋๋ค.
๋น์ ํ์๋ฉด, ์ฒญ์๋ฅผ ๋์ ํด์ฃผ๋ ๋ก๋ด์ฒญ์๊ธฐ๋ฅผ ์๋๋, ์ด๋ฒ์ ๋ก๋ด์ฒญ์๊ธฐ๋ฅผ ์ฒญ์ํ๊ณ ํ์จ์ด๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํ๋ ์ํฉ์ ๋๋ค. ์๋ํ๊ฐ ๊ณต์ง๊ฐ ์๋๋ผ๋ ๊ฑธ ์ฒด๊ฐํ์ต๋๋ค.
4) ์ ์ ์๋ํ์ ์ง๊ฐ๋ฅผ ๋๋ฆด ์ผ์ด ๋ณ๋ก ์์์ต๋๋ค. Strimzi์ ํต์ฌ ๊ฐ์น๋ ๋ฌด์ค๋จ ์ ๊ทธ๋ ์ด๋, ์๋ ๋ฆฌ๋ฐธ๋ฐ์ฑ, ๋ค์ค ํด๋ฌ์คํฐ ์ด์ ๊ฐ์ "๊ท๋ชจ๊ฐ ์ปค์ก์ ๋" ๋น๋ฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ฐ๋ฆฌ๋ ๋จ์ผ ํด๋ฌ์คํฐ์ ํ ํฝ๋ ์์ ๊ผฝ์ ์ ๋์์ต๋๋ค. 1๋ ์ ๋ช ๋ฒ ์์๊น ํ ์ผ์ ์ํด, ๋งค์ผ ๋ฆฌ์์ค์ ๋ณต์ก๋๋ฅผ ์ง๋ถํ๊ณ ์์๋ ๊ฒ์ ๋๋ค.
๋น์ ํ์๋ฉด, 1๋ ์ ํ ๋ฒ ๊ฐ๊น ๋ง๊น ํ ์บ ํ์ ์ํด ํฐ ์ฐจ๋ฅผ ์ฌ์ ๋งค์ผ ์ฃผ์ฐจ๋๊ณผ ๊ธฐ๋ฆ๊ฐ์ ์๋ฌ๋ฆฌ๋ ๊ฒฉ์ด์์ต๋๋ค.
5) ๋ค๋ฅธ ๋ฏธ๋ค์จ์ด์ ์ด์ ๋ฐฉ์์ด ๊ฐ๋ ธ์ต๋๋ค. ์ฐ๋ฆฌ PostgreSQL, Redis, Jenkins๋ ์ ๋ถ Bitnami Helm ์ฐจํธ๋ก ๊น๋ ค ์์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ Kafka๋ง Strimzi๋ผ, ์ด์ํ๋ ๋ฐฉ์๊ณผ ๋๊ตฌ๊ฐ ๋๋ก ๋๋์์ต๋๋ค. "Redis๋ helm upgrade๋ก, Kafka๋ CR ์์ ์ผ๋ก" ์์ผ๋ก ๋จธ๋ฆฟ์์ ๋ ๊ฐ์ ๋งค๋ด์ผ์ ๋ค๊ณ ๋ค๋
์ผ ํ์ต๋๋ค.
๊ทธ๋์ Bitnami๋ก ๋ฐ๊ฟจ์ต๋๋ค
๊ฒฐ๋ก ์ ๋จ์ํ์ต๋๋ค. ์ฐ๋ฆฌ ๊ท๋ชจ์ ๋จ๊ณ์๋ ๊ฐ๋ฒผ์ด ์ชฝ์ด ๋ง๋ค.
helm installํ ์ค์ด๋ฉด ๋์ด๊ณ , ์ค์ ์values.yamlํ๋๋ง ๋ด ๋๋ค.- ๋ณ๋ ์คํผ๋ ์ดํฐ๊ฐ ์์ผ๋ ๋จ์ผ ๋ ธ๋์์ ๋ฆฌ์์ค๋ฅผ ๋ ๋จน์ต๋๋ค.
- PostgreSQL·Redis์ ๊ฐ์ Bitnami ์ฐจํธ๊ตฐ์ผ๋ก ํต์ผ๋์ด, ์ด์ ๋งค๋ด์ผ์ด ํ๋๋ก ํฉ์ณ์ก์ต๋๋ค.
ํ์ต์ ์ ์ถ์์ ํ์ํ ๊ฐ๊ตฌ๋ง ์ง์ ๋ค์ธ ๊น๋ํ ์์ทจ๋ฐฉ์ผ๋ก ์ฎ๊ธด ๋๋์ด์์ต๋๋ค. ์๋ํ๋ ์ค์์ง๋ง, ์ฐ๋ฆฌ๊ฐ ์ค์ ๋ก ์ฐ๋ ๋งํผ๋ง ๋๋ ์คํ๋ ค ์์ ์กํ์ต๋๋ค.
๊ทธ๋์ Strimzi๊ฐ ๋์ ๋๊ตฌ๋ ํ๋ฉด, ์๋๋๋ค
์คํดํ๋ฉด ์ ๋๋ ๋ถ๋ถ์ ๋๋ค. Strimzi๋ ํ๋ฅญํ ๋๊ตฌ์ด๊ณ , ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด ๋ค์ ๋์๊ฐ ํ๋ณด์ ๋๋ค. ๋ค์ค ํด๋ฌ์คํฐ๋ฅผ ์ด์ํ๊ณ , ํ ํฝ์ด ์์ญ ๊ฐ๋ก ๋๊ณ , ๋ฌด์ค๋จ ์ ๊ทธ๋ ์ด๋๊ฐ ์ผ์์ด ๋๋ ์๊ฐ — ๊ทธ๋๋ ์คํผ๋ ์ดํฐ๊ฐ ๋งค์ผ ์ผํด์ฃผ๋ ๊ฐ์ ํฉ๋๋ค.
ํต์ฌ ๊ตํ์ "ํ์ค์ด๋ผ์"๊ฐ ์๋๋ผ "์ง๊ธ ์ฐ๋ฆฌ ๊ท๋ชจ์ ๋ง์์"๋ก ๊ณจ๋ผ์ผ ํ๋ค๋ ๊ฒ์ด์์ต๋๋ค. ์ข์ ๋๊ตฌ์ ๋ง๋ ๋๊ตฌ๋ ๋ค๋ฆ ๋๋ค. ํ์ต์ ์ด ํญ์ ์ ๋ต์ ์๋๊ณ , ์์ทจ๋ฐฉ์๋ ์์ทจ๋ฐฉ์ ๋ง๋ ์ด๋ฆผ์ด ์์ต๋๋ค.
๊ทธ๋ผ ๋งค๋์ง๋ ์๋น์ค๋ ์ ์ณ๋ค๋ ์ ๋ดค๋
์ฌ๊ธฐ์ ํ ๋ฒ์ฏค ๋์ค๋ ์ง๋ฌธ์ด ์์ต๋๋ค. "Strimzi๊ฐ ๋ฌด๊ฒ๊ณ Bitnami๊ฐ ๊ฐ๋ณ๊ณ ๋ฅผ ๋ฐ์ง๊ธฐ ์ ์, ๊ทธ๋ฅ ๋งค๋์ง๋ Kafka(Confluent Cloud, AWS MSK ๊ฐ์)๋ฅผ ์ฐ๋ฉด ์ด์ ์์ฒด๋ฅผ ์ ํด๋ ๋์ง ์๋"๋ ๊ฒ์ ๋๋ค. ๋ง๋ ๋ง์ด๊ณ , ์ค์ ๋ก ๋ง์ ๊ณณ์ด ๊ทธ๋ ๊ฒ ํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ฐ๋ฆฌ์๊ฒ ๊ทธ๊ฒ ์ ํ์ง์ ์์ ์์์ต๋๋ค.
์ด์ ๋ ๋จ์ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ฒ์๋ถํฐ ์จํ๋ ๋ฏธ์ค ํ๊ฒฝ์ ๋๋ค. ๋ชจ๋ ์๋ฒ๊ฐ ์ฌ๋ด ๋ฌผ๋ฆฌ์๋ฒ์ด๊ณ ํผ๋ธ๋ฆญ ํด๋ผ์ฐ๋๋ฅผ ์ฐ์ง ์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ๋งค๋์ง๋ Kafka๋ ์ ๋ถ ํด๋ผ์ฐ๋๋ฅผ ์ ์ ๋ก ํฉ๋๋ค. ํด๋ผ์ฐ๋๋ฅผ ์ ์ฐ๋ ์๊ฐ, ๊ทธ ์นดํ๋ก๊ทธ๋ ํผ์ณ๋ณผ ์์กฐ์ฐจ ์์ต๋๋ค.
๋ ๊ทผ๋ณธ์ ์ธ ์ด์ ๋ ์์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ๋ง๋๋ ๊ฑด ํด๋ผ์ฐ๋์ ์ฌ๋ฆฌ๋ ๋จ์ผ ์ฑ์ด ์๋๋ผ, ๊ณ ๊ฐ ํ๊ฒฝ์ ํต์งธ๋ก ์ค์น๋๋ ํ๋ซํผ ์ ํ์ ๋๋ค. ํ์๋ง์ ๋ค์ด๊ฐ๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค. ๋ง์ฝ Kafka๋ฅผ ํน์ ํด๋ผ์ฐ๋์ ๋งค๋์ง๋์ ๋ฌถ์ด๋ฒ๋ฆฌ๋ฉด, ์ ํ์ด ๊ทธ ํด๋ผ์ฐ๋์์๋ง ๋๊ฒ ๋ฉ๋๋ค. ๊ทธ๋์ Kafka๋ ์ ํ ์์ ํฌํจ๋๋, ์ด๋์๋ ์์ฒด์ ์ผ๋ก ๋๋ ์คํ์ด์ด์ผ ํ์ต๋๋ค.
๋น์ ํ์๋ฉด, ์ด์ฌ ๋ค๋ ๋๋ง๋ค ๋ค๊ณ ๊ฐ๋ ์ด๋ฆผ๊ณผ ๊ทธ ์ง์ ๋ถ๋ฐ์ด๋ก ๋ธ๋ฆฐ ์์คํ ์์ด์ปจ์ ์ฐจ์ด์ ๋๋ค. ๋งค๋์ง๋๋ ๊ทธ ๋๋ค(ํด๋ผ์ฐ๋)์๋ง ์๋ ๋ถ๋ฐ์ด๋ผ, ๋ค๋ฅธ ์ง(์จํ๋ ·ํ์๋ง)์ผ๋ก ์ด์ฌํ๋ฉด ๋๊ณ ๊ฐ์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ ์ ํ์ ์ฌ๊ธฐ์ ๊ธฐ ์ด์ฌ ๋ค๋ ์ผ ํ๋, ์ด๋ฆผ์ ์ง์ ๋ค๊ณ ๋ค๋ ์ ์๋ ๊ฒ์ด์ด์ผ ํ์ต๋๋ค.
๋ฌผ๋ก ๋งค๋์ง๋๊ฐ ๋์ ๊ฒ ์๋๋๋ค. ์คํ๋ ค ๋ง๋ ์ํฉ์์ ๊ฐ์ฅ ํธํ ์ ํ์ ๋๋ค.
- ์ข์ ์ : ์ด์ ๋ถ๋ด์ด ๊ฑฐ์ 0์ ๋๋ค. ํจ์น·์ค์ผ์ผ·์ฅ์ ๋ณต๊ตฌ๋ฅผ ๋ฒค๋๊ฐ ๋ค ํฉ๋๋ค. "Kafka ์ด์ํ"์ด ํ์ ์๊ณ , SLA๋ก ๊ฐ์ฉ์ฑ์ ๋ณด์ฅ๋ฐ๊ณ , ๋ณด์ ํจ์น๋ ์๋์ ๋๋ค. ๊ฑด๋ฌผ ๊ด๋ฆฌ๋ฅผ ํต์งธ๋ก ์ํํ ์ ์ ๋๋ค.
- ์์ฌ์ด ์ : ๊ธธ๊ฒ ๋ณด๋ฉด ๋น์ฉ์ด ํฝ๋๋ค(์ฒ๋ฆฌ๋·์ ์ฅ๋·์ ์ก๋๋ง๋ค ์๊ธ). ๋ฒค๋์ ์ข ์๋๊ณ , ์ธ๋ฐํ ํ๋์ ์์ ๊ฐ ์ค๊ณ , ๋ฌด์๋ณด๋ค ๋ฐ์ดํฐ๊ฐ ์ฌ์ธ๋ก ๋๊ฐ๋๋ค. ๋ณด์·๊ท์ ·ํ์๋ง ์๊ฑด์ด ์์ผ๋ฉด ์ด ์ง์ ์์ ๋งํ๋๋ค.
๊ฒฐ๊ตญ ๋งค๋์ง๋๋ "ํด๋ผ์ฐ๋๋ฅผ ์ฐ๊ณ , Kafka ์ด์์ ์ฌ๋์ ์ ์ฐ๊ณ ์ถ์" ์กฐ์ง์ ์ต์ ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์จํ๋ ํ๋ซํผ ์ ํ์ด๋ผ ์ ๋ฐ๋ ์๋ฆฌ์ ์์๊ณ , ๊ทธ๋์ ์์ฒด ํธ์คํ ์ด ํํ์ด ์๋๋ผ ํ๊ฒฝ์ด ์ ํด์ค ๋ต์ด์์ต๋๋ค. ๊ทธ ์์ฒด ํธ์คํ ์์์ Strimzi์ Bitnami๋ฅผ ์ ์ธ์งํ ๊ฒ ์ด ๊ธ์ ์ด์ผ๊ธฐ์ ๋๋ค.
9. ๋์ ํํฉ: ๋๊ฐ ์ด๋์ ๋ ์ฐ๋
์์ฃผ ๋ฐ๋ ์ง๋ฌธ์ด "๊ทธ๋์ ๋ ์ค ๋ญ ๋ ๋ง์ด ์ฐ๋, ๋๊ธฐ์ ์ ๋ญ ์ฐ๋" ์ ๋๋ค. ๋จผ์ ์์งํ๊ฒ ๋งํ๋ฉด, "๋ช ๋ ๋ช"์ผ๋ก ๋ฑ ๋จ์ด์ง๋ ๊ณต๊ฐ ์ ์ ์จ ํต๊ณ๋ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ 1:1๋ก ์ค์ธ์ฐ๋ ๊ฒ ์์ฒด๊ฐ ์ฝ๊ฐ ์ด๊ธ๋ ๋น๊ต์ ๋๋ค. ์ฉ๋๊ฐ ๋ค๋ฅธ ๋๊ตฌ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋๋ ๋ฐฉํฅ์ฑ์ ๋ถ๋ช ํฉ๋๋ค.
์๋ก ๋ค๋ฅธ ๋ฌด๋์ 1๋ฑ
- "K8s์์ Kafka๋ฅผ ์ง์งํ๊ฒ ์ด์" ํ๋ ๋ฌด๋ → Strimzi๊ฐ ์ฌ์ค์ ๋ ์ ์ ํ์ค์ ๋๋ค. ์คํ์์ค Kafka ์คํผ๋ ์ดํฐ ์ค ๊ฒฝ์์๋ผ ํ ๋งํ ๊ฑด ์์ฉ ์ ํ ์ ๋๋ฟ์ ๋๋ค.
- "๋น ๋ฅด๊ฒ Kafka ํ๋ ๋์ฐ๊ธฐ"(๊ฐ๋ฐ·POC·๋ด๋ถ๋๊ตฌ) ๋ฌด๋ → Bitnami Helm ์ฐจํธ๊ฐ ๊ฐ์ฅ ํํฉ๋๋ค.
์ฆ ๋์ "๋๊ฐ ๋ ๋ง์ด ์ฐ์ด๋"๊ฐ ์๋๋ผ ๋ค๋ฅธ ๋ฌด๋์์ ๊ฐ๊ฐ 1๋ฑ์ ๋๋ค. ์ด์ ๋ฌด๋๋ Strimzi, ๊ฐํธ ์ค์น ๋ฌด๋๋ Bitnami.
๋น์ ํ์๋ฉด, ํธ๋ญ๊ณผ ๊ฒฝ์ฐจ๋ฅผ "๋ญ๊ฐ ๋ ๋ง์ด ํ๋ฆฌ๋"๋ก ๋น๊ตํ๋ ๊ฒ๊ณผ ๋น์ทํฉ๋๋ค. ์๋ด ์ถํด๊ทผ์ฉ์ผ๋ก๋ ๊ฒฝ์ฐจ๊ฐ ์๋์ ์ผ๋ก ๋ง์ด ๊ตด๋ฌ๋ค๋๊ณ , ๋ฌผ๋ฅ ํ์ฅ์์๋ ํธ๋ญ์ด ํ์ค์ ๋๋ค. ๊ธธ์์ ๋ ์์ฃผ ๋ณด์ด๋ ๊ฑด ๊ฒฝ์ฐจ์ง๋ง, ๊ทธ๋ ๋ค๊ณ ํธ๋ญ์ด ์ธ๊ธฐ๊ฐ ์๋ ๊ฒ ์๋๋๋ค. ๋ฌด๋๊ฐ ๋ค๋ฅผ ๋ฟ์ ๋๋ค.
๋๊ธฐ์ ์ ํ์ค — ๋ฐ์ ์ด ํ๋ ์์ต๋๋ค
์ฌ๊ธฐ์ ์์ธ์ ์ฌ์ค์ด ์์ต๋๋ค. ์๋น์ ๋๊ธฐ์ ์ Kafka๋ฅผ ์์ ์์ฒด ํธ์คํ ํ์ง ์์ต๋๋ค. ์ด์ ๋ถ๋ด์ด ์ปค์ ๋งค๋์ง๋ ์๋น์ค(Confluent Cloud, AWS MSK, Aiven ๋ฑ)๋ฅผ ์ฌ์ ์๋๋ค. "์ฐ๋ฆฌ๊ฐ ์ง์ Kafka๋ฅผ ๋๋ณด์ง ์๊ณ , ๋ ๋ด๊ณ ๋จ์๊ฒ ๋งก๊ธด๋ค"๋ ์ ํ์ ๋๋ค.
๊ทธ๋ผ์๋ ์ง์ K8s ์์ Kafka๋ฅผ ๊ตด๋ฆฌ๋ ๋๊ธฐ์ ์ด๋ผ๋ฉด ๋ฐฉํฅ์ ์ด๋ ์ต๋๋ค.
- ์คํ์์ค๋ก ๊ฐ๋ค → ๊ฑฐ์ Strimzi. "๋๊ธฐ์ + ์ด์ + ์คํ์์ค Kafka on K8s" ์กฐํฉ์์ Strimzi๋ ํ์ค์ ๊ฐ๊น์ต๋๋ค.
- ์์ฉ์ผ๋ก ๊ฐ๋ค → Confluent ์คํผ๋ ์ดํฐ, ๋๋ Red Hat์ ์์ฉ Kafka(์ด๊ฒ๋ ๋ด๋ถ๋ Strimzi ๊ธฐ๋ฐ).
๋ฐ๋๋ก Bitnami๋ก ๋๊ธฐ์ ํ๋ก๋์ Kafka๋ฅผ ๋ฉ์ธ์ผ๋ก ๊ตด๋ฆฌ๋ ๊ฒฝ์ฐ๋ ์๋์ ์ผ๋ก ๋๋ญ ๋๋ค. ์ด์ ์๋ํ๊ฐ ์์ด์, ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด ์ฌ๋์ด ๋ ์์ ์ผ์ด ๊ฐ๋น์ด ์ ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ ๋ฆฌํ๋ฉด: ์ง์งํ๊ฒ ์ค๋ ์ด์ํ๋ฉด Strimzi(๋๋ ๋งค๋์ง๋) ์ชฝ, ๋น ๋ฅด๊ณ ๊ฐ๋ณ๊ฒ ์ฐ๋ฉด Bitnami ์ชฝ. ์์ ๋จ์ผ ๋ ธ๋์ธ ์ฐ๋ฆฌ๊ฐ Bitnami๋ก ๊ฐ ๊ฑด ํฉ๋ฆฌ์ ์ด๊ณ , ๋๊ธฐ์ ๊ท๋ชจ๋ก ์ปค์ง๋ค๋ฉด Strimzi๋ ๋งค๋์ง๋๋ก ์ฎ๊ฒจ๊ฐ๋ ๊ฒ ์์ฐ์ค๋ฌ์ด ์์์ ๋๋ค.
์์ํ ์ฅ๋จ์ , ๋ค์ ํ ๋ฒ
ํ(6์ฅ)๋ก ์ ๋ฆฌํ ๊ฑธ, ์ด๋ฒ์ ์ฒด๊ฐ ์์ฃผ๋ก ํ์ด๋ด ๋๋ค.
Strimzi๋ฅผ ์ฐ๋ฉด ์ข์ ์๊ฐ - ์๋ฒฝ์ ๋ธ๋ก์ปค ํ ๋๊ฐ ์ฃฝ์ด๋, ์คํผ๋ ์ดํฐ๊ฐ ์์์ ๊ฐ์ ๋์คํฌ์ ๋ค์ ๋ถ์ฌ ์ด๋ ค๋์ต๋๋ค. ์๋ค ๊นจ์ ์๋ ์ผ์ด ์ค์ด๋ญ๋๋ค. - "Kafka 3.9 → 4.0 ์ฌ๋ ค๋ผ"๋ ์ง์๊ฐ ๋จ์ด์ก์ ๋, version ํ ์ค๋ง ๋ฐ๊พธ๋ฉด ๋ฉ๋๋ค. ํ ๋์ฉ ์์ ํ๊ฒ ๊ต์ฒดํ๋ ๊ฑด ์คํผ๋ ์ดํฐ ๋ชซ์
๋๋ค. ๋ง์น ๋ฒ ํ
๋ ์ด์์ ํ ๋ช
์ ํด๋ฌ์คํฐ์ ์์ฃผ์ํจ ๋๋์
๋๋ค. - ํ ํฝ 100๊ฐ๋ฅผ Git์ YAML๋ก ๋ฐ์๋๋ฉด, ์ด๋ ํ๊ฒฝ์ ๋ฐฐํฌํ๋ ๋๊ฐ์ด ์ฌํ๋ฉ๋๋ค. "์ด ํ ํฝ ๋๊ฐ ์ธ์ ์ ๋ง๋ค์์ง"๊ฐ Git ํ์คํ ๋ฆฌ์ ๋ค ๋จ์ต๋๋ค.
Strimzi๋ฅผ ์ฐ๋ฉด ์ํ ์๊ฐ - ํ๋๊ฐ ์ ๋จ๋๋ฐ, ๋ด ์ค์ ๋ฌธ์ ์ธ์ง ์คํผ๋ ์ดํฐ ํด์ ๋ฌธ์ ์ธ์ง ๋ก๊ทธ๋ฅผ ๋ ๊ตฐ๋ฐ ๋ด์ผ ํฉ๋๋ค. ํต์ญ์ฌ๋ฅผ ๊ฑฐ์น ๋ํ์ฒ๋ผ, ์คํด์ ์ถ์ฒ๊ฐ ํ ๊ฒน ๋ ์๊น๋๋ค. - ์์ ํด๋ฌ์คํฐ์์ ์คํผ๋ ์ดํฐ·์ํฐํฐ์คํผ๋ ์ดํฐ·์ปจํธ๋กค๋ฌ·๋ธ๋ก์ปค ํ๋๊ฐ ์ค์ค์ด ๋ ์ ์์์ ์ผ๊ธ์ผ๊ธ ๋จน์ต๋๋ค. ์๋ฃธ์ ๊ด๋ฆฌ ์ธ๋ ฅ๋ง ๋ถ์ ์ด๋ ๊ฒฉ์ ๋๋ค. - Strimzi ์์ฒด๋ฅผ ์ ๊ทธ๋ ์ด๋ํ ๋ CRD ๋ง์ด๊ทธ๋ ์ด์ ์ ์ฑ๊ฒจ์ผ ํฉ๋๋ค. ์ฒญ์ ๋ก๋ด์ ๋ ์ฒญ์ํ๋ ์ผ์ด ์๊น๋๋ค.
Bitnami๋ฅผ ์ฐ๋ฉด ์ข์ ์๊ฐ - helm install ํ ์ค๋ก 10๋ถ ๋ง์ Kafka๊ฐ ๋น๋๋ค. ์ค๋ ๋น์ฅ ๋ฉ์์ง๋ฅผ ํ๋ ค๋ณด๊ณ ์ถ์ ๋ ๋งํ์ด ์์ต๋๋ค. - values.yaml ํ๋๋ง ๋ณด๋ฉด ๋ชจ๋ ์ค์ ์ด ๊ฑฐ๊ธฐ ์์ต๋๋ค. ์กฐ๋ฆฝ ์ค๋ช
์ ํ ์ฅ์ผ๋ก ๋๋๋ ๊ฐ๊ตฌ ๊ฐ์ ๋ช
๋ฃํจ์
๋๋ค. - Postgres·Redis์ ์ด์ ๋ฐฉ์์ด ๊ฐ์, ๋จธ๋ฆฟ์ ๋งค๋ด์ผ์ด ํ๋๋ก ํต์ผ๋ฉ๋๋ค.
Bitnami๋ฅผ ์ฐ๋ฉด ์ํ ์๊ฐ - ๋ฒ์ ์
๊ทธ๋ ์ด๋ ์ "ํ ๋์ฉ ์์ ํ๊ฒ"๋ฅผ ์ฌ๋์ด ์ง์ ์ ๊ฒฝ ์จ์ผ ํฉ๋๋ค. ์๋ชปํ๋ฉด ๋ฉ์์ง๊ฐ ์๋๋ค. - ์ธ์ฆ์ ๋ง๋ฃ, ํํฐ์
์ ๋ฆผ ๊ฐ์ ๊ฑธ ์๋ฌด๋ ๋์ ์ ๋ด์ค๋๋ค. ์๋ฆผ ์๋ ์ฌ๊ถ ๋ง๋ฃ์ฒ๋ผ, ํฐ์ง๊ณ ๋์์ผ ์๋๋ค. - ๊ทธ๋ฆฌ๊ณ ํ์ค์ ํจ์ ํ๋ — bitnamilegacy ์ด๋ฏธ์ง๋ ๋ณด์ ํจ์น๊ฐ ๋ฉ์ถ ๊ฒฝ๋ก๋ผ, ์ค๋ ์ด์ํ๋ ค๋ฉด ์ด๋ฏธ์ง ์ถ์ฒ๋ฅผ ๊ฐ์๋ผ์์ผ ํฉ๋๋ค.
10. ์ฉ์ด์ง
- Kafka: ๋ถ์ฐ ๋ฉ์์ง ์คํธ๋ฆฌ๋ฐ ํ๋ซํผ. ๋ฉ์์ง๋ฅผ ํ ํฝ์ ์๊ณ ์ฌ๋ฌ ์๋น์๊ฐ ๋๋ ์ฝ์ต๋๋ค.
- StatefulSet: ๊ณ ์ ์ด๋ฆ·๊ณ ์ ๋์คํฌ·์์๋ฅผ ๋ณด์ฅํ๋ K8s ๋ฆฌ์์ค. ์ํ๋ฅผ ๊ฐ์ง ์ฑ(Kafka, DB)์ ์๋๋ค.
- PVC(PersistentVolumeClaim): ํ๋๊ฐ ์ฃฝ์ด๋ ์ ์ง๋๋ ์์ ๋์คํฌ ์์ฒญ. ํ๋๊ฐ ๋ค์ ๋ ๋ ๊ฐ์ ๋ฐ์ดํฐ์ ๋ถ์ต๋๋ค.
- ZooKeeper: ๊ณผ๊ฑฐ Kafka์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋์ ๊ด๋ฆฌํ๋ ๋ณ๋ ์์คํ . KRaft๋ก ๋์ฒด๋๋ ์ค์ ๋๋ค.
- KRaft (Kafka Raft): ZooKeeper๋ฅผ ์์ ๊ณ Kafka๊ฐ ์๊ธฐ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ง์ ๊ด๋ฆฌํ๋ ๋ชจ๋. Raft ํฉ์ ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉ.
- controller / broker: KRaft์์์ ์ญํ . ์ปจํธ๋กค๋ฌ๋ ๋ฉํ๋ฐ์ดํฐ·ํฉ์, ๋ธ๋ก์ปค๋ ์ค์ ๋ฉ์์ง ์ฒ๋ฆฌ.
- Helm: K8s์ฉ ํจํค์ง ๋งค๋์ + ํ
ํ๋ฆฟ ์์ง.
values.yaml๋ก ๋งค๋ํ์คํธ๋ฅผ ์ฐ์ด๋ ๋๋ค. - Operator: ํด๋ฌ์คํฐ ์์ ์์ฃผํ๋ฉฐ CRD๋ฅผ ๋ณด๊ณ ์ํ๋ ์ํ๋ฅผ ์ ์งํ๋ ์ปจํธ๋กค๋ฌ.
- CRD(Custom Resource Definition): K8s์ ์ ๋ฆฌ์์ค ์ข
๋ฅ๋ฅผ ์ถ๊ฐํ๋ ํ์ฅ. Strimzi์
Kafka,KafkaTopic๋ฑ. - ๋ฆฌ์ปจ์ค๋ ์ด์ (reconciliation): ํ์ฌ ์ํ์ ์ํ๋ ์ํ๋ฅผ ๋น๊ตํด ์ฐจ์ด๋ฅผ ๋ฉ์ฐ๋ ์คํผ๋ ์ดํฐ์ ์กฐ์ ๋ฃจํ.
- Cruise Control: Kafka ํํฐ์ ์ ์๋์ผ๋ก ์ฌ๋ฐฐ์น(๋ฆฌ๋ฐธ๋ฐ์ฑ)ํด์ฃผ๋ ๋๊ตฌ. Strimzi์ ํตํฉ๋ผ ์์ต๋๋ค.
์ฐธ๊ณ
- Apache Kafka ๊ณต์ ๋ฌธ์ (KRaft): https://kafka.apache.org/documentation/#kraft
- Strimzi ๊ณต์ ๋ฌธ์: https://strimzi.io/docs/operators/latest/overview
- Bitnami Kafka ์ฐจํธ: https://github.com/bitnami/charts/tree/main/bitnami/kafka
- Bitnami ์นดํ๋ก๊ทธ ๋ณ๊ฒฝ(legacy ์ด์ ) ๊ณต์ง: https://github.com/bitnami/charts/issues/35164