2 ๋ถ„ ์†Œ์š”

Kubernetes ๐Ÿ’ฏ

Kubernetes, ๋˜๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค, ๋˜๋Š” ๊ฐ„๋‹จํžˆ "ํ๋ธŒ(kube)"๋Š” Linux ์ปจํ…Œ์ด๋„ˆ ์ž‘์—…์„ ์ž๋™ํ™”ํ•˜๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”Œ๋žซํผ์ด๋‹ค.


k8


  1. Local์—์„œ ์‹คํ–‰ // node hellow.js

  2. docker์—์„œ node์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์™€ hellow.js๋ฅผ copyํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑ ํ›„ hub์— ์˜ฌ๋ฆฌ๊ธฐ

FROM node:slim
EXPOSE 8000
COPY hellow.js
CMD node hellow.js

>> docker build -t ์ด๋ฏธ์ง€๋ช… .

>> docker login

>> docker push ์ด๋ฏธ์ง€๋ช…
  1. Kubernetes์—์„œ ๋„์šฐ๊ธฐ
apiVersion : v1
kind : pod
metadata :
    name : hellow-pod
    labels :
        app : hellow
spec :
    containers :
        -name : hellow-container
         image : ์ด๋ฏธ์ง€๋ช…
         ports :
            -containerPorts : 8000

-------------------------------------------------

apiVersion : v1
kind : Service
metadata :
    name : hellow-svc
spec :
    selector :
        app : hellow
    ports :
       - port : 8200
         targetPort : 8000
    externallPs :
        192.xxx.x.xx

Service

  1. ClusterIp : ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ณ  ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ์‚ฌ์šฉํ•˜๋Š” IP์ด๋ฏ€๋กœ ์ธ๊ฐ€๋œ ์‚ฌ์šฉ์ž๋งŒ ๊ฐ€๋Šฅ ( ์ฃผ๋กœ Pod์˜ ์ƒํƒœ๊ด€๋ฆฌ ๋ฐ ๋””๋ฒ„๊น…) ๋””ํดํŠธ๊ฐ’

  2. NodePort : ๋ฌผ๋ฆฌ์ ์ธ IP๋ฅผ ํ†ตํ•ด Pod์— ์ ‘๊ทผ๊ฐ€๋Šฅ, ์ž„์‹œ ์—ฐ๊ฒฐ์šฉ

  3. LB : ์™ธ๋ถ€ ์‹œ์Šคํ…œ ์—ฐ๊ฒฐ์šฉ


Volume

  1. emptyDir : Pod์ƒ์„ฑ์‹œ ๋งŒ๋“ค์–ด์ง€๊ณ  ์‚ญ์ œ์‹œ ์—†์–ด์ง ( ์ง€์ •ํ•œ ์ปจํ…Œ์ด๋„ˆ๋ผ๋ฆฌ ํŒŒ์ผ๊ณต์œ  ๊ฐ€๋Šฅ )

  2. hostPath : Pod๊ฐ€ ์ฃฝ์–ด๋„ ์‚ฌ๋ผ์ง€์ง„์•Š์ง€๋งŒ ์ฃฝ์€ Pod๊ฐ€ ๋‹ค๋ฅธ ๋…ธ๋“œ์— ์ƒ๊ธธ๋•Œ ์›๋ž˜์˜ ๋…ธ๋“œ์˜ Volume๊ณผ ์—ฐ๊ฒฐ์ด ์•ˆ๋˜์„œ ์ž์ฒด์ ์œผ๋กœ ๋”ฐ๋กœ ์—ฐ๊ฒฐํ•ด์ค˜์•ผํ•จ ( ์ฃผ ์šฉ๋„๋Š” Node์•ˆ์˜ Volume์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ Pod๊ฐ€ ์‚ฌ์šฉํ•˜๊ธฐ์œ„ํ•ด ์‚ฌ์šฉ)

  3. PVC / PV : Pod๊ฐ€ ๋งŒ๋“ค์–ด์งˆ๋•Œ ์ง€์ •ํ•œ ์˜์—ญ์— ๋งŒ๋“ค์–ด์ง. PVC => PV


