[Docker/K8S] ์›น ์„œ๋น„์Šค๋ฅผ GKE๋กœ ๋ฐฐํฌํ•˜๊ธฐ(2) - ๋ฐฑ์—”๋“œ ์›Œํฌ๋กœ๋“œ ๊ตฌ์„ฑํŒŒ์ผ ๋งŒ๋“ค๊ธฐ

2025. 11. 12. 15:55ยท๐Ÿณ Docker & Kubernetes
728x90

์ด๋ฒˆ์— ์—…๋ฌด๊ณผ์ •์—์„œ ์ผ๋˜ ํˆด๋“ค์„ ์ •๋ฆฌํ•ด๋ณด๋ฉด์„œ k8s ์›น ๋ฐฐํฌ๋ฅผ ์ž‘๋…„์— ํ–ˆ๋˜ ๊ธฐ์–ต์„ ๋˜์‚ด๋ ค ๋‹ค์‹œ ๊ณต๋ถ€ํ•ด๋ณด๋ฉด์„œ ํฌ์ŠคํŒ…ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ์ง€๋‚œ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋จผ์ € ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์— ์˜ฌ๋ฆด dockerfile์„ ๋งŒ๋“ค์–ด์„œ docker compose๋ฅผ ์ด์šฉํ•ด ๋ฌถ์–ด์„œ ์‹คํ–‰ํ•ด ๋™์ž‘ ํ…Œ์ŠคํŠธ๊นŒ์ง€ ํ•ด๋ณด์•˜๋‹ค. ์ด ํฌ์ŠคํŒ…์—์„œ๋Š” kubectl, gcloud๋ฅผ ์„ค์น˜ํ•˜๊ณ  fastapi ์ธก ์›Œํฌ๋กœ๋“œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ gke ์œ„์— ์˜ฌ๋ ค๋ณธ๋‹ค.

๋ชฉํ‘œ

  • GKE(Google Kubernetes Engine)์™€ GCE(Google Compute Engine) ๋“ฑ์„ ํ™œ์šฉํ•œ ํ’€์Šคํƒ ์›น ์„œ๋น„์Šค ๋ฐฐํฌํ•˜๊ธฐ
    1. docker file ๊ตฌ์„ฑํ•˜๊ธฐ
    2. kubectl ํ™œ์šฉํ•˜๊ธฐ
    3. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ตฌ์„ฑ์— ๊ด€ํ•œ ์ดํ•ด ๋ฐ ์ ์šฉ
      • Deployment
      • StatefulSet
      • Persistent Volume
      • Service
      • Gateway 

 

1. kubectl, gcloud ์„ค์น˜

  • Kubernetes์˜ ๋ช…๋ น์ค„ ๋„๊ตฌ์ธ kubectl์ด๋‹ค. ์—ฐ๊ฒฐํ•œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ •๋ณด๋ฅผ ๋ณด๊ฑฐ๋‚˜, ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜, ์ง์ ‘ ๋‚ด๋ถ€๋กœ ์ ‘์†ํ•˜๋Š” ๋“ฑ ๋Œ€๋ถ€๋ถ„์˜ ๋ช…๋ น ์ฒ˜๋ฆฌ๋ฅผ ์ด๊ฑธ ์ด์šฉํ•ด์„œ ํ•œ๋‹ค. 
 

๋„๊ตฌ ์„ค์น˜

์ปดํ“จํ„ฐ์—์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋„๊ตฌ๋ฅผ ์„ค์ •ํ•œ๋‹ค.

