| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- kubernetes
- AWS
- aews vault
- POD
- 클라우드 국비지원교육 후기
- storageclass
- karpenter
- aews
- 합격 후기
- VPA
- docker
- 클라우드 엔지니어
- prometheus
- k8s
- aews ci/cd
- grafana
- eks endpoint access
- 국비지원교육
- EKS
- 단기 합격
- 도커
- 클라우드 국비지원교육
- aws outposts
- keda
- 외부 모듈
- outposts local cluster
- Python
- Terraform
- observability
- Jenkins
- Today
- Total
모험가
DaemonSet, Job, CronJob (기초) 본문
이 글은 인프런의 대세는 쿠버네티스 강의를 보며 정리한 글입니다.
DaemonSet
* 용량과 상관없이 각 노드에 pod를 한개씩 만든다.
* 꼭 써야하는 것들 ex) Prometheus, flentd, GlusterFS
* 즉 노드의 성능 확인, 로깅, 노드들을 스토리지에 활용할 때 필요한 것 (조금 필수?적인것들)
- selector과 template가 있음 (NodeSelector을 통해 원치 않는 노드에 Pod를 생성하지 않을 수 있음.)
Job
1. ReplicaSet으로 만들어진 Pod가 죽으면 다른 Node에 Pod가 생성되며 Pod가 일을 하지 않으면
Restart를 통해 새로운 Pod를 생성
2. Job으로 만들어진 Pod가 죽으면 똑같이 다른 Node에 Pod가 생성되지만 Pod가 일을 하지 않으면
Finish로 Pod가 종료됨 (삭제는 아닌 종료)
- selector과 template이 있음 (completions로 파드의 수를 조절할 수 있음.)
- restartPolicy는 필수값임. (중급편에서 설명함.)
Cronjob
- job을 보통 하나하나 만들지 않고 Cronjob을 통해 여러 job들을 만들거나 예약을 해서 만듬.
- concurencyPolicy가 있음 (Allow, Forbid, Replace)
ex) */1 * * * * 가 schedule일때
Allow : 1분마다 Job을 통해 Pod를 생성
Forbid : 1분에 만들어진 Pod가 running이면 계속 skip이 됨 (pod가 종료되면 다음 schedule에 있는 Job으로 Pod가 생성)
Replace : 1분에 실행중인 Job이 완료되지 않은 경우 2분에 기존 Job은 삭제되고 새 Job이 새 Pod를 생성


실습
1. DaemonSet

1-1) DaemonSet - HostPort
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: daemonset-1
spec:
selector:
matchLabels:
type: app
template:
metadata:
labels:
type: app
spec:
containers:
- name: container
image: kubetm/app
ports:
- containerPort: 8080
hostPort: 18080
Command
curl 192.168.56.31:18080/hostname
1-2) DaemonSet - NodeSelector
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: daemonset-2
spec:
selector:
matchLabels:
type: app
template:
metadata:
labels:
type: app
spec:
nodeSelector:
os: centos
containers:
- name: container
image: kubetm/app
ports:
- containerPort: 8080
Label Add
kubectl label nodes k8s-node1 os=centos
kubectl label nodes k8s-node2 os=ubuntu
Label Remove
kubectl label nodes k8s-node2 os-
2. Job
2-1) Job1
apiVersion: batch/v1
kind: Job
metadata:
name: job-1
spec:
template:
spec:
restartPolicy: Never
containers:
- name: container
image: kubetm/init
command: ["sh", "-c", "echo 'job start';sleep 20; echo 'job end'"]
terminationGracePeriodSeconds: 0

2-2) Job2
apiVersion: batch/v1
kind: Job
metadata:
name: job-2
spec:
completions: 6
parallelism: 2
activeDeadlineSeconds: 30
template:
spec:
restartPolicy: Never
containers:
- name: container
image: kubetm/init
command: ["sh", "-c", "echo 'job start';sleep 20; echo 'job end'"]
terminationGracePeriodSeconds: 0
3. CronJob

3-1) CronJob
apiVersion: batch/v1
kind: CronJob
metadata:
name: cron-job
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
restartPolicy: Never
containers:
- name: container
image: kubetm/init
command: ["sh", "-c", "echo 'job start';sleep 20; echo 'job end'"]
terminationGracePeriodSeconds: 0
Manual
kubectl create job --from=cronjob/cron-job cron-job-manual-001
Suspend
kubectl patch cronjobs cron-job -p '{"spec" : {"suspend" : false }}'
1.19버전 이후 변경사항
Cronjob 삭제시 Manual로 만든 Job도 같이 삭제됨3-2) CronJob - ConcurrencyPolicy

CronJob
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: cron-job-2
spec:
schedule: "20,21,22 * * * *"
concurrencyPolicy: Replace
jobTemplate:
spec:
template:
spec:
restartPolicy: Never
containers:
- name: container
image: kubetm/init
command: ["sh", "-c", "echo 'job start';sleep 140; echo 'job end'"]
terminationGracePeriodSeconds: 0
1.19버전 이후 변경사항
Replace 모드 : 2min이 되었을 시 기존 Job은 삭제되고 (기존 Pod도 같이 삭제됨), 새 Job이(새 pod 생성) 만들어집니다.
실습해보기.
'쿠버네티스 > 기초' 카테고리의 다른 글
| Deployment - Recreate, RollingUpdate (기초) (0) | 2022.08.05 |
|---|---|
| 컨트롤러 (기초) ReplicaSet, Controller (0) | 2022.08.05 |
| Namespace, ResourceQuota, LimitRange (기초) (0) | 2022.08.05 |
| ConfigMap, Secret (기초) (0) | 2022.08.05 |
| Volume (기초) (0) | 2022.07.28 |