K8s Image Available Exporter
Image Registry ๋ชจ๋ํฐ๋ง
K8s ํด๋ฌ์คํฐ์์ python Pod์ ๋์ฐ๋ ค๋ ๋น์ ! ๊ทธ๋ฐ๋ฐ, ์ฐ์ฐํ๋ Dockerhub์ ์ฅ์ ๊ฐ ๋ฐ์ํด๋ฒ๋ฆฌ๊ณ โฆ ๋น์ ์ด ๋์ฐ๋ ค๋ Pod์ ์ด๋ฏธ์ง๋ฅผ ๋ฐ์์ค์ง ๋ชปํด ImagePullBackOff
์ ๋น ์ ธ๋ฒ๋ฆฐ๋คโฆ Dockerhub์ ์์ ์ฑ์ ์ฒ ์ฉ ๊ฐ์ด ๋ฏฟ์ด๋ฒ๋ฆฐ ๋น์ ์ ์ค๋ง ์ด ๋จ๊ณ์์ ์ค๋ฅ๊ฐ ๋ ๊ฑฐ๋ผ๊ณ ๋ ์๊ฐํ์ง๋ ๋ชปํ์ฑโฆ
ํฐ์ ธ๋ฒ๋ฆฐ Dockerhubโฆ
K8s๋ Image๋ฅผ ์ ์ฅํ๋ โRegistryโ ๋จ์์ ์ฅ์ ๊ฐ ์๊ธฐ๋ฉด Pod์ ๋์ฐ๋ ๊ฒ์กฐ์ฐจ ๋ชปํ๋ ์ํ์ ์ง๋ฉดํ๋ค. ๊ทธ๋์ K8s ํด๋ฌ์คํฐ๋ฅผ ์ด์ํ๋ค๋ฉด Dockerhub, AWS ECR, Github ghcr ๊ฐ์ Image Registry์ ์ํ๋ฅผ ๋ชจ๋ํฐ๋ง ํ๋ฉฐ Registry ์ฅ์ ๊ฐ K8s ํด๋ฌ์คํฐ ์ด์์ ์ํฅ์ ์ฃผ์ง ์์์ง ์ฃผ์ํ ํ์๊ฐ ์์ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ ๋งค๋ฒ ์ํ ํ์ด์ง์ ๋ค์ด๊ฐ์ ํ์ธํ๊ธฐ๋ ํ๋ค๊ณ , Registry ์ ์ฒด ์ฅ์ ๊ฐ ์๋๋ผ ๋ณธ์ธ์ด ์ฌ์ฉํ๋ Image์ Registry์๋ง ์ฅ์ ๊ฐ ์๊ธธ ์๋ ์์ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ K8s ํด๋ฌ์คํฐ๋ฅผ ์ด์ํ ์ ๋๋ฉด ์ฌ์ฉํ๋ ์ด๋ฏธ์ง๋ ๊ฐ์๊ฐ์ ์ผํฐ Pod์์ ์ฌ์ฉํ๋ ์ด๋ฏธ์ง๋ค์ด ์์ญ๊ฐ๋ ๋ ๊ฒ์ด๊ณ , ํด๋ฌ์คํฐ์ ๋ ์๋ ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ๋์ดํด์ ์ ๋ฆฌํ๋ ๊ฒ๋ ์ผ์ด๋ค.
์ด๋ฐ ๊ท์ฐฎ์ ์์ ์ ๋์ ํด์ฃผ๋ Prometheus Exporter๊ฐ ์์ผ๋ ๋ฐ๋ก โKubernetes Image Availability Exporterโ๋ค!
K8s Image Availability Exporter
K8s Image Availability Exporter, ์ค์ฌ์ k8s-iae exporter๋ K8s ํด๋ฌ์คํฐ์ ์ ์ฌ์ฉํ๋ ๋ชจ๋ ์ด๋ฏธ์ง ์ข
๋ฅ๋ฅผ ์์งํด ํด๋น Image์ ์ํ๋ฅผ ๋ชจ๋ํฐ๋ง ํ๋ Exporter๋ค. ์๋ฅผ ๋ค์ด, K8s ํด๋ฌ์คํฐ์์ python:3.9
, public.ecr.aws/docker/library/node
๋ฑ์ ์ฌ์ฉํ๋ Pod๋ค์ด ์กด์ฌํ๋ค๋ฉด, ๊ทธ๋ค์ ๋ํ ์ํ๋ฅผ ๋ชจ๋ํฐ๋ง ํ๋ค๋ ๊ฒ์ด๋ค.
๊ธฐ์กด์๋ ์ฌ๋์ด K8s ํด๋ฌ์คํฐ ์ ์ฒด Pod์ ํ์ธํ๋ฉฐ ์ฌ์ฉํ๋ Image๋ฅผ ์ ๋ฆฌํด์ผ ํ๋ค๋ฉด, K8s iae exporter๋ ๊ทธ ๋ชฉ๋ก์ ์์์ ์ถ์ถํ๋ค!
๊ทธ๋์ K8s iae exporter๋ง ๋์๋๋ฉด, K8s ํด๋ฌ์คํฐ์ Pod image์ ์ํ๊ฐ ์์์ ๊ฐ์๋๊ณ , ๊ทธ ์ ๋ณด๊ฐ Prometheus์ ์ ์ฅ๋๋ค!
์ด๊ฑฐ ์ ๋ง ํ์ํ ๊ฑธ๊น?
๋! ๋ณธ์ธ์ ์ Exporter๊ฐ ๊ตณ์ด ํ์ ์๋ค๊ณ ์๊ฐํ๋ค! ๊ตฌ๊ตฌ์ ์ ์ Exporter๋ฅผ ์ค๋ช ํ์ง๋งโฆ ์ด๊ฒ ๋ฌด์จ ๋ง์ธ๊ฐ ใ ใ
์ผ๋จ k8s iae exporter๊ฐ ํด๋น ์ด๋ฏธ์ง์ ์ฅ์ ๋ฅผ ํฌ์ฐฉํ๋ค๊ณ ํด์, ๊ทธ๊ฑธ ๊ฐ๋ฅํ ๋ค๋ฅธ ํ๊ทธ๋ก Pod yaml์ ๋ณ๊ฒฝํด์ฃผ๋ ๊ทธ๋ฐ ๋์์ ํ๋๊ฒ ์๋๋ค. ๊ทธ๋ฅ โ์ด? ์ด ์ด๋ฏธ์ง, ์ด ํ๊ทธ ์ง๊ธ ๋ชป ์. ์๊ณ ์.โ ์ ๋ ๋งํด์ค ๋ฟ์ด๋ค.
Pod์ ๋์ธ ๋น์์๋ ํด๋น Image Registry์ ์ ๊ทผ ๊ฐ๋ฅํ ์ํ์๋๋ฐ, ์ ์ Registry์ ์ฅ์ ๊ฐ ๋ฐ์ํด๋ ์๋์ด ๊ฐ๋ค. ์ฌ์ค Pod์ ๋์์ ์ ๋๊ณ ์๊ณ , ๋น์ฅ ๋ค์ ๋์ธ ์์ ๋ ์๋ค๋ฉด, ์ด๋ฏธ ์ ๋๋ Pod์ Image Availability๋ฅผ ๋ชจ๋ํฐ๋ง ํ ํ์ ๊ฑฐ์ ์๋ค. ์ ์ ์ฅ์ ๊ฐ ์๊ฒจ๋ ๊ทธ๋ค๋ ๊ธ๋ฐฉ ๋ณต๊ตฌํ๊ฒ ๋๋ค. (์ฌ์ค ๊ทธ์ชฝ์์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด, ์ฐ๋ฆฐ ๋ณต๊ตฌ ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ์ ๋ฐ์ ์๋คโฆ ใ ใ ใ ใ ใ )
๋, ๋์ฐ๋ ค๋ Pod์ ์ด๋ฏธ์ง๊ฐ unavailable ํ๋ค๋ฉด ๋ถ๋ช
ImagePullBackoff
์๋ฌ๊ฐ ๋ฐ์ํ๋๋ฐ, ๋ณดํต ์ด๋ฌ๋ฉด Pod ๋์ฐ๋ ์ฌ๋์ด๋ K8s ํด๋ฌ์คํฐ ๋ชจ๋ํฐ๋ง ํ๋ ์ฌ๋์ด ๋จผ์ ๋ฐ๊ฒฌํ๊ณ ๋์ํ๋ค.
์ด ๋ ์ ์ง์ง ๋ณ๋ก ๊ฐโฆ?
๋, ๊ทธ๊ฑด ์๋ ๊ฒ ๊ฐ๋ค. ์ฒ์ ์ Exporter๊ฐ ๊ณต๊ฐ๋์์ ๋ ๊ธฐ๋ผํ ์ฌ๋๋ ์๋ค.
quay.io
๋ฅผ ์ํ Exporter๊ฐ ๋ฑ์ฅํ๋ค๊ณ ์ข์ํ ์ฌ๋๋ ์๋ค ใ
ใ
๋ณธ์ธ์ ๊ฑฐ์ ์ด ์ ์ด ์๋๋ฐ, quay.io
๋ Dockerhub, ECR ์ฒ๋ผ Image Registry ์ค ํ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ขโฆ ์ฅ์ ๊ฐ ๋ง์ ๊ฒ ๊ฐ์โฆ ๊ทธ๋ฐ Registry์ธ ๊ฒ ๊ฐ๋ค ใ
ใ
๋ณธ์ธ ํ์์ K8s iae exporter๋ฅผ ๊ฒํ ํ๊ฒ ๋ ์ด์ ๋ quay.io
์ ์ฆ์ ์ฅ์ ๋๋ฌธ์ด์๋คโฆ ใ
ใ
์ด์จ๋ Registry ๋ชจ๋ํฐ๋ง ์ธก๋ฉด์์ ์ ์ฉ์ฑ์ด ์์ผ๋, ํ์ํ๋ค๋ฉด ํ๋ฒ ์ฌ์ฉํด๋ณด์!
์ด๊ฑธ ๊ฐ๋ฐํ deckhouse์ ๋ํด์
์ k8s iae exporter๋ deckhouse๋ ํ์ฌ์์ ๊ฐ๋ฐํ๋๋ฐ, โNoOps Kubernetes platformโ๋ผ๋ ์ฌ๋ก๊ฑด์ผ๋ก ์๋น์ค๋ฅผ ์ ๊ณตํ๊ณ ์๋ค.
์ฌ์ดํธ์ ๋ค์ด๊ฐ์ ์ดํด๋ณด๋ฉด, K8s ํด๋ฌ์คํฐ ์ด์๊ณผ ๊ด๋ฆฌ ์๋น์ค๋ฅผ ์ ๋ฌธ์ ์ผ๋ก ์ ๊ณตํ๋ ๊ฒ ๊ฐ๋ค. spark cluster๋ฅผ ์ฝ๊ฒ ์ด์/๊ด๋ฆฌํ๊ธฐ ์ํด Databricks๋ฅผ ์ฑํํ๋ ๊ฒ์ฒ๋ผ, K8s ํด๋ฌ์คํฐ ์๋ฃจ์ ์ ์ ๊ณตํ๋ ๊ฒ ๊ฐ์๋ค.
์๋ฅผ ๋ค์ด, AWS EKS๋ฅผ ์ด์ํ ๋๋ csi provider๋ฅผ ์ง์ ๊ด๋ฆฌํ๊ฒ ๋๋๋ฐ, deckhouse ์๋ฃจ์
์ ๊ทธ๋ฐ ํด๋ฌ์คํฐ ์ด์์ ํ์ํ provider๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํด์ฃผ๋ ๊ฒ ๊ฐ์๋ค. ๊ทธ๋ฐ ๊ฒ๋ค ์ง์ ๊ด๋ฆฌํ๋ฉด์ ์ฅ์ ํ๋ฒ ๋๋ด์ผ ์ค๋ ฅ์ด ๋ง์ด ๋๋๋ฐโฆ ใ
ใ
Kubernetes is an extremely dynamic system. When operating the infrastructure in the K8s cluster, we always assume that any pod (or even a node!) might be deleted at any moment. To improve resilience, we are testing the system using various chaos engineering approaches. Mainly, we randomly kill Kubernetes nodes to see whether our applications are ready for pod restarts.
์ ์ด๋ฐ ์ง์ ํ๋์งโฆ ์ํผ ์ฌ๋ฌ ํ์ฌ์ K8s ์ด์ ํด๋ดค์ ํ ๋, ์ฌ๋ฌ ๋ฌธ์ ์ ์ฌ๋ฌ ๊ณ ๋ฏผ๋ค์ ํด๊ฒฐํ ํ์ฌ๋ผ๊ณ ์๊ฐํ๋ค. k8s iae exporter๋ ๋ง๋ค๊ฑธ ๋ณด๋ฉด K8s์ ๋ํด์ ์ ๋ฌธ๊ฐ ์ผ ๊ฒ ๊ฐ๋ค.