kubernetes.io

  • gcloud CLI๋Š” google cloud ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑ, ์‚ญ์ œ, ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ช…๋ น์ค„ ๋„๊ตฌ์ด๋‹ค. google์—์„œ ์ œ๊ณตํ•˜๋Š” gke(google kubernetes engine)์„ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ์œผ๋‹ˆ ๊ฐ™์ด ์„ค์น˜ํ•ด์ค€๋‹ค. 
  • ๋งŒ์ผ gke๊ฐ€ ์•„๋‹ˆ๋ผ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ kubernetes๋ฅผ ํ™œ์šฉํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด minikube๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋œ๋‹ค. ์–ด์ฐจํ”ผ yaml ํŒŒ์ผ ๊ตฌ์„ฑ์€ ๋˜‘๊ฐ™๊ณ , ๊ธฐ๋ณธ์ ์œผ๋กœ google kubernetes engine์„ ์‚ฌ์šฉํ•ด์„œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๋‹ค ๋ณด๋ฉด ๋ช‡์ฒœ์›์ด์ง€๋งŒ ๋ˆ์ด ๋‚˜๊ฐ€๊ธฐ ๋•Œ๋ฌธ์—... 
    • minikube๋Š” k3s๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋Š” kubernetes ๊ฒฝ๋Ÿ‰ํ™” ์†”๋ฃจ์…˜์ด๋‹ค. ๋กœ์ปฌ์—์„œ ๋Œ๋ฆฌ๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์— ๊ฐ€๊น๊ณ , ์ตœ์†Œ ์‚ฌ์–‘์„ ๋งŒ์กฑํ•˜๋ฉด ๋‚ด ํ˜ธ์ŠคํŠธ๋จธ์‹  ์œ„์—์„œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์˜ฌ๋ ค๋ณผ ์ˆ˜ ์žˆ๋Š” ๋Œ€์‹  ๋ฉ€ํ‹ฐ๋…ธ๋“œ๋ผ๋˜๊ฐ€ k8s๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ช‡๋ช‡ ๊ธฐ๋Šฅ ์‚ฌ์šฉ์€ ์ œ์•ฝ์ด ๋”ฐ๋ฅธ๋‹ค.
 

gcloud CLI ์„ค์น˜  |  Google Cloud SDK  |  Google Cloud Documentation

์ด ํŽ˜์ด์ง€๋Š” Cloud Translation API๋ฅผ ํ†ตํ•ด ๋ฒˆ์—ญ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜๊ฒฌ ๋ณด๋‚ด๊ธฐ gcloud CLI ์„ค์น˜ ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•ด ์ •๋ฆฌํ•˜๊ธฐ ๋‚ด ํ™˜๊ฒฝ์„ค์ •์„ ๊ธฐ์ค€์œผ๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถ„๋ฅ˜ํ•˜์„ธ์š”. ์ด ํŽ˜์ด์ง€์—๋Š” Google Cloud CLI

docs.cloud.google.com

 

 

minikube start

minikube is local Kubernetes, focusing on making it easy to learn and develop for Kubernetes. All you need is Docker (or similarly compatible) container or a Virtual Machine environment, and Kubernetes is a single command away: minikube start What you’ll

minikube.sigs.k8s.io

  • ์„ค์น˜ ํ›„ ์ปค๋งจ๋“œ๋ผ์ธ์— kubectl, gcloud(ํ˜น์€ minikube)๋ฅผ ์ณ๋ณด๊ณ  ์ž˜ ๋‚˜์˜ค๋ฉด ๋„˜์–ด๊ฐ€์ž.

 

A. google cloud์—์„œ kubernetes cluster ์ƒ์„ฑํ•˜๊ธฐ

 

Google ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ

๋กœ๊ทธ์ธ Google ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ์œผ๋กœ ์ด๋™

