오늘 지윤의 Agenda
1. Replication Controller
2. ReplicaSets
3. DaemonSets
4. Cronjob
3가지의 파트로 이루어져 있음
Label Selector
: Replication Controller가 담당할 pod의 범위를 지정Replica Count
: 실행할 Pod의 desired number를 지정Pod template
: new pod 복제본을 생성할 때 이용kubectl scale rc <name> —replicas=N
apiVersion: v1
kind: ReplicationController
metadata:
name: kubia ## 이름 적고
spec:
replicas: 3
selector:
app: kubia. # Which pod에 RC가 작동할지 결정!
template:
metadata:
labels:
app: kubia. ## 여기 라벨이 selector의 라벨조건과 일치해야함
spec:
containers:
- name: kubia
image: luksa/kubia
ports:
- containerPort: 8080
$ kubectl delete pod kubia-53thy
pod "kubia-53thy" deleted
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
kubia-53thy 1/1. Terminating 0 3m
kubia-oini2 0/1. ContainerCreating 0 2s
kubia-k0xz6 1/1. Running 0 3m
kubia-q3vkg 1/1. Running 0 3m
kubectl delete rc <name> —cascade=false
Cascade=false옵션을 사용하면 rc만 삭제하고 pod들은 실행상태로 남는다
[ReplicaSets]
ReplicationController는 deprecated되고 Replciasets로 모두 대체됨. New generation of ReplicationController.
무슨 차이가 있느냐?
apiVersion: apps/v1beta2
kind: ReplicaSet
metadata:
name: kubia
spec:
replicas: 3
selector:
matchExpressions:
- key: app
operator: In
values:
- kubia
template:
metadata:
labels:
app: kubia
spec:
containers:
- name: kubia
image: luksa/kubia
Selector에 표현식을 추가할 수 있다 . 각 표현식은 키, 연산자, 가능한 값이 포함되어야 한다
apiVersion: apps/v1beta2
kind: DaemonSet
metadata:
name: ssd-monitor
spec:
selector:
matchLabels:
app: ssd-monitor
template:
metadata:
labels:
app: ssd-monitor
spec:
nodeSelector:
disk: ssd
containers:
- name: main
image: luksa/ssd-monitor
Job은 Pod의 컨테이너 내부에서 실행 중인 프로세스가 성공적으로 완료되면 컨테이너를 다시 시작하지 않는 pod를 실행할 수 있다
Q. CloudGenie 회사에 오늘 고용된 DevOps엔지니어인 클진 씨는 전임자에게 인수인계를 받지 못해 RC가 관리해야하는 Pod의 수를 알지 못한다. 첫 업무로 클러스터 안에서 RC에 의해 구동되고 있는 실제 pod들과 전임자가 의도했던 Pod들의 수가 맞는지 확인해보려면 어떤 작업을 해봐야할까?
A.
$ kubectl describe rc kubia
Labels:
Containers: ...
Name:
Namespace:
Selector: app=kubia
Labels: app=kubia
Annotations: <none>
…생략
Replicas: 3 current / 3 desired
Pods Status: 4 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
…
Q. Pod selector 라벨을 바꿔버리면 이미 RC에 의해 관리되던 pod들은 자동으로 스케줄링될까?