๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
[DevOps]/Kubernetes

kubernetes - Label & Selector์˜ ์—ญํ•  ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ

by ํŒกํŽ‘ํ 2023. 10. 26.
728x90

๐Ÿ“Œ Label & Selector

๋ ˆ์ด๋ธ” (Label)

  • ๋ ˆ์ด๋ธ”์€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฆฌ์†Œ์Šค์— ๋ถ€์—ฌ๋˜๋Š” ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ, ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ๋ถ„๋ฅ˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
  • ๋ ˆ์ด๋ธ”์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•˜๋ฉฐ ๋ฆฌ์†Œ์Šค์— ์œ ์—ฐํ•˜๊ฒŒ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•˜๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, "app: frontend"๋ผ๋Š” ๋ ˆ์ด๋ธ”์„ ๊ฐ€์ง„ ํŒŒ๋“œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ”„๋ŸฐํŠธ์—”๋“œ ์„œ๋น„์Šค์ž„์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
    • ๋ ˆ์ด๋ธ”์€ ํŠน์ • ๋ฆฌ์†Œ์Šค์— ์—ฌ๋Ÿฌ ๊ฐœ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‹ค์–‘ํ•œ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์…€๋ ‰ํ„ฐ (Selector)

  • ์…€๋ ‰ํ„ฐ๋Š” ๋ ˆ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ๋ฆฌ์†Œ์Šค๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
  • ๋ฆฌ์†Œ์Šค๋ฅผ ๊ทธ๋ฃนํ™”ํ•˜๊ณ  ์ฟผ๋ฆฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋Š” ํŠน์ • ๋ ˆ์ด๋ธ”๊ณผ ์ผ์น˜ํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด "app=frontend"๋ผ๋Š” ์…€๋ ‰ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด "app: frontend" ๋ ˆ์ด๋ธ”์„ ๊ฐ€์ง„ ๋ชจ๋“  ํŒŒ๋“œ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ด๋ฅผ ํ†ตํ•ด ํŒŒ๋“œ๋ฅผ ๊ทธ๋ฃนํ™”ํ•˜๊ณ  ์„ ํƒ๋œ ํŒŒ๋“œ์— ๋Œ€ํ•ด ์ผ๊ด„์ ์ธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค์™€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“œ ์ •๋ฆฌ

  • ๋ ˆ์ด๋ธ”๊ณผ ์…€๋ ‰ํ„ฐ์˜ ์กฐํ•ฉ์€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ๋ฆฌ์†Œ์Šค ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด ์„œ๋น„์Šค ๋ฆฌ์†Œ์Šค๋Š” ์…€๋ ‰ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ๋ ˆ์ด๋ธ”์„ ๊ฐ€์ง„ ํŒŒ๋“œ๋ฅผ ์„ ํƒํ•˜๊ณ , ํ•ด๋‹น ํŒŒ๋“œ๋กœ์˜ ํŠธ๋ž˜ํ”ฝ์„ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑํ•œ๋‹ค.
    • ์ด๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŒŒ๋“œ๋ฅผ ๋™์ ์œผ๋กœ ํ™•์žฅํ•˜๊ฑฐ๋‚˜ ์ถ•์†Œํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ“Œ ์˜ˆ์‹œ

โŒจ๏ธ ReplicaSet์—์„œ์˜ ๋ ˆ์ด๋ธ”๊ณผ ์…€๋ ‰ํ„ฐ

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: my-replicaset
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-container
          image: my-image
  • my-replicaset์ด๋ผ๋Š” ์ด๋ฆ„์˜ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ์ƒ์„ฑํ•˜๋Š” yml ํŒŒ์ผ์ด๋‹ค.
  • replicas: 3์€ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์ด ์œ ์ง€ํ•ด์•ผ ํ•  ํŒŒ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ 3๊ฐœ๋กœ ์ง€์ •ํ•จ์„ ์˜๋ฏธํ•œ๋‹ค.
  • selector.matchLabels๋ฅผ ํ†ตํ•ด my-replicaset์€ app: my-app ๋ ˆ์ด๋ธ”์„ ๊ฐ€์ง„ ํŒŒ๋“œ๋ฅผ ์„ ํƒํ•  ๊ฒƒ์ž„์„ ๋ช…์‹œํ•œ๋‹ค.
  • template๋Š” ๋ ˆํ”Œ๋ฆฌ์นด์…‹์ด ์ƒ์„ฑํ•˜๋Š” ํŒŒ๋“œ์˜ ํ…œํ”Œ๋ฆฟ์„ ์ •์˜ํ•œ๋‹ค.
    • ์—ฌ๊ธฐ์—์„œ๋Š” metadata.labels๋ฅผ ํ†ตํ•ด ๋ ˆํ”Œ๋ฆฌ์นด์…‹์ด ์ƒ์„ฑํ•˜๋Š” ํŒŒ๋“œ์— app: my-app์ด๋ผ๋Š” ์ด๋ฆ„์˜ ๋ ˆ์ด๋ธ”์„ ๋ถ€์—ฌํ•œ๋‹ค.

 