accounts.google.com

  • ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์•„ํ‚คํƒ์ฒ˜์ด๋‹ค.

  • ๊ฐœ๋…์„ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์ด ํฌ์ŠคํŠธ์˜ ์ฃผ์š” ๋ชฉํ‘œ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๋…ธ๋“œ ๋ถ€๋ถ„ ์œ„์ฃผ๋กœ ๋ณด์ž. ํด๋Ÿฌ์Šคํ„ฐ๋Š” pod๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์†Œ ํ•˜๋‚˜ ์ด์ƒ์˜ ์›Œ์ปค ๋…ธ๋“œ๋ฅผ ํ•„์š”๋กœ ํ•œ๋‹ค.
  • ์›Œ์ปค ๋…ธ๋“œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์›Œํฌ๋กœ๋“œ์˜ ๊ตฌ์„ฑ ์š”์†Œ์ธ ํŒŒ๋“œ๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๊ณ , control plane์œผ๋กœ ๋ฌถ์—ฌ์žˆ๋Š” ์นœ๊ตฌ๋“ค์ด ์›Œ์ปค๋…ธ๋“œ์™€ pod๋ฅผ ๊ด€๋ฆฌ๊ฐ๋…ํ•œ๋‹ค.
  • google kubernetes์˜ ๊ฒฝ์šฐ multi node๋ฅผ ์ง€์›ํ•˜๋ฏ€๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ํ•˜๋‚˜์˜ ํด๋Ÿฌ์Šคํ„ฐ ์•ˆ์—์„œ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

GKE ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ

    • gcp์—์„œ ํด๋Ÿฌ์Šคํ„ฐ๋Š” autopilot๊ณผ standard๊ฐ€ ์žˆ๋Š”๋ฐ, ๋‹น์žฅ ๋ฐฐํฌํ•ด์„œ ์‚ฌ์šฉํ•  ๊ฒƒ๋„ ์•„๋‹ˆ๊ฑฐ๋‹ˆ์™€ ์ž๋™ ์šด์˜/๊ด€๋ฆฌ๋˜๋Š” autopilot์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋” ๋น„์‹ธ๋ฏ€๋กœ standard์—์„œ ๋น„์šฉ์„ ์ข€ ์ค„์—ฌ์„œ ํ…Œ์ŠคํŠธํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. 
    • ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ• ์ง€๋Š” ๊ฐœ์ธ ์ž์œ ์ง€๋งŒ, ๋ฐ˜๋“œ์‹œ ํ™•์ธํ•ด์•ผํ•  ์ ์€ cluster๋ฅผ ์ง€์—ญ(region)์œผ๋กœ ํ• ๋‹นํ•ด์•ผํ•œ๋‹ค. ์˜์—ญ(zone)์œผ๋กœ ํ•˜๋Š”๊ฒŒ ๋” ์ €๋ ดํ•˜์ง€๋งŒ, ๋‚˜์ค‘์— ๋ฐฐํฌํ•  ๋•Œ gateway api๋ฅผ ํ†ตํ•ด ํ•  ์˜ˆ์ •์ธ๋ฐ ์˜์—ญ ํด๋Ÿฌ์Šคํ„ฐ๋Š” ๋ณต์žกํ•˜๋‹ค. ์ฒ˜์Œ๋ถ€ํ„ฐ ์ง€์—ญ์œผ๋กœ ์žก์•„๋‘์ž. 
    • ๋‚˜๋Š” ๋…ธ๋“œ ๊ฐœ์ˆ˜๋ฅผ ์ค„์ด๊ณ , ๋จธ์‹ ์„ small๋กœ ์„ ํƒํ•˜๊ณ , ๋ถ€ํŒ…๋””์Šคํฌ ํฌ๊ธฐ๋ฅผ ์ค„์—ฌ์„œ ๊ฐ€๊ฒฉ์„ ์ข€ ๋‚ฎ์ท„๋‹ค.
    • ๋„คํŠธ์›Œํ‚น ํƒญ ์ตœํ•˜๋‹จ์— load balancer, ingress, gateway์—์„œ gateway ์‚ฌ์šฉ์„ค์ •์— ์ฒดํฌํ•ด์ค€๋‹ค.
      • ์ฒดํฌํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋‹ค ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ข€ ๋” ๋ณต์žกํ•˜๋‹ค.
    • ๊ทธ๋ฆฌ๊ณ  ๋งŒ๋“ค๊ธฐ. ์ข€ ๊ฑธ๋ฆฌ๋‹ˆ๊นŒ ์—ฌ์œ ๋กญ๊ฒŒ ๊ธฐ๋‹ค๋ฆฌ์ž.

 

