본 포스팅은 김태민 님의 대세는 쿠버네티스 [초급~중급] 섹션3, 4를듣고 요약한 내용입니다.
기본 오브젝트
Pod
Service
Volume
ConfigMap, Secret
Namespace, ResourceQuota, LimitRange
컨트롤러
- Auto Healing
Pod나 Node에 장애가 생겨 다운될 경우, 컨트롤러는 새로운 노드에 Pod를 넣어 재시동합니다. 다른말로 자동 복구라고도 하는데,
실패한 인스턴스를 즉시 감지하고 자동으로 다시 생성하여 클라이언트를 다시 제공할 수 있습니다. 자동 복구 기능을 사용하면 더 이상 오류 발생 후 수동으로 앱을 서비스 상태로 되돌릴 필요가 없다는 장점이 있습니다.
- Software Update
여러 pod에 대해 버전을 업그레이드 해야할 경우, 컨트롤러를 통해 한번에 쉽게 진행할 수 있습니다.
- Auto Scaling
Pod의 리소스가 limit 상태에 다다랐을 때, 컨트롤러가 이 상태를 파악하고 pod를 하나 더 생성하므로써 부하를 분산시키고 pod가 죽지 않도록 해줍니다. 성능에 대한 장애없이, 안정적으로 운영할 수 있다는 장점이 있습니다.
- Job
일시적인 작업을 해야할 경우, 컨트롤러가 필요한 순간에만 pod를 만들어서 이행을 하고, 삭제를 합니다. 효율적인 자원 활용이 가능하다는 장점이 있습니다.
Replication Controller, ReplicaSet
template
template에 pod의 내용을 넣게 되는데, 기존 pod가 다운될 경우 templete을 이용해서 새 pod를 생성합니다. 이러한 특성을 이용하여 버전 업도 가능하게 됩니다.
replicas
replicas 의 개수에 따라 pod가 생성됩니다. replicas의 개수를 늘리는 것을 Scale out, 줄이는 것을 Scale out이라고 합니다.
기존에 생성된 pod가 없을 경우, templete의 내용으로 replicas의 수 만큼 pod가 생성됩니다.
selector
replication의 키와 value가 같은 pod와만 연결을 합니다.
Deployment
Recreate
기존의 pod들(v1)을 중지시키고 새 pod들(v2)를 실행시킵니다. 기존 pod들을 중지시키고 새 pod들을 실행시키는 과정에서 자원의 downtime이 발생합니다.
Rolling Update
새 pod들(v2)를 생성한 후 v1과 v2 두가지를 모두 실행합니다. 누군가는 v1에 접속하고, 누군가는 v2에 접속하게 됩니다. 그런 다음 접속하지 않은 v1의 pod를 하나 삭제하고 자원도 삭제합니다. 이제 v2의 pod를 하나 더 생성하고, 기존의 v1도 삭제합니다. 이제는 v2에만 접속할 수 있습니다. 배포 중간에 추가적인 자원을 요구하지만, downtime이 없습니다.
Blue / Green
기존의 컨트롤러에 연결된 v1의 pod들은 label로 service에 연결되어 있습니다. 새로운 컨트롤러를 생성하고 v2의 pod들을 생성한 후,
service의 label만 새로운 컨트롤러로 변경해주면, v2의 pod들만 service에 연결되게 됩니다. v2에서도 label만 바꿔주면 기존 버전으로 갈 수 있다는 장점이 있고, downtime이 없습니다. 자원은 2배가 필요하다는 단점이 있습니다.
Canary
특정 기간동안 기존의 컨트롤러와 새 컨트롤러(pod는 1개)를 운영해서 ingress controller라는 것을 이용해 각각의 service에 다른 링크로 유입되게 합니다. 기간이 종료되면, 기존의 컨트롤러를 중단하고 새 컨트롤러에 pod들을 추가 생성하고, service의 링크를 기존 링크로 수정합니다. downtime이 없다는 장점이 있지만, 자원이 2배 필요하다는 단점이 있습니다.
DaemonSet, Job, CronJob
DaemonSet
노드의 자원 상태와는 상관없이, 모든 노드에 pod가 하나씩 생성됩니다. nodeselector를 지정해주면, 지정된 label이 없는 node에는 pod가 생성되지 않습니다.
Job
기존의 pod에 문제가 생겼을 경우, ReplicaSet이 새 node에 pod를 재생성하고 재시작 하는 것과는 다르게 job은 새 node에 pod를 재생성하고 멈춰있습니다.
CronJob
Job들을 주기적인 시간에 따라서 생성하는 역할을 합니다. 특정시간에 반복적으로 실행하기 위해 사용합니다.
EX. DB백업, 주기적인 업데이트, 예약 메일 등