โŒจ๏ธ Deployment์—์„œ์˜ ๋ ˆ์ด๋ธ”๊ณผ ์…€๋ ‰ํ„ฐ

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-container
          image: my-image
  • my-deployment์ด๋ผ๋Š” ์ด๋ฆ„์˜ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” yml ํŒŒ์ผ์ด๋‹ค.
  • replicas: 3์€ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๊ฐ€ ์œ ์ง€ํ•ด์•ผ ํ•  ํŒŒ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ 3๊ฐœ๋กœ ์ง€์ •ํ•จ์„ ์˜๋ฏธํ•œ๋‹ค.
  • selector.matchLabels๋ฅผ ํ†ตํ•ด my-deployment๋Š” app: my-app ๋ ˆ์ด๋ธ”์„ ๊ฐ€์ง„ ํŒŒ๋“œ๋ฅผ ์„ ํƒํ•  ๊ฒƒ์ž„์„ ๋ช…์‹œํ•œ๋‹ค.
  • template์€ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๊ฐ€ ์ƒ์„ฑํ•˜๋Š” ํŒŒ๋“œ์˜ ํ…œํ”Œ๋ฆฟ์„ ์ •์˜ํ•œ๋‹ค.
    • ์—ฌ๊ธฐ์—์„œ๋Š” metadata.labels๋ฅผ ํ†ตํ•ด ๋””ํ”Œ๋กœ์ด๋จผํŠธ๊ฐ€ ์ƒ์„ฑํ•˜๋Š” ํŒŒ๋“œ์— app: my-app์ด๋ผ๋Š” ์ด๋ฆ„์˜ ๋ ˆ์ด๋ธ”์„ ๋ถ€์—ฌํ•œ๋‹ค.

 

Service์—์„œ์˜ ์…€๋ ‰ํ„ฐ

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  • my-service๋ผ๋Š” ์ด๋ฆ„์˜ ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” yml ํŒŒ์ผ์ด๋‹ค.
  • selector๋ฅผ ํ†ตํ•ด my-service๋Š” app: my-app ๋ ˆ์ด๋ธ”์„ ๊ฐ€์ง„ ํŒŒ๋“œ๋ฅผ ์„ ํƒํ•  ๊ฒƒ์ž„์„ ๋ช…์‹œํ•œ๋‹ค.
  • ports๋Š” ์„œ๋น„์Šค๊ฐ€ ๋…ธ์ถœํ•  ํฌํŠธ๋ฅผ ์ •์˜ํ•œ๋‹ค.
    • ์—ฌ๊ธฐ์—์„œ๋Š” 80๋ฒˆ ํฌํŠธ๋กœ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ 8080๋ฒˆ ํฌํŠธ๋กœ ์ „๋‹ฌํ•œ๋‹ค.

 

๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ์ธ ๋””ํ”Œ๋กœ์ด๋จผํŠธ & ์„œ๋น„์Šค์—์„œ์˜ Label & Selector์˜ ์‚ฌ์šฉ ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด์ž.

 

โŒจ๏ธ ํ”„๋ก ํŠธ์—”๋“œ Deployment & Service

apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: frontend
  template:
    metadata:
      labels:
        app: frontend
    spec:
      containers:
        - name: frontend-container
          image: frontend-image
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: frontend-service
spec:
  selector:
    app: frontend
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer
  • frontend-deployment๋ผ๋Š” ์ด๋ฆ„์˜ ํ”„๋ก ํŠธ์—”๋“œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • replicas: 3์€ ํ”„๋ก ํŠธ์—”๋“œ ํŒŒ๋“œ์˜ ๋ณต์ œ๋ณธ ๊ฐœ์ˆ˜๋ฅผ 3๊ฐœ๋กœ ์ง€์ •ํ•จ์„ ์˜๋ฏธํ•œ๋‹ค.
  • selector.matchLabels๋ฅผ ํ†ตํ•ด frontend-deployment๋Š” app: frontend๋ผ๋Š” ์ด๋ฆ„์˜ ๋ ˆ์ด๋ธ”์„ ๊ฐ€์ง„ ํŒŒ๋“œ๋ฅผ ์„ ํƒํ•  ๊ฒƒ์ž„์„ ๋ช…์‹œํ•œ๋‹ค.
  • template์€ frontend-deployment๊ฐ€ ์ƒ์„ฑํ•˜๋Š” ํŒŒ๋“œ์˜ ํ…œํ”Œ๋ฆฟ์„ ์ •์˜ํ•œ๋‹ค.
    • ์—ฌ๊ธฐ์—์„œ๋Š” metadata.labels๋ฅผ ํ†ตํ•ด frontend-deployment๊ฐ€ ์ƒ์„ฑํ•˜๋Š” ํŒŒ๋“œ์— app: frontend๋ผ๋Š” ์ด๋ฆ„์˜ ๋ ˆ์ด๋ธ”์„ ๋ถ€์—ฌํ•œ๋‹ค.
  • frontend-container๋ผ๋Š” ์ด๋ฆ„์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ •์˜ํ•˜๊ณ  frontend-image๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ํ”„๋ก ํŠธ์—”๋“œ ํŒŒ๋“œ์˜ 80๋ฒˆ ํฌํŠธ๋ฅผ ์—ด์–ด์„œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • frontend-service๋ผ๋Š” ์ด๋ฆ„์˜ ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • selector๋ฅผ ํ†ตํ•ด app: frontend ๋ ˆ์ด๋ธ”์„ ๊ฐ€์ง„ ํŒŒ๋“œ๋ฅผ ์„ ํƒํ•œ๋‹ค.
  • 80๋ฒˆ ํฌํŠธ๋กœ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ํ”„๋ก ํŠธ์—”๋“œ ํŒŒ๋“œ์˜ 80๋ฒˆ ํฌํŠธ๋กœ ์ „๋‹ฌํ•œ๋‹ค.
  • type: LoadBalancer๋ฅผ ์ง€์ •ํ•˜์—ฌ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€๋กœ ์„œ๋น„์Šค๋ฅผ ๋…ธ์ถœํ•œ๋‹ค.

 

โŒจ๏ธ ๋ฐฑ์—”๋“œ Deployment & Service

apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: backend
  template:
    metadata:
      labels:
        app: backend
    spec:
      containers:
        - name: backend-container
          image: backend-image
          ports:
            - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: backend-service
spec:
  selector:
    app: backend
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080
  • backend-deployment๋ผ๋Š” ์ด๋ฆ„์˜ ๋ฐฑ์—”๋“œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • replicas: 2๋Š” ๋ฐฑ์—”๋“œ ํŒŒ๋“œ์˜ ๋ณต์ œ๋ณธ ๊ฐœ์ˆ˜๋ฅผ 2๊ฐœ๋กœ ์ง€์ •ํ•จ์„ ์˜๋ฏธํ•œ๋‹ค.
  • selector.matchLabels๋ฅผ ํ†ตํ•ด backend-deployment๋Š” app: backend๋ผ๋Š” ์ด๋ฆ„์˜ ๋ ˆ์ด๋ธ”์„ ๊ฐ€์ง„ ํŒŒ๋“œ๋ฅผ ์„ ํƒํ•  ๊ฒƒ์ž„์„ ๋ช…์‹œํ•œ๋‹ค.
  • template์€ backend-deployment๊ฐ€ ์ƒ์„ฑํ•˜๋Š” ํŒŒ๋“œ์˜ ํ…œํ”Œ๋ฆฟ์„ ์ •์˜ํ•œ๋‹ค.
    • ์—ฌ๊ธฐ์—์„œ๋Š” metadata.labels๋ฅผ ํ†ตํ•ด backend-deployment๊ฐ€ ์ƒ์„ฑํ•˜๋Š” ํŒŒ๋“œ์— app: backend๋ผ๋Š” ์ด๋ฆ„์˜ ๋ ˆ์ด๋ธ”์„ ๋ถ€์—ฌํ•œ๋‹ค.
  • backend-container๋ผ๋Š” ์ด๋ฆ„์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ •์˜ํ•˜๊ณ , backend-image๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋ฐฑ์—”๋“œ ํŒŒ๋“œ์˜ 8080๋ฒˆ ํฌํŠธ๋ฅผ ์—ด์–ด์„œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • backend-service๋ผ๋Š” ์ด๋ฆ„์˜ ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • selector๋ฅผ ํ†ตํ•ด app: backend ๋ ˆ์ด๋ธ”์„ ๊ฐ€์ง„ ํŒŒ๋“œ๋ฅผ ์„ ํƒํ•œ๋‹ค.
  • 8080๋ฒˆ ํฌํŠธ๋กœ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ๋ฐฑ์—”๋“œ ํŒŒ๋“œ์˜ 8080๋ฒˆ ํฌํŠธ๋กœ ์ „๋‹ฌํ•œ๋‹ค.

 

๐Ÿค” matchLabels VS labels

matchLabels

  • ์ด ํ•„๋“œ๋Š” ReplicaSet๊ณผ Pod๋ฅผ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.
  • matchLabels์— ์ง€์ •๋œ ๋ผ๋ฒจ๊ณผ ๋™์ผํ•œ ๋ผ๋ฒจ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ReplicaSet๊ณผ Pod๋งŒ์ด Deployment์— ์˜ํ•ด ๊ด€๋ฆฌ๋œ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด ์œ„์˜ YAML ํŒŒ์ผ์—์„œ matchLabels๋Š” [app: frontend] or [app: backend]๋กœ ์ง€์ •๋˜์–ด ์žˆ๋‹ค.
    • ์ด๋Š” Deployment๊ฐ€ app์ด๋ผ๋Š” ๋ผ๋ฒจ์˜ ๊ฐ’์ด frontend or backend์ธ ReplicaSet๊ณผ Pod๋งŒ์„ ์„ ํƒํ•˜์—ฌ ๊ด€๋ฆฌํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

labels

  • labels๋Š” Pod ํ…œํ”Œ๋ฆฟ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.
    • Pod์— ๋ผ๋ฒจ์„ ๋ถ€์—ฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
    • Deployment๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” Pod๋Š” Pod ํ…œํ”Œ๋ฆฟ์— ์ง€์ •๋œ labels๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด ์œ„์˜ YAML ํŒŒ์ผ์—์„œ labels๋Š” [app: frontend] or [app: backend]๋กœ ์ง€์ •๋˜์–ด ์žˆ๋‹ค.
      • ์ด๋Š” Deployment์— ์˜ํ•ด ์ƒ์„ฑ๋˜๋Š” Pod๊ฐ€ "app" ๋ผ๋ฒจ์˜ ๊ฐ’์œผ๋กœ frontend or backend๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

๐Ÿ“œ ์ •๋ฆฌ

  • matchLabels๋Š” Deployment์˜ selector๋ฅผ ์ง€์ •ํ•˜์—ฌ ํŠน์ • ReplicaSet๊ณผ Pod๋ฅผ ์„ ํƒํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, labels๋Š” Deployment์— ์˜ํ•ด ์ƒ์„ฑ๋˜๋Š” Pod์— ๋ผ๋ฒจ์„ ๋ถ€์—ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด Deployment๋Š” ํŠน์ •ํ•œ ๋ผ๋ฒจ์„ ๊ฐ€์ง„ ReplicaSet๊ณผ Pod๋งŒ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

์ฐธ๊ณ 

๋คผํŠผ

728x90