쿠버네티스 (6) - 파드의 관리

Seong·2023년 1월 29일
0

쿠버네티스

목록 보기
3/3
post-thumbnail

kubectl label pod <pod명> <key>=<value>

레이블 넣는법 다시알아보기

정적(Static)파드

/etc/kubernetes/manifests

쿠버네티스의 정적경로에 .yaml파일을 넣어서 스케쥴러를 사용하지않고 고정적으로 실행 시킬 수 있다.

근데 사실 스케쥴러 안쓰고 하면 오케스트레이션을할 수가없어서 쓸일 거의없음.

그냥 마스터노드의 기본 파드(스케쥴러,etcd,API서버,컨트롤러)가 이런식으로 돌아간다고만 알아두자.

파드의 상태 관리

Probe

probe가 파드의 컨테이너를 탐사함.

  • startupProbe : 시작할 때 탐사함, 통과하지못하면 재시작
  • readlinessProbe : 현재 사용중인 어플리케이션을 판단함, 문제있으면 어플리케이션을 재시작
  • livenessProbe : 어플리케이션 자체가아닌 통신상이나 네트워크상등 다른 쪽에 문제가 있을때, 엔드포인트를 빼버림

Porbe의 체크 방식은 3가지가 잇다

  • exec : 컨테이너에서 지정한 명령을 수행해서 체크
  • httpGet : 지정된 주소 및 포트 번호에 HTTP GET 명령어를 수행해서 체크
  • tcpSocket : 컨테이너의 주소 및 포트가 살아있는 상태인지를 체크

livenessProbe 체크

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: liveness-exec
  name: liveness-exec
spec:
  containers:
  - name: tardy-nginx 
    image: sysnet4admin/tardy-nginx 
    livenessProbe:
      exec:
        command:
        - cat 
        - /tmp/healthy-on
      initialDelaySeconds: 10    #처음 initial타임을 10초를 준다는 뜻
      periodSeconds: 10 #10초마다 체크해서 안올라오면 리스타트 

tcpsocket,httpGet 체크

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: liveness-httpget
  name: liveness-httpget
spec:
  containers:
  - name: healthz-nginx 
    image: sysnet4admin/healthz-nginx 
    livenessProbe:
      #tcpSocket:          #tcpSocket방식은 그냥 포트만 확인
        #port: 80
      httpGet:
        path: /healthz
        port: 80
        httpHeaders:
        - name: purpose
          value: health-check      
  		  #purposeKey에  health-check라는 값을 받으면 성공
      initialDelaySeconds: 3
      periodSeconds: 3

readinessProbe

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: readiness-exec
  name: readiness-exec
spec:
  containers:
  - name: tardy-nginx 
    image: sysnet4admin/tardy-nginx 
    readinessProbe:
      exec:
        command:
        - cat 
        - /tmp/healthy-on
      initialDelaySeconds: 10
      periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
  name: readiness-exec-lb
spec:
  selector:
    run: readiness-exec
  ports:
    - name: http
      port: 80
      targetPort: 80 
  type: LoadBalancer

readinessProbe는 엔드포인트를 뺄뿐 애플리케이션을 재시작하진 않는다.

StartupProbe

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: startup-w-others
  name: startup-w-others
spec:
  containers:
  - name: tardy-nginx 
    image: sysnet4admin/tardy-nginx  
    startupProbe:
      exec:
        command:
        - cat 
        - /tmp/healthy-on
      initialDelaySeconds: 10
      periodSeconds: 60
    livenessProbe:
      exec:
        command:
        - cat 
        - /tmp/healthy-on
      initialDelaySeconds: 10
      periodSeconds: 10
    readinessProbe:
      exec:
        command:
        - cat 
        - /tmp/healthy-on
      initialDelaySeconds: 5
      periodSeconds: 5

startupProbe는 단독으로는 거의 사용하지 않는다

멀티 패턴 컨테이너

사이드카 패턴

어댑터 패턴


변환을 하는 개념

멀티패턴의 패턴엔 사이드카,앰버서더,어댑터 3방식이 있긴한데
사실 크게 구분하면서 사용하진 않는다

파드의 어피니티

파드를 어피니티 설정하려면 기준파드가 필요하다

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: sleepy
    affinity: leader 
  name: w1-affinity-leader
spec:
  containers:
  - image: sysnet4admin/sleepy
    name: sleepy
  nodeSelector:
    kubernetes.io/hostname: w1-k8s

labels에 affinity: leader 설정으로 파드 리더설정을했다.

nodeSelector의 kubernetes.io/hostname: w1-k8s는 무조건적으로 워커노드 1번에 기준을 잡는설정이다.
그후 Deployment를 기준파드에 스케쥴링 하도록 설정할 수 있다.

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: deploy-podaffinity
  name: deploy-podaffinity
spec:
  replicas: 4
  selector:
    matchLabels:
      app: deploy-podaffinity
  template:
    metadata:
      labels:
        app: deploy-podaffinity
    spec:
      containers:
      - image: nginx
        name: nginx
      affinity:
        podAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: affinity
                operator: In
                values:
                - leader
            topologyKey: kubernetes.io/hostname

토폴로지 제약조건

apiVersion: apps/v1
kind: Deployment
metadata:
labels:
 app: deploy-topologyspreadconstraints
name: deploy-topologyspreadconstraints
spec:
replicas: 4
selector:
 matchLabels:
   app: deploy-topologyspreadconstraints
template:
 metadata:
   labels:
     app: deploy-topologyspreadconstraints
 spec:
   containers:
   - image: nginx
     name: nginx
   topologySpreadConstraints:
   - maxSkew: 1
     topologyKey: topology.kubernetes.io/region
     whenUnsatisfiable: DoNotSchedule
     labelSelector:
       matchLabels:
         app: deploy-topologyspreadconstraints
   - maxSkew: 1
     topologyKey: topology.kubernetes.io/zone
     whenUnsatisfiable: DoNotSchedule
     labelSelector:
       matchLabels:
         app: deploy-topologyspreadconstraints```
profile
메모장

0개의 댓글