62-75
특정 노드에 파드 배치를 제한하는 기능을 제공
affinitiy
nodeAffinity:
requiredDuringSchedulingIgnoreDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: size
operator: NotIn
values:
- small
operator에 따라 결과가 달라짐
In, NotIn, Exists
DuringScheduling: 파드 조재하지 않다가 처음으로 만들어 지는 상태
DuringExecution : 스케쥴링이 정해지면 영향을 미치지 않음 required가 되면 실행중인 파드가 규칙에 어긋나는 노드에 있는 경우 재기동
Taints and Tolerations - 특정 노드에만 배치 된다는 보장이 없음
Node Affinity - 노드를 지정하더라도 다른 파드가 해당 노드에 배치 안된다고 보장할 수 없음
--> 같이 써야함
노드 별 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 보다 많이 쓸 수 있지만 많이쓰면 파드를 종료함
rs와 비슷 -> 클러스터의 노드마다 파드를 실 행
새 노드가 추가 될때마다 파드가 해당 노드에 자동으로 추가
노드 제거시 파드 자동으로 제거
모든 노드에 항상 존재
ex) 모니터링 에이전트나 로그 컬렉터
kube-proxy
vivenet 네트워킹
rs와 만드는것은 비슷
kind가 DaemonSet인거만 빼면 다 같음
동작원리 -> nodeName을 지정함 생성 되기 전에 v1.12까지는 이렇게
kubelet 주기 적으로 /etc/kubernetes/manifests에 pod.yaml 파일 주기적으로 확인하여 파드 생성 및 라이프사이클을 지킴
-> 수정 시 kubelet 변화시킴
apiserver 개입 없이 kubelet이 만든 파드를 stattic pods로 부름
--pod-manifest 옵션으로 디렉토리 지정 가능
--config옵션으로 configfile 지정 후 경로 설정도 가능
시험에서
1. kubelet 서비스 옵션 파일 확인 경로 확인
2. 없으면 config에서 확인
docker ps로 컨테이너 확인 가능
kubelet 1, 2 동시에 가능
apiserver가 staticpod 인식함 => kubelet이 static 파드 만들면 그게 클러스터의 일부라면 api 서버에 미러 개체를 만듬
static 파드 사용 이유 -> 서비스 고장 시 kubelet이 자동으로 복구하려고 함
daemonset : apiserver에 의해 제어, 스케쥴러의 영향
static pod : kubelet이 직접 만듬, apiserver 상관없이, 스케쥴러 영향없이