49-61
스케쥴러 없을 경우 셀프로 스케쥴링
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
tier: frontend
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 8080
nodeName <- 쿠버네티스가 설정
스케쥴러 파드 상태 확인 후 nodeNAme이 없는 노드를 찾음
스케쥴링 알고리즘 -> 올바른 노드 확인
확인 되면 노드에 파드를 지정 노드의 이름을 지정하여
스케쥴링할 스케쥴러가 없다면 pod pending -> 직접 지정 가능
파드 만드는 동안 nodeName필드에 직접 지정 -> 생성 시에만 지정 가능
쿠버네티스 노드이름 수정 못하게 함
Binding리소스를 생성하여 target node를 지정
apiVersion: v1
kind: Binding
metadata:
name: nginx
target:
apiVersion: v1
kind: Node
name: node02
노드 지정 -> 바인딩 API에 POST를 보냄 Json포맷으로
그룹을 묶는 표준 -> 필터링을 하기 위함
레이블은 속성 셀렉터는 이 속성들을 필터링하는 것을 도와줌
metadata.labels 아래에 key-value 형식으로 레이블 설정 가능
kubectl get pods --selector app=App1
쿠버네티스는 내부에서 사용하여 다른 개체들을 연결함
rs는 파드를 그룹으로 묶을 때 사용
template 아래에 레이블은 파드의 레이블, metadata.labels 는 rs의 레이블
서비스에서도 파드의 레이블을 일치시켜서 생성
정보 수집 목적으로 다른 세부 사항을 기록하는데 사용
이름 버전 빌드 정보와 같은 정보들
Taint 노드에 설정 가능하며 파드가 생성되지 못하도록 설정
Tolerations Taint를 무시하는 속성 파드에 설정 가능
노드1에 taint 설정 -> 노드1에 스케쥴링 되지 않음
파드 D에 tolerations 설정 시 노드1에 스케쥴링 가능
ABC는 노드 2,3에 배치
kubectl taint nodes node-name key=value:taint-effect
NoSchedule: 파드 스케쥴링 불가
PreferNoSechedule: 스케쥴링 안되는걸 선호
NoExecute: 실행 불가 새 파드가 노드에 지정되지 않고 기존 파드가 있다면 퇴거되어야 하는
kubectl taint nodes node1 appblue:NoSchedule
..
kind: Pod
...
spec:
tolerations:
- key: app
operator: "Equal"
value: "blue"
effect:" NoSchedule"
모든 값은 더블코드로 인코딩 되어야 함
스케쥴러는 마스터노드에 파드를 스케쥴링 하지 않음
생성시 마스터노드에 자동으로 설정
kubectl describe node kubemaster | grep Taint
pod.spec.nodeSelector
size <- labels
파드를 찾아낼 노드를 찾기 위해 설정
노드에 레이블을 설정하는 법
kubectl label nodes =
보다 복잡한 요구 사항이라면? -> Node Affinity