2. ์›น yaml ํŒŒ์ผ ๊ตฌ์„ฑํ•˜๊ธฐ

  • ์ด ์˜ˆ์ œ์—์„œ ์‚ฌ์šฉํ•œ ๋„์ปค ์ด๋ฏธ์ง€๋Š” fastapi ์™€ jquery๋กœ ๋™์ž‘ํ•˜๋Š” ํ”„๋ก ํŠธ-๋ฐฑ์—”๋“œ ์ด๋ฏธ์ง€ ํ•˜๋‚˜, postgres ๊ณต์‹ ์ด๋ฏธ์ง€ ํ•˜๋‚˜์ด๋‹ค.
  • ์ง€๋‚œ ํฌ์ŠคํŒ…์—์„œ ๋งŒ๋“ค์—ˆ๋˜ ๋„์ปค ์ด๋ฏธ์ง€ ์ค‘ web์— ํ•ด๋‹นํ•˜๋Š” ์ปค์Šคํ…€ ์ด๋ฏธ์ง€๋ฅผ ํ™œ์šฉํ•œ๋‹ค.
  • postgres ๋Š” ๊ณต์‹ ์ด๋ฏธ์ง€์—์„œ ์ด์ „ ํฌ์ŠคํŒ…์—์„œ ํ–ˆ๋˜ ์ž‘์—…๊ณผ ๋น„์Šทํ•œ ์ž‘์—…์„ ์ƒˆ๋กœ ํ•ด์ค„ ๊ฒƒ์ด๋‹ค.

 

A. Deployment ๋งŒ๋“ค๊ธฐ

  • Deployment ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์›Œํฌ๋กœ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด pod์™€ replica set์„ ๊ด€๋ฆฌ ๋ฐ ๋ฐฐํฌํ•œ๋‹ค.
  • ์ฃผ๋กœ Stateless ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์˜ฌ๋ฆฐ๋‹ค.
  • ์ฃผ์š” ๊ฐœ๋…์œผ๋กœ Replica set์ด ์žˆ๋Š”๋ฐ, ์‹คํ–‰ํ•˜๋Š” pod๋“ค์˜ ๋ณต์ œ๋ณธ ์„ธํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ฐ€ ์–ด๋–ค ๊ฒƒ์ด ๋‹ค์šด๋˜๊ฑฐ๋‚˜ ์‚ญ์ œ๋˜๋ฉด ๋ณต์ œ๋ณธ์„ ๋ฐ”๋กœ ์˜ฌ๋ ค์„œ ์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
    • ์ด๊ฑธ ํ™œ์šฉํ•ด์„œ ์„œ๋น„์Šค์˜ ๋ฒ„์ „ ๊ด€๋ฆฌ(์—…๋ฐ์ดํŠธ, ๋กค๋ฐฑ) ๋“ฑ์—๋„ ์‚ฌ์šฉ๋œ๋‹ค.

 

  • kubernetes yaml ํŒŒ์ผ์€ ๊ฑฐ์˜ ๋น„์Šทํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋Š”๋‹ค.
    • apiVersion
    • kind
    • metadata
    • ์ด ๋„ค ๊ฐ€์ง€๊ฐ€ ํ•„์ˆ˜์ ์œผ๋กœ ๋“ค์–ด๊ฐ€๊ณ , secret์ด๋‚˜ configmap์ด ์•„๋‹Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์›Œํฌ๋กœ๋“œ ๋“ค์€ spec์ด ์ถ”๊ฐ€๋œ๋‹ค.

1. ๊ณตํ†ต ์š”์†Œ

