Kubernetes Tools/Istio

[Istio ๊ฐ€์ด๋“œ ep.31] 5๋ถ€ ์šด์˜ ๋ฐ ์ตœ์ ํ™” #1 | Istio ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ์ตœ์ ํ™”: ์„ฑ๋Šฅ ๋ถ€ํ•˜ ๋ถ„์„ ๋ฐ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ

ygtoken 2025. 3. 18. 12:10
728x90

๐Ÿ”น ๊ฐœ์š”

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Istio ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ ์„ฑ๋Šฅ ๋ถ€ํ•˜๋ฅผ ๋ถ„์„ํ•˜๊ณ , ๋ฆฌ์†Œ์Šค๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
Istio๋Š” ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ(Control Plane)๊ณผ ๋ฐ์ดํ„ฐ ํ”Œ๋ ˆ์ธ(Data Plane)์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ,
์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋˜๋ฉด ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์ ์šฉ ์†๋„ ์ง€์—ฐ, ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ ๋ฌธ์ œ, ๋†’์€ CPU ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๋“ฑ์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธ€์—์„œ๋Š” Istio ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ ๊ตฌ์„ฑ ์š”์†Œ๋ณ„ ์„ฑ๋Šฅ ๋ถ„์„, ์ž์› ์‚ฌ์šฉ๋Ÿ‰ ๋ชจ๋‹ˆํ„ฐ๋ง, ์ตœ์ ํ™” ๋ฐฉ๋ฒ• ๋ฐ ์‹ค์ „ ์ ์šฉ ์‚ฌ๋ก€๋ฅผ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


๐Ÿ”น 1. Istio ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ ๊ตฌ์„ฑ ์š”์†Œ์™€ ์—ญํ• 

Istio์˜ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์€ ์„œ๋น„์Šค ๋ฉ”์‹œ์— ๋Œ€ํ•œ ์„ค์ • ๋ฐ ์ •์ฑ…์„ ๊ด€๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.
์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋˜๋ฉด, ์„œ๋น„์Šค ๋ฉ”์‹œ ์ „์ฒด์˜ ์„ฑ๋Šฅ์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฏ€๋กœ ์ตœ์ ํ™”๊ฐ€ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

โœ… 1.1 Istio ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ

๊ตฌ์„ฑ ์š”์†Œ ์„ค๋ช…
istiod Istio ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ (์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ, ์ •์ฑ… ๊ด€๋ฆฌ)
Pilot Envoy ํ”„๋ก์‹œ ๊ตฌ์„ฑ ์ „๋‹ฌ (ํŠธ๋ž˜ํ”ฝ ๋ผ์šฐํŒ… ์„ค์ •)
Citadel mTLS ์ธ์ฆ์„œ ๊ด€๋ฆฌ (๋ณด์•ˆ ๋ฐ ์ธ์ฆ ๊ธฐ๋Šฅ ์ œ๊ณต)
Galley ์„ค์ • ๊ฒ€์ฆ ๋ฐ ์„œ๋น„์Šค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ
Injector Sidecar ์ž๋™ ์ฃผ์ž… ๊ด€๋ฆฌ

๐Ÿ”น 2. Istio ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ ์„ฑ๋Šฅ ๋ถ„์„ ๋ฐฉ๋ฒ•

โœ… 2.1 ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ

Istio ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์ด ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‚ฌ์šฉํ•˜๋Š” CPU ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ถ„์„ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

kubectl top pod -n istio-system

 

์ถœ๋ ฅ ์˜ˆ์ œ:

NAME                          CPU(cores)   MEMORY(bytes)
istiod-5d8b6f8d7c-xyz12       250m         500Mi
istio-ingressgateway-7a6d5    180m         450Mi

๐Ÿ’ก istiod์˜ CPU ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ๊ณผ๋„ํ•˜๊ฒŒ ๋†’๋‹ค๋ฉด, ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


โœ… 2.2 ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ ํ™œ์„ฑ ์—ฐ๊ฒฐ ์ˆ˜ ํ™•์ธ

Istio ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ(istiod)์ด ๊ด€๋ฆฌํ•˜๋Š” ํ™œ์„ฑ ์—ฐ๊ฒฐ ์ˆ˜(Envoy ํ”„๋ก์‹œ ๊ฐœ์ˆ˜)๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

kubectl exec -n istio-system -it $(kubectl get pod -l app=istiod -n istio-system -o jsonpath='{.items[0].metadata.name}') -- curl http://localhost:15014/metrics | grep istio_active

 

์ถœ๋ ฅ ์˜ˆ์ œ:

istio_active_connections 250

๐Ÿ’ก istio_active_connections ๊ฐ’์ด ๊ณผ๋„ํ•˜๊ฒŒ ๋†’๋‹ค๋ฉด, ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.


โœ… 2.3 ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ์†๋„ ํ™•์ธ

Istio ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ ์„ฑ๋Šฅ์„ ์ธก์ •ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ ์„ค์ • ๋ณ€๊ฒฝ์ด ๋ฐ˜์˜๋˜๋Š” ์†๋„๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

kubectl apply -f new-virtualservice.yaml
kubectl get virtualservice -n default

์ ์šฉ๋œ VirtualService๊ฐ€ ์ฆ‰์‹œ ๋ฐ˜์˜๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ง€์—ฐ ์‹œ๊ฐ„์ด ๊ธธ๋‹ค๋ฉด, ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ ๋ถ€ํ•˜๊ฐ€ ๊ณผ๋„ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ”น 3. Istio ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•

โœ… 3.1 Istiod์˜ CPU ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ๋ฆฌ์†Œ์Šค ์ œํ•œ ์„ค์ •

