Notice
Recent Comments
Link
«   2025/05   »
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 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

정보통신공학과 노선변경기

Kubernetes 4일차 daemonset, Job controller, Cronjob controller, 네트워크- 서비스, Nodeport, Loadbalancer(Metal lb 설치) 본문

Sub7_Kubernetes

Kubernetes 4일차 daemonset, Job controller, Cronjob controller, 네트워크- 서비스, Nodeport, Loadbalancer(Metal lb 설치)

HEONPOLI 2021. 7. 19. 22:53

*데몬셋(ds)

모든 노드에 파드를 하나씩만  배치하는 컨트롤러, 복제본 지정 X

 

레플리카셋은 파드를 지정하지만, 데몬셋은 노드를 지정한다(nodeSelector 이용,파드 또한 생성하기는 한다)

 

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: myapp-ds
spec:
  selector:
matchLabels:
  app: myapp-ds
  template:
metadata:
  labels:
    app: myapp-ds
spec:
  nodeSelector:
    node: development
  containers:
  - name: myapp
    image: ghcr.io/c1t1d0s7/go-myweb
    ports:
    - containerPort: 8080

 

node에 label 생성해주지 않고 daemonset 생성한다면

kubectl get ds 하더라도 desired가 0이다.

 

따라서 k-node1을 예시로 node=development 레이블을 지정해준다면

kubectl label node k-node1 node=development 

 

desired는 1이되고 pod가 k-node1에 배치,생성된다. 

 

노드에 장애가 일어나도 다른 노드로의 파드가 배치되지는 않는다..

 

<<노드 하나 없애보기>>



*Job 컨트롤러

어플리케이션이 실행되고 완료되면 파드의 할 일이 끝난 것으로 간주하고, 파드를 종료시킨다.

 

레이블 셀렉터 직접지정X, 셀렉터에 의해 관련없는 파드가 선택되서 잡이 이미 완료되었다고 

 

판단해서 잘못 종료시킬 수 있기 때문이다.

apiVersion: batch/v1
kind: Job
metadata:
  name: myapp-job
spec:
  template:
metadata:
  labels:
    app: myapp-job
spec:
  restartPolicy: OnFailure
  containers:
  - name: myapp
    image: busybox
    command: ["sleep", "60"]

 

    

**다중 잡 컨트롤러

spec.completions 의 개수를 지정해주면 순차적으로 그 개수만큼 작업을 진행한다.

spec.parallelism 의 개수를 지정하면 동시에 실행할 잡의 개수를 지정해줄 수 있다. 

 

apiVersion: batch/v1
kind: Job
metadata:
  name: myapp-job-para
spec:
  completions: 3
  parallelism: 3 #동시에 실행할 잡의 개수를 3개로 지정
  template:
metadata:
  labels:
    app: myapp-job-para
spec:
  restartPolicy: OnFailure
  containers:
  - name: myapp
    image: busybox
    command: ["sleep", "60"]

 

**백오프, 유효 데드라인 설정

spec.backoffLimit: 잡을 실패로 만들기 전 재시도 횟수

spec.activeDeadlineSeconds : 잡이 시작된 후 작동할 유효한 시간설정 가능






*CronJob

주기적으로 잡을 반복적으로 실행할 필요가 있을 때 사용하는 컨트롤러

 

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: myapp-cj
spec:
  schedule: "*/2 * * * *"
  jobTemplate:
spec:
  template:
    metadata:
      labels:
        app: myapp-cj
    spec:
      restartPolicy: OnFailure
      containers:
      - name: myapp
        image: busybox
        command: ["sleep", "20"]

 

**크론잡 컨트롤러의 제한사항

1) startingDeadlineSeconds

초를 기준, 마지막 스케줄링된 잡 시점부터 지금까지 얼마나 많은 잡이 누락되었는지 확인 카운팅할 데드라인시간.

100 ⇒ 마지막 스케줄링부터 100초까지 일정을 놓친 잡이 있는지 확인

2) concurrencyPolicy

Allow: 잡 동시실행 가능

Forbid: 동시실행 불가능

Replace: 현재 실행중인 잡 취소 후 새로운 잡으로 교체

 

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: myapp-cj-dl-al
spec:
  schedule: "* * * * *"
  startingDeadlineSeconds: 100
  concurrencyPolicy: Allow
  jobTemplate:
spec:
  template:
    metadata:
      labels:
        app: myapp-cj-dl-al
    spec:
      restartPolicy: OnFailure
      containers:
      - name: myapp
        image: busybox
        command: ["sleep","80"]




*네트워크

**클러스터 내부 서비스

1) 서비스

**서비스 탐색

환경변수이용 => 많이 안써

***DNS를 이용한 서비스탐색

모든 서비스를 생성할 때 FQDN이 할당된다

host -v myapp-svc # fqdn 확인

네임스페이스가 다른 파드에서 서비스 검색할 때 

myapp-svc.default 이렇게 정해줘야 검색된다 

 

**클러스터 외부 서비스

서비스의 종류

1) ClusterIP : 클러스터 내부용 서비스 

 

2) NodePort : 

클러스터 모든 노드에 외부 접근용 포트를 할당함, 노드의 포트를 사용하여 외부에서 접근 가능, 노드의 포트로 접근하면 서비스가 파드로 리다이렉트 해준다. 

3) LoadBalancer : metalLB를 사용하여 구현한다. NodePort의 확장, 로드밸런서로 접근하면 서비스를 통해 파드로 리다이렉션 함

서비스형태로 로드밸런서를 type으로 해주고,  rs pod 들이 이미 running 상태임을 

이미 running 상태이다. myapp-rs.yaml 파일을 create한 상태이다.

Metallb가 설치되어있다면

Kubectl get svc myapp-svc-lb 확인했을 때 external-ip 또한 주어진다.

curl http://192.168.200.200 으로 접근가능하다. 

4) ExternalName : 

 

lb - > node port -> svc -> enpoint 를 통해서 pod로.. 의 경로로 파드에 접속 가능하게 해준다..

 

똑같은 파드를 셀렉팅한다는 것을 알아보느ㄴ 법 

kubectl get ep # 엔드포인트 같으면 똑같은 파드 셀렉팅 한 것 

sudo ss -tnlp # 포트상태 보는 명령어

 

***LB 구성

***MetalLB 설치

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.10.2/manifests/namespace.yaml

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.10.2/manifests/metallb.yaml

 

<config.yaml 파일 작성>

kubectl apply -f config.yaml 실행