apiVersion: v1
kind: Pod
metadata:
labels:
run: po-nginx
name: po-nginx
spec:
containers:
- image: nginx
name: nginx
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: deploy-nginx
name: deploy-nginx
spec:
replicas: 3 //리플리카스 갯수
selector: //template와 연결됨
matchLabels:
app: po-nginx //template에 있는 po-nginx와 동일해야함
template:
metadata:
labels:
app: po-nginx
spec:
containers:
- name: nginx
image: nginx
deployment는 템플릿을 통해서 파드를 여러개 만드는 방식이다.
apiVersion: apps/v1
kind: ReplicaSet
metadata:
labels:
app: rs-nginx
name: rs-nginx
spec:
replicas: 3
selector:
matchLabels:
app: po-nginx
template:
metadata:
labels:
app: po-nginx
spec:
containers:
- image: nginx
name: nginx
ReplicaSet은 따로 현재는 사용하지않는다.
이유 :Deployment가 있기 때문에 Deployment의 하위에 있음
apiVersion: v1
kind: Pod
metadata:
labels:
run: simple-command
name: simple-command
spec:
containers:
- image: sysnet4admin/net-tools
name: net-tools
command: ["/bin/sh", "-c", "sleep 3600"]
기타 커맨드 명령어들에는 여러 방법이 있다.
spec:
containers:
- image: sysnet4admin/net-tools
name: net-tools
command: ["/bin/sh", "-c", "echo run multiple-command-v2; sleep 3600"]
OR
spec:
containers:
- image: sysnet4admin/net-tools
name: net-tools
command:
- "/bin/sh"
- "-c"
- |
echo run multiple-command-v3
sleep 3600
apiVersion: v1
kind: Pod
metadata:
labels:
run: multiple-command-w-args
name: multiple-command-w-args
spec:
containers:
- image: sysnet4admin/net-tools
name: net-tools
command: ["/bin/sh","-c"]
args:
- |
echo run multiple-command-w-args
echo add commentary
sleep 3600
명령어를 오브젝트
통상적으로 어떤 명령어를 실행하고 추후에 확인을하고자 Complate 상태를 유지할때 씀
apiVersion: batch/v1
kind: Job
metadata:
name: job-curl-succ
spec:
template:
spec:
containers:
- name: net-tools
image: sysnet4admin/net-tools
command: ["curlchk", "nginx"]
restartPolicy: Never //실패했을때만 다시 시작할거면 OnFailure
kubectl logs pod 등으로 로그를 확인할 수 있음
apiVersion: batch/v1
kind: Job
metadata:
name: job-completions
spec:
completions: 3 //잡의 순차적 실행
#parallelism: 3 //잡의 병렬적 실행
template:
spec:
containers:
- name: net-tools
image: sysnet4admin/net-tools
command: ["curlchk", "nginx"]
restartPolicy: Never
apiVersion: batch/v1
kind: Job
metadata:
name: job-ttlsecondsafterfinished
spec:
backoffLimit: 3
ttlSecondsAfterFinished: 30 // 잡의 실행이 종료되고 난 후 30초를 샘
#activeDeadlineSeconds: 30 //시간지나면 자동으로 지우는 커맨드 잘 안씀,
template:
spec:
containers:
- name: net-tools
image: sysnet4admin/net-tools
command: ["/bin/sh", "-c"]
args:
- sleep 60;
curlchk nginx;
restartPolicy: Never
잡을 일정 주기마다 실행하는 오브젝트를 크론잡이라고 한다
apiVersion: batch/v1
kind: CronJob
metadata:
name: cj-1m-hist10-curl
spec:
schedule: "*/1 * * * *"
successfulJobsHistoryLimit: 10 //history를 몇개까지 보존하냐
jobTemplate: # Template for job
spec: # same as before
template:
spec:
containers:
- name: net-tools
image: sysnet4admin/net-tools
command: ["curlchk", "nginx"]
restartPolicy: Never
job을 Template해서 하기때문에 jobTemplate를 설정해야한다
cron 규칙 :
# 분 시 일 월 요 [실행할작업]
# ┌───────────── 분 (0 - 59)
# │ ┌────────────── 시 (0 - 23)
# │ │ ┌─────────────── 일 (1 - 31)
# │ │ │ ┌──────────────── 월 (1 - 12)
# │ │ │ │ ┌───────────────── 요일 (0 - 6) (0이 일요일, 6이 토요일이다.)
# │ │ │ │ │
# │ │ │ │ │
# * * * * * [실행할작업]
워커노드마다 한개씩 배포가 되는 Pod
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
app: ds-nginx
name: ds-nginx
spec:
selector:
matchLabels:
app: po-nginx
template:
metadata:
labels:
app: po-nginx
spec:
containers:
- name: nginx
image: nginx
워커노드마다 한개씩 배포되기로 정해져있기때문에 당연하게도 Replicas가 없다.
중간에 노드가 추가되도 Pod가 추가된다.
비교를 하자면 Deployment는 언제 죽어도 대체할 수 있는 가축,
StatefulSet은 대체할 수 없는 Pet으로 비교하는 경우가 많다.
StatefulSet:상태값을 가지고있는 Pod
Pod는 언제나 죽을수있지만 StatefulSet은 상태값을 저장해야할때 설계한다.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: sts-chk-hn
spec:
replicas: 3
serviceName: sts-svc-domain #statefulset need it
selector:
matchLabels:
app: sts
template:
metadata:
labels:
app: sts
spec:
containers:
- name: chk-hn
image: sysnet4admin/chk-hn
StatefulSet은 서비스 네임이 반드시 필요하다.
순서가 고정되어있음.
작성도, 제거도 순서대로 실시된다.