ConfigMap, Secret

  1. Env (Literal) : ๋‘˜๋‹ค ํ‚ค,๋ฒจ๋ฅ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์Œ์„ ์ƒ์ˆ˜๋กœ ์ €์žฅ, Secret์€ 1Mbyte, base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ๊ฐ’ ๋„ฃ์–ด์ค˜์•ผํ•จ

  2. Env (File) : ํŒŒ์ผ๋กœ ์„ค์ •

  3. Volume Mount (File) : Volume Path์— EnvํŒŒ์ผ ์„ค์ •, mount๋œ๊ฒƒ์ด ๋ฐ”๋€Œ๋ฉด ๋ฐ”๋€œ


Namespace, ResourceQuota, LimitRange

  1. Namespace : Pod์ด๋ฆ„ ์ค‘๋ณต X, ๋‹ค๋ฅธ Namespace์™€ ์—ฐ๊ฒฐ X

  2. ResourceQuota : Pod๋งŒ๋“ค๋•Œ resource๋ฅผ ๋ช…์‹œํ•˜๊ฒŒ ํ•ด์คŒ, Pod์•„๋ฌด๊ฒƒ๋„์—†์ด ๋งจ์ฒ˜์Œ ๋งŒ๋“ค์–ด์ค˜์•ผํ•จ

  3. LimitRange : min, max, default๊ฐ’


Template, Replicas, Selector

  1. Template : Selector๋กœ ์ง€์ •๋œ Pod๋ฅผ Replicas์˜ ์ˆ˜์น˜๋งŒํผ ์žฌ์ƒ์„ฑํ•ด์คŒ(๋ฒ„์ „๋„ ๋ฐ”๋กœ๋ฐ”๋กœ ์—…๊ธ€๊ฐ€๋Šฅ)

  2. Replicas : ์ˆ˜์น˜๋งŒํผ Pod๊ฐ€ ์ฃฝ์—ˆ์„ ๊ฒฝ์šฐ ์žฌ์ƒ์„ฑ

  3. Selector : matchLabels(์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋Š”๊ฒƒ), matchExpressions(condition์— ํ•ด๋‹นํ•˜๋Š”๊ฒƒ) => Exists, DoesNotExist, In, NotIn


Deployment

  1. reCreate : ๋ฒ„์ „์—… ์‹œ Downtime์ด ์กด์žฌํ•จ

  2. Rolling Update : ์ผ๋‹จ v2๋ฅผ ๋งŒ๋“ค๊ณ  v1์„ ์ง€์šด๋‹ค. ( ๊ทธ ์‚ฌ์ด์— v1, v2์— ์‚ฌ์šฉ์ž๊ฐ€ ๋ชจ๋‘ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Œ, ์ž์›์ด ์ˆœ๊ฐ„์ ์œผ๋กœ ๋งŽ์ด ํ•„์š” )

  3. Blue/Green : ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด v1 -> v2๋กœ Pod๋ฅผ ๋ฐ”๊ฟ”์ค€๋‹ค. ( ์ž์›์‚ฌ์šฉ๋Ÿ‰ 2๋ฐฐ, v2๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด ๋ฐ”๋กœ v1์œผ๋กœ ๋ฐ”๊ฟ”์คŒ )

  4. Canary : ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด [(1. ty:app, ver:v1)(2. ty:app, ver:v1)],[(3. ty:app, ver:v2)] ์ด๋ ‡๊ฒŒ v1,v2๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•˜๋‹ค๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด v2๋ฅผ ๋Š์Œ, ๋˜ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ PATH๋ฅผ ๋ณ€๊ฒฝํ•จ์œผ๋กœ์จ v1,v2๋ฅผ ๊ณต์กด์‹œํ‚ด


DaemonSet, Job, CronJob

  1. DeamonSet : Node์˜ ์ž์›์ƒํƒœ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ๊ฐ Node๋งˆ๋‹ค 1๊ฐœ์”ฉ Pod์ƒ์„ฑ (Prometheus, Fluentd, GlusterFS)

  2. Job : Pod๊ฐ€ ์ฃฝ์œผ๋ฉด ๊ทธ๋Œ€๋กœ ์ž์›์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ๋กœ ๋†”๋‘ , parallelism, completions, activeDeadlineSeconds

  3. CronJob : ๋‚ด๊ฐ€ ์•Œ๊ณ ์žˆ๋Š” ๊ทธ๊ฒƒ, Allow, Forbid, Replace

์—…๋ฐ์ดํŠธ: