โš™๏ธ ReplicaSet, StatefulSet, DaemonSet ์ฐจ์ด์  ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค(Kubernetes)๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๋˜‘๋˜‘ํ•œ ์‹œ์Šคํ…œ์ด์—์š”.
๊ทธ์ค‘์—์„œ๋„ Pod๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฐฐ์น˜ํ•˜๊ณ  ์œ ์ง€ํ• ์ง€๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ์ปจํŠธ๋กค๋Ÿฌ(controller)์ž…๋‹ˆ๋‹ค.

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๋Œ€ํ‘œ์ ์ธ ์„ธ ๊ฐ€์ง€ ์ปจํŠธ๋กค๋Ÿฌ์ธ ReplicaSet, StatefulSet, DaemonSet์„ ๋น„๊ตํ•ด๋ณด๊ณ ,
๊ฐ๊ฐ์˜ ๋ชฉ์ , ์‚ฌ์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค, ๋™์ž‘ ๋ฐฉ์‹์„ ๊ณ ๋“ฑํ•™์ƒ๋„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•ด๋ณผ๊ฒŒ์š”.


๐Ÿค– ์ปจํŠธ๋กค๋Ÿฌ๋ž€?

๋จผ์ € ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ฌด์—‡์ธ์ง€๋ถ€ํ„ฐ ์‚ดํŽด๋ณผ๊ฒŒ์š”.

์ปจํŠธ๋กค๋Ÿฌ๋Š” โ€œ์›ํ•˜๋Š” ์ƒํƒœโ€๋ฅผ ์œ ์ง€ํ•˜๋„๋ก Pod๋ฅผ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๊ด€๋ฆฌ์ž์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‚ด๊ฐ€ โ€œํ•ญ์ƒ 3๊ฐœ์˜ ์›น์„œ๋ฒ„๊ฐ€ ๋–  ์žˆ์–ด์•ผ ํ•ด!โ€๋ผ๊ณ  ๋ช…๋ นํ•˜๋ฉด,
์ปจํŠธ๋กค๋Ÿฌ๋Š” Pod๊ฐ€ ํ•˜๋‚˜ ๊บผ์ง€๋”๋ผ๋„ ๋‹ค์‹œ ์ž๋™์œผ๋กœ ์ƒˆ๋กœ ๋„์›Œ์ค˜์š”.


๐Ÿงฑ ReplicaSet์ด๋ž€?

โœ… ๋ชฉ์ : ๊ฐ™์€ Pod ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์ปจํŠธ๋กค๋Ÿฌ

โœ… ์˜ˆ์‹œ ์ƒํ™ฉ

์›น ์„œ๋ฒ„๋ฅผ 3๊ฐœ ๋„์›Œ์„œ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ๋™์‹œ์— ๋“ค์–ด์™€๋„ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ

๐Ÿ”„ ๋™์ž‘ ๋ฐฉ์‹

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: web-replicaset
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: nginx
        image: nginx

๐Ÿท๏ธ StatefulSet์ด๋ž€?

โœ… ๋ชฉ์ : ์ˆœ์„œ์™€ ์ด๋ฆ„์ด ์ค‘์š”ํ•œ Pod๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ

โœ… ์˜ˆ์‹œ ์ƒํ™ฉ

๐Ÿง  ํŠน์ง•

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: db-stateful
spec:
  serviceName: "db"
  replicas: 3
  selector:
    matchLabels:
      app: db
  template:
    metadata:
      labels:
        app: db
    spec:
      containers:
      - name: mysql
        image: mysql:5.7

๐Ÿ› ๏ธ DaemonSet์ด๋ž€?

โœ… ๋ชฉ์ : ๋ชจ๋“  Node(์„œ๋ฒ„)๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ Pod๋ฅผ ๋„์šฐ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ

โœ… ์˜ˆ์‹œ ์ƒํ™ฉ

๐ŸŒ ํŠน์ง•

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: log-agent
spec:
  selector:
    matchLabels:
      app: logger
  template:
    metadata:
      labels:
        app: logger
    spec:
      containers:
      - name: fluentd
        image: fluent/fluentd

๐Ÿงพ ๋น„๊ต ์š”์•ฝํ‘œ

ํ•ญ๋ชฉ ReplicaSet StatefulSet DaemonSet
๋ชฉ์  ๋™์ผํ•œ Pod๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์œ ์ง€ ๊ณ ์œ ํ•œ Pod ์ด๋ฆ„๊ณผ ์ˆœ์„œ ๊ด€๋ฆฌ ๋ชจ๋“  Node๋งˆ๋‹ค Pod ์‹คํ–‰
Pod ์ด๋ฆ„ ๋žœ๋ค ๊ณ ์ • (ex: app-0, app-1) ๋žœ๋ค
์‹คํ–‰ ์ˆœ์„œ ์ƒ๊ด€์—†์Œ ์ˆœ์„œ ๋ณด์žฅ ๋ชจ๋“  Node์—์„œ ์ž๋™ ์‹คํ–‰
์ €์žฅ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ์œ ์ง€ ์•ˆ ํ•จ ๊ฐ Pod๊ฐ€ ์ž์‹ ์˜ ์ €์žฅ์†Œ ์œ ์ง€ ์ฃผ๋กœ ๋กœ๊ทธ๋‚˜ ๋ชจ๋‹ˆํ„ฐ๋ง์šฉ
์˜ˆ์‹œ ์šฉ๋„ ์›น ์„œ๋ฒ„, API ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค ๋กœ๊ทธ ์ˆ˜์ง‘, ๋ณด์•ˆ ๊ฒ€์‚ฌ, ๋ชจ๋‹ˆํ„ฐ๋ง

๐Ÿ–ผ๏ธ ๊ทธ๋ฆผ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ

ReplicaSet ๊ตฌ์กฐ

     +---------------------+
     |     ReplicaSet      |
     +---------------------+
          |    |    |
        Pod  Pod  Pod

StatefulSet ๊ตฌ์กฐ

     +----------------------+
     |     StatefulSet      |
     +----------------------+
          |     |     |
      Pod-0  Pod-1  Pod-2   (์ˆœ์„œ ๋ณด์žฅ, ์ด๋ฆ„ ๊ณ ์ •)

DaemonSet ๊ตฌ์กฐ

+โ€”โ€”โ€“+ +โ€”โ€”โ€“+ +โ€”โ€”โ€“+ | Node 1 | | Node 2 | | Node 3 | | Pod | | Pod | | Pod | +โ€”โ€”โ€“+ +โ€”โ€”โ€“+ +โ€”โ€”โ€“+


๐Ÿ“š ๋งˆ๋ฌด๋ฆฌ ์š”์•ฝ

๐ŸŽ“ ์ด ์„ธ ๊ฐ€์ง€ ์ปจํŠธ๋กค๋Ÿฌ๋งŒ ์ž˜ ์ดํ•ดํ•ด๋„, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ํ›จ์”ฌ ์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์–ด์š”!


๐Ÿ“Ž ์ฐธ๊ณ ์ž๋ฃŒ: