쿠버네티스 (2) - 파드관련 오브젝트

Seong·2023년 1월 24일
0

쿠버네티스

목록 보기
2/2

파드를 이루는 코드


apiVersion: v1
kind: Pod
metadata:
  labels:
    run: po-nginx               
  name: po-nginx                    
spec:
  containers:
  - image: nginx
    name: nginx

Deployment를 이루는 코드


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는 템플릿을 통해서 파드를 여러개 만드는 방식이다.

Replicaset을 이루는 코드


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의 하위에 있음

커맨드를 이용한 계속 동작하는 POD

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이 토요일이다.)
 # │ │ │ │ │
 # │ │ │ │ │
 # * * * * *  [실행할작업]
  • 해당사항이 있는 자리에만 숫자를 적고 나머지는 * 그대로 표기
  • 요일의 경우 일요일이 0이고 토요일이 6인 점 주의
  • 아무것도 입력하지 않고 *로 두면 매분 마다 실행
  • 주기를 입력할 땐 / 를 사용
  • /4 라는 표현으로 4분마다, 4시간마다 등을 설정 가능
  • 구간을 입력할 땐 - 사용
  • 4-5는 4부터 5까지라는 의미
    ex ) 10분마다 : "/10 * * * * "
    매일 2시 : "0 2
    * * *"

DemonSet

워커노드마다 한개씩 배포가 되는 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

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은 서비스 네임이 반드시 필요하다.
순서가 고정되어있음.
작성도, 제거도 순서대로 실시된다.

profile
메모장

0개의 댓글