apiVersion: apps/v1
kind: Deployment
metadata:
  name: server
  namespace: web
  labels:
    app: server
  • apiVersion์€ kind์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค. Deployment์˜ ๊ฒฝ์šฐ apps/v1.
  • kind์— ์ข…๋ฅ˜๋ฅผ ์“ด๋‹ค.
  • metadata๋Š” ๋ง ๊ทธ๋Œ€๋กœ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋‹ค. name์€ pod์˜ ์ด๋ฆ„, namespace๋Š” ์ด deployment๋ฅผ ๋ฐฐํฌํ•  namespace, labels:app ์€ ์ผ์ข…์˜ ์‹๋ณ„์„ ์œ„ํ•œ ํƒœ๊ทธ๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. app ์ด๋ฆ„์ด ๊ฐ™์€ pod ๋ผ๋ฆฌ ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • namespace๋Š” ๋ณ„๋„๋กœ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด default๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ default์—๋Š” ๋‹ค๋ฅธ ๊ธฐ๋ณธ pod๋“ค๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ—ท๊ฐˆ๋ฆผ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด์„œ ์ƒˆ๋กœ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์„œ ์“ฐ๊ธฐ๋กœ ํ–ˆ๋‹ค. 

2. spec

  • spec ํ•˜์œ„์—๋Š” replicas, selector, template๊ฐ€ ์žˆ๋‹ค. 
    • replicas : ๋ณต์ œ๋ณธ ๊ฐœ์ˆ˜
    • selector : replica set์ด ๋ณต์ œํ•  pod ์ฐธ์กฐ๋ฅผ ์œ„ํ•œ ๊ตฌ๋ณ„์ž
    • template : replica set์ด ๋ณต์ œํ•  ๋•Œ ์‚ฌ์šฉํ•  pod ์ •๋ณด ์ž…๋ ฅ
spec:
  replicas: 6
  selector:
    matchLabels:
      app: server
  template:
  • template ์•„๋ž˜์— ๋“ค์–ด๊ฐ€๋Š” ์ •๋ณด๋“ค์ด container ์ •๋ณด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
spec:
  containers:
    - name: server
      image: mysterias/web-service:251111
      env:
        - name: db_user
          valueFrom:
            secretKeyRef:
              name: db-credentials
              key: DB_USER
        - name: db_password
          valueFrom:
            secretKeyRef:
              name: db-credentials
              key: DB_PASSWORD
        - name: db_host
          value: "postgresql"
        - name: db_port
          value: "5432"
        - name: db_name
          value: "energy_monitor"
        - name: POSTGRES_USER
          valueFrom:
            secretKeyRef:
              name: postgres-credentials
              key: POSTGRES_USER
        - name: POSTGRES_PASSWORD
          valueFrom:
            secretKeyRef:
              name: postgres-credentials
              key: POSTGRES_PASSWORD
      ports:
        - containerPort: 8080
          name: server
  • containers ๋‚ด๋ถ€์— ํฌ๊ฒŒ 4๊ฐ€์ง€๊ฐ€ ํ™•์ธ๋œ๋‹ค.
    • name : ๊ธฐ๋ณธ pod ์ด๋ฆ„
    • image : container์˜ image, docker hub์—์„œ pull ํ•˜๋„๋ก ํ–ˆ๋‹ค.
    • env : ํ™˜๊ฒฝ ๋ณ€์ˆ˜
    • ports : ์ปจํ…Œ์ด๋„ˆ ํฌํŠธ ์ •์˜
  • env ํ™˜๊ฒฝ๋ณ€์ˆ˜ ํŒŒํŠธ๋ฅผ ๋ณด๋ฉด ๋‘ ๊ฐ€์ง€ ํ˜•ํƒœ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 
- name: db_name
  value: "energy_monitor"
  
- name: POSTGRES_USER
  valueFrom:
    secretKeyRef:
      name: postgres-credentials
      key: POSTGRES_USER
  • ์ด๋Š” ์•„๋ž˜ ํ˜•ํƒœ๋Š” kind ์ค‘ ํ•˜๋‚˜์ธ Secret ์œผ๋กœ ๋ฏธ๋ฆฌ ์ •์˜ํ•ด๋‘” ๊ฐ’์„ ์ฐธ์กฐํ•ด์„œ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. 
  • ์ฒ˜์Œ์—๋Š” ์œ„ ํ˜•ํƒœ๋กœ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ–ˆ์—ˆ๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ deployment๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ์— ์˜ฌ๋ฆฌ๋ฉด yaml ํŒŒ์ผ์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ์ƒ ์ทจ์•ฝํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ํŒŒ์ผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ์ˆจ๊ธฐ๊ฑฐ๋‚˜, ๋‹ค๋ฅด๊ฒŒ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๋‹ค๊ฐ€ ๋งŒ๋‚œ ๊ฒƒ์ด ๋ฐ”๋กœ Secret ํ˜•ํƒœ์ด๋‹ค.

