[CKA] Scheduler(2)- Node Selector와 Node Affinity

HanΒ·2024λ…„ 1μ›” 23일

Udemy_CKA

λͺ©λ‘ 보기
4/6

πŸ‘€ Label에 λŒ€ν•œ κΈ°λ³Έ κ°œλ…

  • νŒŒλ“œμ™€ 같은 μ˜€λΈŒμ νŠΈμ— μ²¨λΆ€λœ 킀와 κ°’μ˜ 쌍 key:value
  • λ ˆμ΄λΈ”μ„ 톡해 였브젝트의 ν•˜μœ„ μ§‘ν•© 선택&ꡬ성 κ°€λŠ₯
  • λ ˆμ΄λΈ” μ˜ˆμ‹œ
    "release" : "stable", "release" : "canary"
    "environment" : "dev", "environment" : "qa", "environment" : "production"
    "tier" : "frontend", "tier" : "backend", "tier" : "cache"
    "partition" : "customerA", "partition" : "customerB"
    "track" : "daily", "track" : "weekly"
  • metadataλž€μ— 기둝
apiVersion: v1
kind: Pod
metadata:
  name: label-demo
  labels:
    environment: production
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

πŸ’‘ Node Selector

  • νŒŒλ“œμ— λ ˆμ΄λΈ” μ„€μ •ν•˜κΈ°
    kubectl label nodes minikube disktype=ssd
  • νŒŒλ“œμ™€ λ ˆμ΄λΈ” μ‘°νšŒν•˜κΈ°
    kubectl get pods --show-labels
  • specλž€μ— 기둝
apiVersion: v1
kind: Pod
metadata:
  name: k8s
spec:
  containers:
  # ~~
  nodeSelector:
    disktype: ssd 

πŸ’‘ node affinityλž€? λ§ν¬ν…μŠ€νŠΈ

  • λ…Έλ“œμ…€λ ‰ν„°μ™€ λΉ„μŠ·ν•˜κ²Œ λ…Έλ“œμ˜ λ ˆμ΄λΈ” 기반으둜 νŒŒλ“œλ₯Ό μŠ€μΌ€μ€„λ§
  • λ…Έλ“œμ–΄ν”Όλ‹ˆν‹°μ™€ λ…Έλ“œμ…€λ ‰ν„°λ₯Ό ν•¨κ»˜ μ„€μ •ν•  수 있으며 μ΄λ•ŒλŠ” λ…Έλ“œμ–΄ν”Όν‹°λ‹ˆμ™€ λ…Έλ“œμ…€λ ‰ν„°μ˜ 쑰건을 λͺ¨λ‘ λ§Œμ‘±ν•˜λŠ” λ…Έλ“œμ— νŒŒλ“œλ₯Ό μŠ€μΌ€μ€„λ§
  • νŒŒλ“œλ₯Ό kube-Scheduler에 μ˜μ‘΄ν•˜μ§€ μ•Šκ³  μ—”μ§€λ‹ˆμ–΄ μ˜λ„μ— 따라 νŠΉμ • λ…Έλ“œμ— 배포할 수 μžˆλ„λ‘ ν•Έλ“€λ§ν•˜λŠ” μ„€μ •
  • 배포쑰건/μ˜€νΌλ ˆμ΄ν„°/weightλ₯Ό ν™œμš©ν•΄ 배포 μŠ€μΌ€μ€„λ§μ„ μ„ΈλΆ€μ μœΌλ‘œ 핸듀링 ν•  수 μžˆλŠ” 점이 nodeSelctorμ™€μ˜ 차이점

두가지 ν•„λ“œ

βœ” requiredDuringSchedulingIgnoredDuringExecution: λ°˜λ“œμ‹œ λ§Œμ‘±ν•΄μ•Ό ν•˜λŠ” 쑰건

affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: disktype
          operator: In
          values:
          - ssd

βž–βž–βž–βž–βž–βž–βž–βž–βž–βž–βž–βž–βž–βž–βž–βž–βž–βž–βž–βž–βž–βž–βž–βž–
βœ” preferredDuringSchedulingIgnoredDuringExecution: λ§Œμ‘±ν•˜λ©΄ 쒋을 쑰건

affinity:
  nodeAffinity:
    preferredDuringSchedulingIgnoredDuringExecution:
    - weight: 10
      preference:
      - matchExpressions:
       - key: disktype
         operator: In
         values:
         - hdd

key ν•„λ“œ κ°’ λ§ν¬ν…μŠ€νŠΈ

key ν•„λ“œ κ°’μ„€λͺ…
Invalues[] ν•„λ“œμ— μ„€μ •ν•œ κ°’ 쀑 λ ˆμ΄λΈ”μ— μžˆλŠ” κ°’κ³Ό μΌμΉ˜ν•˜λŠ” 것이 ν•˜λ‚˜λΌλ„ μžˆλŠ”μ§€ 확인
NotInInκ³Ό λ°˜λŒ€λ‘œ values[]에 μžˆλŠ” κ°’ λͺ¨λ‘μ™€ λ§žμ§€ μ•ŠλŠ” μ§€ 확인
Existskey ν•„λ“œμ— μ„€μ •ν•œ 값이 λ ˆμ΄λΈ”μ— μžˆλŠ”μ§€λ§Œ 확인 (values[] ν•„λ“œX)
DoseNotExistExists와 λ°˜λŒ€λ‘œ λ…Έλ“œμ˜ λ ˆμ΄λΈ”μ— key ν•„λ“œ 값이 μ—†λŠ”μ§€λ§Œ 확인
GtGreater than의 μ•½μžλ‘œ values[] ν•„λ“œμ— μ„€μ •λœ 값이 μ„€μ •λœ κ°’ 보닀 더 큰 μˆ«μžν˜• 데이터 인지 확인 (values[] ν•„λ“œμ—λŠ” 값이 ν•˜λ‚˜λ§Œ μžˆμ–΄μ•Ό 함)
LtLower than의 μ•½μžλ‘œ values[] ν•„λ“œμ— μ„€μ •λœ 값이 μ„€μ •λœ κ°’ 보닀 더 μž‘μ€ μˆ«μžν˜• 데이터 인지 확인 (values[] ν•„λ“œμ—λŠ” 값이 ν•˜λ‚˜λ§Œ μžˆμ–΄μ•Ό 함)

key:value값을 μ„€μ •ν•˜μ—¬ Affinity μ„€μ •

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: blue
spec:
  replicas: 3
  selector:
    matchLabels:
      run: nginx
  template:
    metadata:
      labels:
        run: nginx
    spec:
      containers:
      - image: nginx
        imagePullPolicy: Always
        name: nginx
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: color
                operator: In
                values:
                - blue

νŠΉμ • λ…Έλ“œμ˜ 라벨값을 μ΄μš©ν•˜μ—¬ Affinity μ„€μ •

apiVersion: apps/v1
kind: Deployment
metadata:
  name: red
spec:
  replicas: 2
  selector:
    matchLabels:
      run: nginx
  template:
    metadata:
      labels:
        run: nginx
    spec:
      containers:
      - image: nginx
        imagePullPolicy: Always
        name: nginx
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: node-role.kubernetes.io/control-plane
                operator: Exists

0개의 λŒ“κΈ€