CKA Study Day 6

김건호·2023년 4월 3일
0

62-75

Node Affinity

특정 노드에 파드 배치를 제한하는 기능을 제공

affinitiy
  nodeAffinity:
    requiredDuringSchedulingIgnoreDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: size
          operator: NotIn
          values:
          - small

operator에 따라 결과가 달라짐
In, NotIn, Exists

  • requiredDuringSchedulingIgnoreDuringExecution
  • preferredDuringSchedulingIgnoreDuringExecution
    파드 최대한 일치하는 곳에다 스케쥴링 안된다면 아무곳이나

DuringScheduling: 파드 조재하지 않다가 처음으로 만들어 지는 상태
DuringExecution : 스케쥴링이 정해지면 영향을 미치지 않음 required가 되면 실행중인 파드가 규칙에 어긋나는 노드에 있는 경우 재기동


Taints and Tolerations vs Node Affinity

Taints and Tolerations - 특정 노드에만 배치 된다는 보장이 없음

Node Affinity - 노드를 지정하더라도 다른 파드가 해당 노드에 배치 안된다고 보장할 수 없음

--> 같이 써야함


Resoure Requiremetnes and Limits

노드 별 CPU, 메모리, Disk가 있음

스케쥴러는 충분한 리소스가 있는 노드에 파드를 할당 -> 리소스 부족시 파드 Pending 상태

0.5core 256M가 기본 Requests

pod.spec.containers.resuorces.requests.memory와 cpu 지정가능

0.1 = 100m CPU 1m이 최소 1 = 1core

Mi 메가 바이트 26438868처럼 지정 가능 1G는 Gigagbyte 1000Mi 1Gi는 Gibibyte 1024Mi

컨테이너 환경에서 리소스 제한이 없음 -> 제한을 둘 수 있음
기본적으로 1core, 512mi로 제한

pod.spec.containers.resuorces.limits.memory와 cpu 지정가능

limit지정시 지정된 limits 넘지 않게 함
메모리는 limit 보다 많이 쓸 수 있지만 많이쓰면 파드를 종료함


DaemonSets

rs와 비슷 -> 클러스터의 노드마다 파드를 실 행
새 노드가 추가 될때마다 파드가 해당 노드에 자동으로 추가
노드 제거시 파드 자동으로 제거
모든 노드에 항상 존재

ex) 모니터링 에이전트나 로그 컬렉터
kube-proxy
vivenet 네트워킹

rs와 만드는것은 비슷
kind가 DaemonSet인거만 빼면 다 같음

동작원리 -> nodeName을 지정함 생성 되기 전에 v1.12까지는 이렇게


Static Pods

kubelet 주기 적으로 /etc/kubernetes/manifests에 pod.yaml 파일 주기적으로 확인하여 파드 생성 및 라이프사이클을 지킴
-> 수정 시 kubelet 변화시킴
apiserver 개입 없이 kubelet이 만든 파드를 stattic pods로 부름

--pod-manifest 옵션으로 디렉토리 지정 가능

--config옵션으로 configfile 지정 후 경로 설정도 가능

시험에서
1. kubelet 서비스 옵션 파일 확인 경로 확인
2. 없으면 config에서 확인

docker ps로 컨테이너 확인 가능

  1. static pod 디렉토리
  2. etcd api endpoints -> api server가 kubelet에 input을 제공

kubelet 1, 2 동시에 가능

apiserver가 staticpod 인식함 => kubelet이 static 파드 만들면 그게 클러스터의 일부라면 api 서버에 미러 개체를 만듬

static 파드 사용 이유 -> 서비스 고장 시 kubelet이 자동으로 복구하려고 함

daemonset과 static pod의 차이

daemonset : apiserver에 의해 제어, 스케쥴러의 영향
static pod : kubelet이 직접 만듬, apiserver 상관없이, 스케쥴러 영향없이

profile
Ken, 🔽🔽 거노밥 유튜브(house icon) 🔽🔽

0개의 댓글