B. Secrets

# Secret
apiVersion: v1
kind: Secret
metadata:
  name: postgres-credentials
  namespace: web
type: Opaque
stringData:
  POSTGRES_USER: "postgres"
  POSTGRES_PASSWORD: "postgres"
  • Secret์—์„œ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” type์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ, Opaque ๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ํƒ€์ž…์ด๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค.
  • data ํ•„๋“œ๋Š” data ํ˜น์€ stringData๋กœ ๋‚˜๋‰˜๋Š”๋ฐ, stringData๋กœ ํ•  ๊ฒฝ์šฐ base64 ์ธ์ฝ”๋”ฉ ์—†์ด ๋ฌธ์ž์—ด ๋“ฑ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ , data๋ฅผ ์“ธ ๊ฒฝ์šฐ์—๋Š” base64 ์ธ์ฝ”๋”ฉ์ด ์š”๊ตฌ๋œ๋‹ค.
  • ์ด์ œ kubernetes cluster์— ๋“ฑ๋กํ•˜๋ฉด secret์— ์žˆ๋Š” ๊ฐ’์„ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„์™€์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 
kubectl create -f postgres-secret.yaml

๋ฐ”๋กœ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•œ deployment์˜ yaml
console์—์„œ ๋ณด์•ˆ์ด ์œ ์ง€๋˜๋Š” secret'

 

  • ๋จผ์ € secret์„ ์˜ฌ๋ ค์•ผ ์ดํ›„ deployment์—์„œ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์ˆœ์„œ์— ์œ ์˜ํ•  ๊ฒƒ.

 

C. Service ๋งŒ๋“ค๊ธฐ

  • ์ด๋ ‡๊ฒŒ ํ•ด์„œ ๋งŒ์ผ deployment๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ์— ์˜ฌ๋ ธ๋‹ค๋ฉด ์ด๊ฒƒ์€ pod๋กœ ๋™์ž‘ํ•œ๋‹ค. ๋‹ค๋ฅธ pod์—์„œ ์ด Pod๋กœ ์ง์ ‘ ์—ฐ๊ฒฐํ•ด์„œ ํ†ต์‹ ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, replica set์„ ๋งŒ๋“ค์—ˆ๋˜ ๊ฒƒ์„ ์ƒ๊ฐํ•ด๋ณด๋ฉด Pod๋Š” ์–ธ์ œ๋“  ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๊ณ  ๋ฐ”๋€Œ๊ฑฐ๋‚˜ ์‚ฌ๋ผ์ง„๋‹ค๋ฉด ์ด์ „๊ณผ ip๊ฐ€ ๊ฐ™์œผ๋ฆฌ๋ผ๋Š” ๋ณด์žฅ์ด ์—†๋‹ค.
  • ๋•Œ๋ฌธ์— ์ด Pod, Container์™€ ํ†ต์‹ ํ•  ๋•Œ ์ข€ ๋” ์•ˆ์ •์ ์œผ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„œ๋น„์Šค(reverse proxy or load balancer)๋ฅผ ๋ถ™์ธ๋‹ค.
    • ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋น„์Šค ip ์ชฝ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋ฉด ์„œ๋ฒ„ ๋ชฉ๋ก์„ reverse proxy๊ฐ€ ํ™•์ธํ•˜๋ฉด์„œ ์‚ด์•„์žˆ๋Š” pod๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์—ฐ๊ฒฐํ•ด์ค€๋‹ค.
