본문 바로가기

Kubernetes - 배포 종류 본문

Kubernetes

Kubernetes - 배포 종류

Seongjun_You 2023. 12. 9. 21:43

 

간단한 파드 배포 코드이다.

image는 nginx이다.

 

 

 

deployment이다.

pod와 비슷하나

template라는 속성이 있다.

이는 붕어빵 기계마냥 파드를 찍어주는 역할이다.

spec의 app과 template의 app이름을 같게 해주어야 한다.

 

 

 

배포할 때 명령행인자도 같이 이용할 수 있는 방법이 있을까??

가능하다.

 

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: simple-wo-command
  name: simple-wo-command 
spec:
  containers:
  - image: sysnet4admin/net-tools
    name: net-tools

net-tools이미지는 네트워크 명령어를 사용할 수 있는 이미지이다.

해당 코드를 배포하면

crashLoopBackOff이 발생한다.

왜냐하면 할 게 없기 때문이다.

 

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"]

이런 식으로 command에 명령행인자를 넣으면

running상태로 유지 중이다.

즉 꺼지지 않고 계속 유지하고 싶을 때 sleep을 넣어주면 된다.

 

배포를 하고

명령어를 기입하면 접속 가능

kubernets라는 도메인 이름으로 반환해 주는 ip가 있다.

 

 

이런 식으로 따로 명령어를 넣어줄 수도 있다.

 

 

 

 

다음은 job을 배포해 본다.

curlchk이미지가 배포된 nginx 파드를 확인하여 로그를 작성한다.

restartPolicy는 Never로 설정해 두면

필수적으로 들어가야 한다.

 

 

배포하면

Running이 아닌 Completed에서 멈춰있다.

job은 한번 실행하면 더 이상 실행하지 않도록 설계되어 있다.

로그 보존 목적에 적합하다.

 

정상적인 로그가 출력된다.

 

 

apiVersion: batch/v1
kind: Job
metadata:
  name: job-completions 
spec:
  completions: 3
  template:
    spec:
      containers:
      - name: net-tools
        image: sysnet4admin/net-tools
        command: ["curlchk",  "nginx"]
      restartPolicy: Never
apiVersion: batch/v1
kind: Job
metadata:
  name: job-parallelism
spec:
  parallelism: 3 
  template:
    spec:
      containers:
      - name: net-tools
        image: sysnet4admin/net-tools
        command: ["curlchk",  "nginx"]
      restartPolicy: Never

근데 job을 한 번만 실행하고 싶지 않은 경우도 있다.

여러 번 실행하고 싶을 때는

completions, parallelism을 사용한다.

전자는 순차적 실행,

후자는 한 번에 실행한다.

 

 

또한 job의 자동 종료 옵션에는 두 가지가 있다.

ttl이 최신기능이므로 보통 ttl을 사용한다.

 

 

 

 

주기성을 가지고 사용해야 하는 애들도 있다.

그럴 때는 CronJob을 사용한다.

apiVersion: batch/v1
kind: CronJob
metadata:
  name: cj-1m-hist3-curl 
spec:
  schedule: "*/1 * * * *"  
  jobTemplate:             # Template for job 
    spec:                  # same as before 
      template:
        spec:
          containers:
          - name: net-tools
            image: sysnet4admin/net-tools
            command: ["curlchk",  "nginx"]
          restartPolicy: Never

스케줄을 통해 1분에 한 번씩 배포하게 하는 코드이다.

파드가 1분마다 배포된다.

 

그러나 배포를 진행하면 로그는 3개까지 밖에 저장이 안 된다.

그럴 때는 

successfulJobsHistoryLimit 해당옵션으로 값을 설정해 준다.

 

 

 

 

 

 

 

이제 DaemonSet에 대해 알아본다

calico, kube-proxy, metallb 등 얘네들도 데몬 셋으로 이루어져 있다.

 

얘는 노드에 하나씩 파드를 배포해 준다.

나는 워커노드 3개이기 때문에

3개가 배포될 것이다.

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

코드를 보면 replicaset이 없다.

 

여기서 워커노드가 새롭게 추가되면 어찌 될까??

파드도 똑같이 추가된다.

 

여기서 궁금한 점

마스터 노드는 배포가 안되나??

안된다. 이 부분은 다음에 다시 나올 예정이다.

 

 

 

 

다음은 StatefulSet이다.

얘가 좀 신기하다.

이름에서 알 수 있듯이 상태에 대한 세트이다.

 

보통 디플로이나 데몬 셋 등 이런 애들은 replicas에 대한 hash값이 붙는

얘는 고정이름을 갖는다.

또한 배포한 순서에 따라 인덱스가 붙는다.

 

코드를 보면 뭔가 디플로이랑 크게 다를 게 없다.

 

 

배포해서 확인하면

hash값이 아닌 고정 이름값에 인덱스가 붙는다.

얘네들은 보통 DB나 인덱스 서버에서 쓰인다.

 

쿠버네티스에서는 디플로이나 파드를 보면 얘네들을 무참히 죽여도 상관없지만

스테이트풀셋은 배포한 애들 각각의 역할이 있기 때문에 무조권 살려야 한다.

일단 이 정도만 알고 있으면 된다.

 

 

 

'Kubernetes' 카테고리의 다른 글

Kubernetes - 볼륨 1부  (1) 2023.12.21
Kubernetes - 외부노출방법 2부  (0) 2023.12.12
Kubernetes - 외부노출방법 1부  (0) 2023.12.11
kubernetes - 명령어  (0) 2023.12.06
Kubernetes - 환경구성  (2) 2023.12.05
Comments