Pod의 개수를 보장
요구하는 Pod의 개수를 보장하며 Pod 집합의 실행을 항상 안정적으로 유지하는 것이 목표
apiVersion: v1
kind: ReplicationController
metadata:
name: <RC_이름>
spec:
replicas: <배포 갯수>
selector:
key: value
template:
<컨테이너 템플릿>
방법 1) $ kubectl edit rc <RC_이름>
방법 2) $ kubectl scale rc <RC_이름> --replicas=4
$ kubectl get replicationcontrollers
( = $ kubectl get rc
)
$ kubectl describe rc <RC_이름>
controller를 삭제하면 pod도 같이 삭제됩니다.
ReplicationController와 같은 역할을 하는 컨트롤러
ReplicationController 보다 풍부한 selector를 가집니다.
ex)
selector:
matchLabels:
key: value
matchExpressions:
- {key: <키>, operator: <연산자>, values: [<값>]}
In
key와 values를 지정하여 key, value가 일치하는 Pod만 연결
NotIn
Key는 일치하고 value는 일치하지 않는 Pod에 연결
Exists
key에 맞는 label의 pod를 연결
DoesNotExist
key와 다른 label의 pod를 연결
ReplicaSet을 컨트롤해서 Pod수를 조절
deployment를 create할 때
--record
옵션을 추가하면 업데이트 과정을 history로 기록합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: <deploy_name>
spec:
replicas: <배포 갯수>
selector:
key: value
template:
<컨테이너 템플릿>
Pod 인스턴스를 점진적으로 새로운 것으로 update하여 deployment 업데이트가 서비스 중단 없이 이루어질 수 있도록 도와줍니다.
$ kubectl set image deployment <deploy_name> <container_name>=<newversion_image>
update 일시정지
$ kubectl rollout pause deployment <deploy_name>
update 재시작
$ kubectl rollout resume deployment <deploy_name>
update 과정 확인
$ kubectl rollout status deployment <deploy_name>
update history 확인
$ kubectl rollout history deployment <deploy_name>
가장 최근 history로 롤백
$ kubectl rollout undo deployment <deploy_name>
특정 history로 롤백
$ kubectl rollout undo deployment <deploy_name> --to-revision=<revision 번호>
전체 노드에서 Pod가 한 개씩 실행되도록 보장
로그 수집기, 모니터링 에이전트와 같은 프로그램 실행시 적용
1개로 보장되기 때문에
repicas
인자가 없습니다.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: <demonset_name>
spec:
selector:
key: value
template:
<컨테이너 템플릿>
Pod의 상태를 유지해주는 컨트롤러
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: <statefulset_name>
spec:
replicas: <배포 갯수>
serviceName: <서비스 이름>
selector:
key: value
template:
<컨테이너 템플릿>
위의 3개의 replicaSet의 파드는 랜덤한 이름을 가지지만 아래 3개의 statefulSet의 파드는 순서가 있습니다.
쿠버네티스는 Pod를 running 중인 상태로 유지
Batch 처리하는 Pod는 작업이 완료되면 종료
Batch 처리에 적합한 컨트롤러로 Pod의 성공적인 완료를 보장
apiVersion: batch/v1
kind: Job
metadata:
name: <job_name>
spec:
template:
<컨테이너 템플릿>
restartPolicy: <Never, OnFailure>
job 컨트롤러로 실행할 Application Pod를 주기적으로 반복해서 실행
Linux의 cronjob의 스케줄링 기능을 Job Controller에 추가한 API
다음과 같은 반복해서 실행하는 Job을 운영해야 할 떄 사용
Cronjob Schedule: "0 3 1 * *"
apiVersion: batch/v1
kind: CronJob
metadata:
name: <cronjob_name>
spec:
schedule: "분 시 일 월 요일"
jobTemplate:
<컨테이너 템플릿>
restartPolicy: <Never, OnFailure>
출처
https://www.youtube.com/playlist?list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c