새소식

인기 검색어

Kubernetes

7/9 데몬셋, 잡 컨트롤러, metal lb 등 실습

  • -

데몬셋

1. 모든노드에 하나씩 배치(무조건 하나씩이여야 함)

2. 특정노드에만 하나씩 배치(")

원하는 노드에만 배치가능(레이블을 이용)

쿠베프록시: 쿠버네티스의 모든 노드는 쿠베프록시란 파드가 배치된다.

칼리코 : 네트워크 애드온(반드시 얘가 배치되어야함)

이런것들을 에이전트라고함(일을 대신해주는것)

 

 

 

* 데몬셋 생성

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


kubectl create -f myapp-ds.yaml
kubectl get daemonsets.apps
kubectl get nodes --show-label
  
  
* 노드레이블 지정
kubectl label nodes k-node1 node=development  (뒤에 - 붙이면 지워짐)
kubectl get k-node1 --show-labels
kubectl get node k-node1 --show-label
  
* 데몬셋 확인
kubectl get daemonsets.apps
kubectl get pods

*잡

언젠가는 끝나는 작업. 종료되는 것을 보장

레이블 셀렉터로 직접 지정하지않음

restart policy(재시작 정책)의 기본값이 always(다시시작) 인데, 이걸로 설정하여 잡컨트롤러를 만들면 오류생김. 그래서 never 아니면 onFailure로 해줘야함.

 

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


vi myapp-job.yaml
kubectl create -f myapp-job.yaml
kubectl get jobs.batch
kubectl get pods
kubectl delete -f myapp-job.yaml

 

* 다중 잡 컨트롤러 생성

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


vi myapp-job-comp.yaml
kubectl create -f myapp-job-comp.yaml
kubectl get jobs.batch
watch kubectl get po,rs,ds
kubectl delete -f myapp-job-comp.yaml





* 병렬 다중 잡 컨트롤러 생성


apiVersion: batch/v1
kind: Job
metadata:
  name: myapp-job-para
spec:
  completions: 3
  parallelism: 3
  template:
    metadata:
      labels:
        app: myapp-job-para
    spec:
      restartPolicy: OnFailure
      containers:
      - name: myapp
        image: busybox
        command: ["sleep", "20"]
        
        
kubectl create -f myapp-job-para.yaml
kubectl get jobs.batch
kubectl get po --watch
kubectl delete -f myapp-job-para.yaml




* 잡의 종료
- 유효 데드라인이 설정된 오브젝트 만들기

apiVersion: batch/v1
kind: Job
metadata:
  name: myapp-job-atvdl
spec:
  backoffLimit: 3
  activeDeadlineSeconds: 30
  template:
    metadata:
      labels:
        app: myapp-job-atvdl
    spec:
      restartPolicy: OnFailure
      containers:
      - name: myapp
        image: busybox
        command: ["sleep", "20"]

크론잡은 베타버전을 사용함. 버전이 다른거 기억해두기

 

* 크론잡 컨트롤러 생성 및 파드 확인

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


kubectl create -f myapp-cj.yaml
kubectl get cronjobs.batch
kubectl get po --watch
kubectl delete -f myapp-cj.yaml

*네트워크

로드밸런서는 기본적으로 리버스 프록시임

클러스터 아이피는 클러스터 내부에서만 접속가능

 

서비스를 만들면 똑같은 이름의 앤드포인트 생성됨

 

apiVersion: v1
kind: Service
metadata:
  name: myapp-svc
spec:
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: myapp-rs
    
vi myapp-svc.yaml
kubectl create -f myapp-svc.yaml
kubectl get services myapp-svc
kubectl get endpoints myapp-svc
kubectl create -f myapp-rs.yaml
kubectl get endpoints myapp-svc
kubectl get pods -o wide
kubectl run nettool -it --image=ghcr.io/c1t1d0s7/network-multitool --rm bash
bash-5.1# curl 10.107.6.102
Hello World!
myapp-rs-cqn7t

 

* 서비스의 세션 어피니티 구성

apiVersion: v1
kind: Service
metadata:
  name: myapp-svc-ses-aff
spec:
  sessionAffinity: ClientIP
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: myapp-rs

 


https://metallb.universe.tf/

 

 

MetalLB, bare metal load-balancer for Kubernetes

MetalLB is a load-balancer implementation for bare metal Kubernetes clusters, using standard routing protocols. MetalLB is a young project. You should treat it as a beta system. The project maturity page explains what that implies. Why? Kubernetes does not

metallb.universe.tf

 

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.200.200-192.168.200.210  -> 로드밸런서가 사용할 아이피 지정(200번대)

192.168.200.200 은 로드밸런서 아이피

 

apiVersion: v1
kind: Service
metadata:
  name: myapp-svc-np
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 8080
    nodePort: 31111
  selector:
    app: myapp-rs

 

 


 


* 레디니스 프로브

어플리케이션의 작동여부를 주기적으로 체크하는게 라이브니스 프로브

웹서버 필수아님

다음주월욜 점심 12시까지

노트북에 메탈까지 설정해야함.

과제
0.00MB

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.