
Pod가 어떻게 동작하는지 간단히 알아보고 Pod를 배포하는 conroller에 대해서 살펴보자.
쿠버네티스에서 배포할 수 있는 최소 객체 단위로 하나 이상의 컨테이너(애플리케이션 단위)로 이루어진다.
restartPolicy에 따라 재시작 여부를 결정한다.containers.livenessProbe에서 요청 방법 및 path와 port를 설정하고, 요청에 대한 응답이 오지 않으면 재시작한다.httpGet: web server에 get 요청을 보내서 200번 상태 코드를 받으면 정상tcpSocket: 네트워크, 지정된 포트에 TCP 연결되면 정상exec : 명령 코드를 보내서 종료 코드가 0이면 정상periodSeconds: health check 반복 실행 시간initialDelaySeconds: Pod 실행 후 delay할 시간timeoutSeconds: health check 후 응답을 기다리는 시간failureThreshold: health check 실패 횟수livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
/etc/kubernetes/manifests/에 저장, var/lib/kubelet/config.yaml에서 디렉토리 확인containers.resources.limits or requests에서 요청한다.Pod을 단독으로 만들면 Pod에 어떤 문제가 생겼을 때 자동으로 복구되지 않기 때문에, 다양한 conroller를 사용하여 Pod를 배포한다.
Pod 개수를 보장하는 가장 기본적인 controller
selector, replicas, template 설정이 필수이다. label이 같은 container는 replicas 보다 더 생성될 수 없다.kubectl create rc rc-nginx —image=nginx —replicas=3 —selector=app=webuikubectl scale rc rc-nginx —replicas=2: repliacas 축소·확장ReplicationController와 같지만, 더 풍부한 selector를 지원한다.
matchLabels: 해당 label을 가지면 ReplicaSet의 대상이 된다.matchExpressions: label이 수식에 맞으면 ReplicaSet의 대상이 된다.In: key-value 지정해서 일치하는 Pod 연결NotIn: key는 일치하지만 value는 일치하지 않으면 연결Exists: key에 맞는 label의 pod 연결DoesNotExist: key와 다른 label의 pod 연결kubectl delete rs [NAME] --cascade=false: controller가 삭제되도 Pod는 유지ReplicaSet을 제어하는 역할을 하며, Pod instance를 서비스 중단 없이 버전을 바꾸는 Rolling Update & Back을 지원한다.
kubectl set image deployment [NAME] [container_name]=[new version image] --record # 업데이트 후 기록
kubectl rollout history deployment [NAME]
kubectl rollout undo deploy [NAME] --to-revision=3` # 롤백 (버전 선택 가능) REVISION 인덱스 업데이트 주의
kubectl rollout history pauser / resume # 일시정지 / 재시작 → 상태 모니터링
spec.strategy.rollingUpdatespec.progressDeadlineSeconds이나spec.revisionHistoryLimit로 조절한다.metadata.annotations: kubernetes.io/change-cause: version 1.14: 이후 yaml의 image version 바꾸고 적용 시 해당 Deployment 업데이트노드 당 Pod 한 개씩 실행되도록 보장하는 controller
Stateful application(Client와 서버의 Application에서 업데이트되는 내용이 항상 서로에게 영향을 주는 Application)을 실행하는 Pod를 관리하는 Contoller
spec.serviceName을 명시해서 service의 DNS의 이름을 지정해야 한다. spec.podManagementPolicy가 OrderedReady(기본값)면 순차적으로 실행하고, Parallel이면 병렬적으로 실행한다.Batch 처리에 적합한 controller, Batch 처리 작업이 완료되면 없어진다.
spec.restartPolicy: Never(기본값) or Onfailure(비정상 종료 시 container를 restart)spec.backoffLimit: 재시작 횟수spec.completion: Pod 완료 횟수spec.parallelism: Pod 유지 개수spec.activeDeadlineSeconds: n초 안에 안끝나면 강제 종료Job을 controll하여 원하는 시간에 실행 예약을 지원하고, 주기적으로 반복하는 Job이 필요할 때 사용하는 Conroller
spec.schedule: */5 3 1,2 * 1-5 (Minites, Hours, Day of the month, Month, Day of the week)spec.jobTemplate: Job에 대한 명세spec.concurrentyPolicy: Allow or Forbid, Job이 실행중이여도 주기가 돌면 실행할지 말지를 결정spec.startingDeadlineSecondsapiVersion이 상이하며, 버전마다 갱신될 수 있기 때문에 유의해야 한다. (kubectl explain [TYPE]으로 확인)Deployment: apps/v1, Pod: v1, ReplicaSet: apps/v1, ReplicationController: v1, Service: v1, PersistentVolume: v1