Pod가 항상 실행되도록 유지하는 kubernetes resource이다.
Node가 클러스터에서 사라지는 경우나 노드에서 pod가 제거된 경우와 같이 어떤 이유로든 pod가 사라지면 rc는 누락된 pod를 감지하고 대체 pod를 만든다.
pod의 개수를 관리
세가지 요소
horizontally scaling pods
$ kubetcl scale rc <rc이름> --replicas=N
$ kubectl edit rc <rc이름>
-> 아래 예시에서 replicas: 수정
$ kubectl delete rc <rc이름>
예시)
apiVersion: v1
kind: ReplicationController
metadata:
name: re-nginx
spec:
replicas: 3
selector:
app: webui
template:
metatdata:
name: nginx-pod
labels:
app: web
spec:
container:
- name: nginx-container
image: nginx:1.14
$ kubectl apply -f rc-nginx.yaml
$ kubectl get replicationcontrollers
$ kubectl describe rc rc-nginx
ReplicationController와 같은 역할을 하는 컨트롤러
rc보다 풍부한 selector
matchExpressions 연산자
예시)
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: rs-nginx
spec:
replicas: 3
selector:
matchLabels:
app: web
matchExpressions:
- {key: version, operator: In, values: ["1.14", "1.15"]}
template:
metatdata:
name: nginx-pod
labels:
app: web
spec:
container:
- name: nginx-container
image: nginx:1.14
$ kubectl apply -f rs-nginx.yaml
$ kubectl get pod --show-labels
$ kubectl scale rs rs-nginx --replicas=5
ReplicaSet controller를 통해 pod 수를 유지하며, Rolling Update 또는 Rolling Back 하는 기능을 포함하고 있다.
annotation
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-nginx
annotation:
kubernetes.io/change-cause: version 1.15
spec:
progressDeadlineSeconds: 600
revisionHistoryLimit: 10
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
relicas: 3
selector:
.....
pod의 상태를 유지해주는 컨트롤러
pod는 고유한 ID를 가지고 순서대로 scale-out이나 scale-in을 수행할 수 있다.
Replicas 수를 변경할 경우 pod를 제거하거나 추가한다. 이 과정에서 가장 높은 번호를 가지는 pod부터 순서대로 종료시키는데 낮은 번호를 갖는 pod의 상태가 read 및 running 상태가 될 때까지 높은 번호를 갖는 pod를 종료시키지 않는다.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: sf-nginx
spec:
replicas: 3
serviceName: sf-nginx-service
selector:
matchLabels:
app: web
template:
metatdata:
name: nginx-pod
labels:
app: web
spec:
containers:
- name: nginx-container
image: nginx:1.14
kubernetes는 pod를 running 상태로 유지
Batch 처리하는 pod는 작업이 완료되는 종료됨
Batch 처리에 적합한 컨트롤러로 pod의 성공적인 완료를 보장
OnFailure : 비정상 종료시 원래 실행중이던 노드에서 컨테이너 재시작
Never : 비정상 종료시 재시작을 막은 후 새로운 pod를 실행
completions : job 오브젝트로 실행할 pod 수
parallelism : job에서 여러 개의 pod를 동시에 실행
지정된 시간 안에 job 애플리케이션을 동작시키고 종료하려면 activeDeadlineSeconds 필드에 시간을 설정
아래 예와 같이 300초를 할당하면 300초 내에 pod가 실행되어 종료되어야 하는데, 종료하지 못하면 강제로 종료시키고 DeadlineExceeded를 기록한다.
spec:
completions: 5
parallelism: 3
activeDeadlineSeconds: 300
template:
metadata:
...
spec:
restartPolicy: OnFailure
....
job 오프젝트에 linux cronjob의 스케줄링 기능을 추가
다음과 같은 자동화 작업에 유리
Cronjob Controller가 관리
Cronjob Schedule
Cronjob 실패처리 : cronjob이 등록한 일정을 실행할 수 업으면 실패로 간주한다. 이후 Cronjob controller는 10초마다 한번씩 검사하며 실패한 작업을 재시도하는데, 실패횟수가 100번에 도달하면 해당 job은 실패로 간주하고 더이상 시도하지 않는다.
StartingDeadlineSeconds : 지정된 시간에 cronjob이 실행되지 못했을때 해당 cronjob 작업을 실행하지 않도록 한다. 아래 예는 600초 내에 등록된 cronjob의 job이 실행되지 못하면 해당 작업을 취소한다. startingDeadlineSeconds에 값이 할당되면, 실패한 작업을 재시도할 때 startingDeadlineSeconds로 할당된 시간동안은 100번의 실패횟수를 카운트하지 않고 재시도한다.
spec:
schedule: " * * * * *"
startingDeadlineSeconds: 600
concurrencyPolicy: Forbid
job Template
......