Istio ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ CPU ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ œํ•œํ•˜๋ ค๋ฉด istiod์˜ ๋ฆฌ์†Œ์Šค ์š”์ฒญ๊ณผ ์ œํ•œ์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: istiod
  namespace: istio-system
spec:
  template:
    spec:
      containers:
        - name: discovery
          resources:
            requests:
              cpu: "500m"   # ์ตœ์†Œ 500m CPU ์š”์ฒญ
              memory: "512Mi" # ์ตœ์†Œ 512Mi ๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญ
            limits:
              cpu: "1000m"  # ์ตœ๋Œ€ 1 CPU ์ œํ•œ
              memory: "1024Mi" # ์ตœ๋Œ€ 1Gi ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ

์„ค๋ช…:

  • requests.cpu: "500m" → Istiod๊ฐ€ ์ตœ์†Œ 500m(0.5 CPU)๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •
  • limits.cpu: "1000m" → ์ตœ๋Œ€ 1 CPU๊นŒ์ง€๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œํ•œ
  • requests.memory: "512Mi" → ์ตœ์†Œ 512Mi ๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญ
  • limits.memory: "1024Mi" → ์ตœ๋Œ€ 1Gi ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ

๐Ÿ’ก ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œํ•œํ•˜๋ฉด ๊ณผ๋„ํ•œ CPU ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


โœ… 3.2 Sidecar ์ฃผ์ž… ์ตœ์ ํ™” (ํ•„์š”ํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋งŒ ์ ์šฉ)

๋ชจ๋“  ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— Sidecar๋ฅผ ์ž๋™์œผ๋กœ ์ฃผ์ž…ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํŠน์ • ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ๋งŒ Sidecar๊ฐ€ ์ฃผ์ž…๋˜๋„๋ก ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

kubectl label namespace default istio-injection=enabled
kubectl label namespace kube-system istio-injection=disabled

๐Ÿ’ก istio-injection=disabled๋กœ ์„ค์ •ํ•˜๋ฉด, ๋ถˆํ•„์š”ํ•œ Sidecar ์ฃผ์ž…์„ ๋ฐฉ์ง€ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


โœ… 3.3 Envoy ํ”„๋กœ์„ธ์Šค ์ตœ์ ํ™” (Keepalive ์„ค์ • ์ ์šฉ)

Envoy ํ”„๋ก์‹œ๊ฐ€ ๋ถˆํ•„์š”ํ•œ ์—ฐ๊ฒฐ์„ ์ง€์†์ ์œผ๋กœ ์œ ์ง€ํ•˜๋ฉด ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์— ๋ถ€ํ•˜๋ฅผ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Keepalive ์„ค์ •์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: my-service-dr
  namespace: default
spec:
  host: my-service.default.svc.cluster.local
  trafficPolicy:
    connectionPool:
      http:
        http1MaxPendingRequests: 10  # ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์š”์ฒญ ๊ฐœ์ˆ˜ ์ œํ•œ
        maxRequestsPerConnection: 5  # ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ๋‹น ์ตœ๋Œ€ ์š”์ฒญ ๊ฐœ์ˆ˜ ์ œํ•œ
      tcp:
        maxConnections: 100  # ์ตœ๋Œ€ TCP ์—ฐ๊ฒฐ ์ˆ˜ ์ œํ•œ
    outlierDetection:
      consecutiveErrors: 5  # ์˜ค๋ฅ˜๊ฐ€ 5ํšŒ ๋ฐœ์ƒํ•˜๋ฉด ์—ฐ๊ฒฐ ํ•ด์ œ
      interval: 10s  # ์˜ค๋ฅ˜ ๊ฐ์ง€ ์ฃผ๊ธฐ
      baseEjectionTime: 30s  # ์—ฐ๊ฒฐ ํ•ด์ œ ํ›„ ์žฌ์‹œ๋„ ์‹œ๊ฐ„

์„ค๋ช…:

  • http1MaxPendingRequests: 10 → HTTP ์š”์ฒญ ๋Œ€๊ธฐ์—ด์„ 10๊ฐœ๋กœ ์ œํ•œ
  • maxRequestsPerConnection: 5 → ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ์—์„œ ์ตœ๋Œ€ 5๊ฐœ์˜ ์š”์ฒญ๋งŒ ํ—ˆ์šฉ
  • tcp.maxConnections: 100 → ์ตœ๋Œ€ 100๊ฐœ์˜ TCP ์—ฐ๊ฒฐ ์œ ์ง€
  • consecutiveErrors: 5 → 5๋ฒˆ ์—ฐ์† ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น ์—ฐ๊ฒฐ ์ฐจ๋‹จ

๐Ÿ’ก Envoy์˜ ์—ฐ๊ฒฐ ์ˆ˜๋ฅผ ์ตœ์ ํ™”ํ•˜๋ฉด ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ด๊ณ  ์„ฑ๋Šฅ์„ ํ–ฅ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ“Œ ๊ฒฐ๋ก 

  • Istio ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ ์„ฑ๋Šฅ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์—ฌ CPU ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ตœ์ ํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • istiod์˜ ๋ฆฌ์†Œ์Šค ์ œํ•œ์„ ์„ค์ •ํ•˜๋ฉด ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์ด ๊ณผ๋ถ€ํ•˜๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Sidecar ์ž๋™ ์ฃผ์ž…์„ ํŠน์ • ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ๋งŒ ํ™œ์„ฑํ™”ํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Envoy์˜ ์—ฐ๊ฒฐ ํ’€(Connection Pool) ๋ฐ Keepalive ์„ค์ •์„ ์ตœ์ ํ™”ํ•˜๋ฉด ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ๋ถ€ํ•˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

728x90