# Service
apiVersion: v1
kind: Service
metadata:
  name: server-svc
  namespace: web
  labels:
    app: server
spec:
  selector:
    app: server
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: loadBalancer
  • spec์˜ selector๋ฅผ ๋ณด๋ฉด ์šฐ๋ฆฌ๊ฐ€ deployment์—์„œ labels๋ฅผ app: server๋กœ ์„ค์ •ํ–ˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ด ์„œ๋น„์Šค๊ฐ€ label app = server์ธ Pod ์ค‘์— ์‚ด์•„์žˆ๋Š” ๊ฒƒ์„ ์ฐพ์•„์„œ ์—ฐ๊ฒฐํ•˜๋ฆฌ๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • ports ๋ถ€๋ถ„์ด ์ค‘์š”ํ•œ๋ฐ(๋งจ๋‚  target์ด๋ž‘ ๊ทธ๋ƒฅ port๋ž‘ ํ—ท๊ฐˆ๋ฆผ) targetPort๋Š” container ๋‚ด๋ถ€ ํฌํŠธ์ด๊ณ , port๋Š” ์™ธ๋ถ€์— ๋…ธ์ถœํ•  ํฌํŠธ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
    • 8080 ํฌํŠธ๋Š” pod ๋‚ด๋ถ€์—์„œ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” gunicorn ํฌํŠธ
    • 80 ํฌํŠธ๋Š” ์ด ์›Œํฌ๋กœ๋“œ ๋ฐ”๊นฅ์˜ ๋‹ค๋ฅธ ์›Œํฌ๋กœ๋“œ์—์„œ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด์„œ ์š”์ฒญ์„ ๋ณด๋‚ผ ํฌํŠธ
    • ์„œ๋น„์Šค๋Š” 80 ํฌํŠธ๋กœ ๋“ค์–ด์˜จ ์š”์ฒญ์„ ๋ฐ›์•„์„œ > ์‚ด์•„์žˆ๋Š” pod๋ฅผ ํ™•์ธํ•˜๊ณ  > ๊ทธ pod์˜ 8080 ํฌํŠธ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด์ค€๋‹ค.
  • type์„ ๋ณด๋ฉด loadBalancer๋กœ ๋˜์–ด์žˆ๋‹ค. GKE์—์„œ loadBalancer type์˜ service๋Š” ๊ณ ์œ ์˜ ip ์ฃผ์†Œ๋ฅผ ๊ฐ–๊ณ  ์™ธ๋ถ€ ์ ‘์†์ด ํ—ˆ์šฉ๋œ๋‹ค. GKE๋ฅผ ์‚ฌ์šฉ ์ค‘์ผ ๊ฒฝ์šฐ ip๊ฐ€ ํ• ๋‹น๋˜๋ฉด <IP_ADDRESS>:80 ์ฃผ์†Œ๋กœ ์ ‘์†ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.
  • ์ถ”ํ›„ gateway api๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ •์‹์œผ๋กœ ์ ‘์†ํ•˜๋„๋ก ๋งŒ๋“ค ๋•Œ์—๋Š” Cluster IP ํƒ€์ž…์œผ๋กœ ๋ฐ”๊พธ์–ด์ฃผ์–ด์•ผํ•œ๋‹ค. ์ด ๋‚ด์šฉ์€ ์ถ”ํ›„์—...
728x90
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿณ Docker & Kubernetes' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Docker/K8S] ์›น ์„œ๋น„์Šค๋ฅผ GKE๋กœ ๋ฐฐํฌํ•˜๊ธฐ(4) - Gateway API๋กœ ๋ฐฐํฌํ•˜๊ธฐ  (0) 2025.11.19
[Docker/K8S] ์›น ์„œ๋น„์Šค๋ฅผ GKE๋กœ ๋ฐฐํฌํ•˜๊ธฐ(3) - DB ์›Œํฌ๋กœ๋“œ ์„ค์ •ํ•˜๊ธฐ  (0) 2025.11.13
[Docker/K8S] ์›น ์„œ๋น„์Šค๋ฅผ GKE๋กœ ๋ฐฐํฌํ•˜๊ธฐ(1) - Dockerfile ๊ตฌ์„ฑ, Docker compose๋กœ ํ™•์ธํ•˜๊ธฐ  (0) 2025.11.11
[Docker + ELK] Docker ELK๋ฅผ ์‚ฌ์šฉํ•ด์„œ PostgreSQL DB ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜๊ธฐ  (1) 2023.12.21
[Docker] Docker ์ž…๋ฌธ - Docker Image, Container, ๋ฒ„์ „ ๊ด€๋ฆฌ์™€ moniwiki ๋ฐฐํฌ ์˜ˆ์ œ๊นŒ์ง€  (1) 2023.04.27
'๐Ÿณ Docker & Kubernetes' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Docker/K8S] ์›น ์„œ๋น„์Šค๋ฅผ GKE๋กœ ๋ฐฐํฌํ•˜๊ธฐ(4) - Gateway API๋กœ ๋ฐฐํฌํ•˜๊ธฐ
  • [Docker/K8S] ์›น ์„œ๋น„์Šค๋ฅผ GKE๋กœ ๋ฐฐํฌํ•˜๊ธฐ(3) - DB ์›Œํฌ๋กœ๋“œ ์„ค์ •ํ•˜๊ธฐ
  • [Docker/K8S] ์›น ์„œ๋น„์Šค๋ฅผ GKE๋กœ ๋ฐฐํฌํ•˜๊ธฐ(1) - Dockerfile ๊ตฌ์„ฑ, Docker compose๋กœ ํ™•์ธํ•˜๊ธฐ
  • [Docker + ELK] Docker ELK๋ฅผ ์‚ฌ์šฉํ•ด์„œ PostgreSQL DB ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜๊ธฐ
darly213
darly213
ํ˜ธ๋ฝํ˜ธ๋ฝํ•˜์ง€ ์•Š์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด๋ณด์ž
  • darly213
    ERROR DENY
    darly213
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (109)
      • ๐Ÿฌ ML & Data (55)
        • ๐ŸŒŠ Computer Vision (2)
        • ๐Ÿ“ฎ Reinforcement Learning (17)
        • ๐Ÿ“˜ ๋…ผ๋ฌธ & ๋ชจ๋ธ ๋ฆฌ๋ทฐ (8)
        • ๐Ÿฆ„ ๋ผ์ดํŠธ ๋”ฅ๋Ÿฌ๋‹ (3)
        • โ” Q & etc. (5)
        • ๐ŸŽซ ๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹ (20)
      • ๐Ÿฅ Web (21)
        • โšก Back-end | FastAPI (2)
        • โ›… Back-end | Spring (5)
        • โ” Back-end | etc. (9)
        • ๐ŸŽจ Front-end (4)
      • ๐ŸŽผ Project (8)
        • ๐ŸงŠ Monitoring System (8)
      • ๐Ÿณ Docker & Kubernetes (7)
      • ๐Ÿˆ Algorithm (0)
      • ๐Ÿ”ฎ CS (2)
      • ๐ŸŒ Networking (0)
      • ๐ŸŒˆ DEEEEEBUG (2)
      • ๐ŸŒ  etc. (10)
      • ๐Ÿ˜ผ ์‚ฌ๋‹ด (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ๋ฐฉ๋ช…๋ก
    • GitHub
    • Notion
    • LinkedIn
  • ๋งํฌ

    • Github
    • Notion
  • ๊ณต์ง€์‚ฌํ•ญ

    • Contact ME!
  • 250x250
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
darly213
[Docker/K8S] ์›น ์„œ๋น„์Šค๋ฅผ GKE๋กœ ๋ฐฐํฌํ•˜๊ธฐ(2) - ๋ฐฑ์—”๋“œ ์›Œํฌ๋กœ๋“œ ๊ตฌ์„ฑํŒŒ์ผ ๋งŒ๋“ค๊ธฐ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”