티스토리 뷰

1. 문제 시나리오 #1 노드 셀렉터

- 특정 어플리케이션이 특정 노드에서만 실행되도록 설정 

- 노드 레이블 설정: 노드 중 하나에 disktype=ssd라는 레이블을 추가

- 파드 생성: nginx 이미지의 파드로, disktype=ssd 레이블이 있는 노드에서만 실행되어야 한다. 

1) 해결과정 

(1) 노드에 레이블 추가

kubectl label nodes <node-name> disktype=ssd

(2) YAML 파일 작성

#nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
  - name: nginx
    image: nginx
  nodeSelector:
    disktype: ssd

(3)파드 생성 

kubectl apply -f nginx-pod.yaml

2. 문제시나리오 #2

1) 문제시나리오

- 노드 어피니티와 안티 어피니티가 설정된 디플로이먼트 생성 

- 어퍼니티 설정: app=frontend 레이블이 있는 노드에서만 실행

- 안티 어피니티 설정: 동일한 노드에 동일한 디플로이먼트의 다른파드가 스케줄링되지 않도록 설정

2) 해결과정

(1) 노드에 레이블추가

kubectl label nodes <node-name> app=frontend

(2) Deployment YAML 파일 작성

#frontend-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: frontend
  template:
    metadata:
      labels:
        app: frontend
    spec:
      affinity:
      #노드 어피니티
        nodeAffinity:
        #필수 조건 
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            #app 라벨중 frontend를 가진 노드
            - matchExpressions:
              - key: app
                operator: In
                values:
                - frontend
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchLabels:
                app: frontend
            topologyKey: "kubernetes.io/hostname"
      containers:
      - name: nginx
        image: nginx

(3) Deployment 생성

kubectl apply -f frontend-deployment.yaml

(4) TopologyKey 개념 설명 :

- 노드 그룹화 기준이며, 어피니티에 직접적인 영향을 주지 않는다. 

- 해당 Pod가 Affinity에 따라서 어떤 노드에 배치가 된다면,  그 노드 topologyKey에 따라 그룹화된다. 

- 단순히 Pod, 노드간의 관계를 정의할 뿐, 어피니티에 직접 영향을 주지는 않는다. 

- Node값을 기준으로 topologyKey이 구성된다. (호스트네임, 가용영역, 지역) 

3. 문제시나리오 #3 Taints와 Tolerations 

1) 설명:

-특정 노드를 워크로드 전용으로 지정하고, 다른 워크로드가 해당 노드에 스케줄링되지 않도록 설정 

- 노드 테인트 추가: 특정 노드에 key=workload-only:NoSchedule라는 테인트 추가 

- 파드 톨러레이션 설정: workload-only 테인트를 허용하도록 톨러레이션을 설정한 파드를 생성 

2) 해결과정

(1) 노드에 테인트 추가

kubectl taint nodes <node-name> workload-only=true:NoSchedule

 

(2) YAML 파일 작성 

apiVersion: v1
kind: Pod
metadata:
  name: toleration-pod
spec:
  tolerations:
  - key: "workload-only"
    operator: "Equal"
    value: "true"
    effect: "NoSchedule"
  containers:
  - name: nginx
    image: nginx

(3) 파드 생성 

kubectl apply -f toleration-pod.yaml

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함