그러나 기본적으로 master 노드에서 실행되는 프로그램이 있다. 왜일까? ===="> 그러나 기본적으로 master 노드에서 실행되는 프로그램이 있다. 왜일까? ===="> 그러나 기본적으로 master 노드에서 실행되는 프로그램이 있다. 왜일까? ====">
1. Node Label & Node Selector

	* 지정된 노드에 파드를 실행하고 싶을 때 사용
	
2. Affinity & Anti-Affinity

	1) Node Affinity + Node Label
	
		[참고] "Node Label/Node Selector" vs "Node Label/Node Affinity"
		* Node Label/Node Selector : 지정된 노드에 파드를 실행하고 싶을 때 사용
															 - 단순 지정하는 용도
		
		* Node Label/Node Affinity : 지정된 노드에 파드를 실행하고 싶을 때 사용
    												   + 조금 더 폭 넓은 조건 부여 가능(가중치 부여 가능)
	
	2) Pod Affinity & Pod Anti-affinity
	
		[참고] "Node Affinity/Node Selector" vs "Pod Affinity/Anti-affinity"
		* Node Affinity: 파드와 노드 간의 관계
		* Pod Affinity/Anti-affinity: 파드와 파드 간의 관계
		
		[참고] "Pod Affinity" vs "Pod Anti-affinity"
		* Pod Affinity      : 파드와 상관 있는 파드를 근접해서 배치한다.
		* Pod Anti-affinity : 기존 파드와 새로운 파드를 멀리 배치(topology key 필요)
		
3. Node Taint & Pod Toleration

	[참고] "Node Affinity" vs "Node Taint"
	* Node Affinity : 특정 노드에 파드를 배치
	* Node Taint    : 특정 노드에 파드를 배치하지 않음 (단, Pod Toleration 설정 시 예외)
			- 기본적으로 control-plane(master 노드)에 설정되어있음.
			=> 그러나 기본적으로 master 노드에서 실행되는 프로그램이 있다. 왜일까?
			=================================================================
			kube-system      calico-node-kzspb               1/1     master
			kube-system      etcd-master                     1/1     master
			kube-system      kube-apiserver-master           1/1     master
			...
			=================================================================
		=> 테인트 설정이 된 노드에는 effect에 설정된 키와 같은 이름을 갖고있어야 
			 해당 노드에서 실행할 수 있다.
			 # kubectl describe nodes master | grep -A 1 -i taint
		
	
	[참고] "Node Taint" vs "Pod toleration"
	* Node Taint     : 특정 노드 파드를 스케줄링 하지 않음
	* Pod Toleration : Node Taint가 설정된 노드에서 예외적으로 Pod를 스케줄링
	
	=> 테인트(Taint) = 노드와 관련 / 톨러레이션(Toleration) = 파드와 관련
	
4. Cordon/Uncordon & Drain

	[참고] Cordon vs Drain
	* Cordon : 노드에 스케줄링(파드 배포) 중지
	* Drain  : + 기존 파드를 삭제
		# drain의 작업 순서 -> cordon으로 스케줄링을 중지 시킨 후 파드를 삭제 한다
		# drain 종료 후 uncordon으로 스케줄링을 재개하면 된다.
	
	# kubectl   cordon node1
	# kubectl uncordon node1
	
	# kubectl drain node1 --force --ignore-daemonsets   (+ --delete-emptydir-data)
	# kubectl uncordon node1

수업 자료

Kubernetes_제14장_파드스케줄링_2025_0818[책작업].hwp