실습
Manual Scheduling
Pod 생성
Pod 상태 확인
위의 명령어를 실행하면 아래와 같은 결과를 확인할수 있습니다.
1분 정도 시간이 지난후에 Pod 상태를 확인
Kubernetes 공식문서 리뷰 - https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodename
Pod Garbage Collector 코드 리뷰 - https://github.com/kubernetes/kubernetes/blob/master/pkg/controller/podgc/gc_controller.go#L212
노드 목록 확인
spec.nodeName에 위의 명령어의 결과로 나온 첫번째 노드 이름을 넣고 Pod를 생성
Pod 상태 확인
spec.nodeName을 명시하지 않고 Pod 생성
spec.nodeName을 명시하지 않고 생성한 Pod에 발생한 Event 확인
spec.nodeName을 명시하고 생성한 Pod에 발생한 Event 확인
Pod 삭제
Node Selector
Pod 생성
Pod 상태 확인
위의 명령어를 실행하면 아래와 같은 결과를 확인할수 있습니다.
아래의 명령어를 사용해서 Pod가 배포되지 않는 이유를 찾으세요.
Node에 부여된 Label 확인
두번째 노드에 키(Key)는 env 이고 값(Value)은 dev 인 Label 부여
Node에 Label이 부여되었는지 확인
Pending 상태였던 Pod가 배포됐는지 확인
Pod에 발생한 Event 확인
Node에 부여한 Label 삭제
Node에 Label이 삭제되었는지 확인
Pod 상태 확인
Pod 삭제
Node Affinity
Node에 부여된 Label 확인
각 Node의 가용영역 확인
Pod 생성
Pod가 배포된 노드 확인
Node의 가용영역 확인
각각의 Pod가 어떤 절차에 의해서 각각의 Node에 스케쥴링 되었는지 확인
Pod 삭제
아래의 YAML 파일에 명시된 spec.affinity가 의미하는 것을 설명하고 Pod 생성
Pod가 배포된 노드 확인
각각의 Pod가 어떤 절차에 의해서 각각의 Node에 스케쥴링 되었는지 확인
Pod 삭제
Pod Affinity
Pod 생성
아래의 YAML 파일에 명시된 spec.template.spec.affinity가 의미하는 것을 설명하고 Deployment 생성
Pod가 배포된 노드 확인
Pod 삭제
mod-security Pod가 삭제되어서 Deployment에 명시한 Affinity 규칙이 더 이상 성립되지 않습니다. 이 경우 어떤일이 발생하는지 설명하세요.
Deployment 삭제
아래의 YAML 파일에 명시된 spec.template.spec.affinity가 의미하는 것을 설명하고 Deployment 생성
Pod가 배포된 노드 확인
아래의 YAML 파일에 명시된 spec.template.spec.affinity가 의미하는 것을 설명하고 Deployment 생성
Pod가 배포된 노드 확인
생성된 리소스 삭제
Spread Pod Across Cluster
nodeSelector를 명시한 Pod 생성
각 Pod가 배포된 Node 확인
각 Node별로 배포된 Pod 갯수 확인
nodeSelector를 명시하지 않은 Pod 생성
각 Pod가 배포된 Node 확인
각 Node별로 배포된 Pod 갯수 확인
위에서 nodeSelector를 명시하지 않고 생성한 Pod 삭제
각 Pod가 배포된 Node 확인
각 Node별로 배포된 Pod 갯수 확인
Deployment 생성
Deployment를 통해서 생성된 Pod들이 배포된 Node 확인
EKS 설정창에서 Scheduler의 로깅을 활성화하면 CloudWatch를 통해서 아래와 같은 구성으로 kube-scheduler가 구동되는 것을 확인 가능
Deployment 삭제
각 Node별로 배포된 Pod 갯수 확인
podAntiAffinity를 명시하고 Pod 생성
위에서 생성한 Pod들이 배포된 Node 확인
위에서 생성한 Pod 삭제
topologySpreadConstraints를 명시하고 Pod 생성
위에서 생성한 Pod들이 배포된 Node 확인
리소스 삭제
Requests & Limits
Pod 생성
Pod 상태 확인
위의 명령어를 실행하면 아래와 같은 결과를 확인할수 있습니다.
아래의 명령어를 사용해서 Pod가 배포되지 않는 이유를 찾으세요.
노드의 상태의 상세값들을 확인
위에서 확인한 값들중에서 allocatable.cpu가 무엇을 의미하는지 확인 - https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/#node-allocatable
노드별로 할당 가용한 CPU 리소스를 확인
Pending 상태인 Pod를 삭제
노드에 할당 가용한 최대 CPU 값을 spec.container.resources.requests.cpu에 넣고 Pod 생성
Pod가 배포되는지 확인하고 만약 배포되지 않는다면 그 이유를 확인
Pod 삭제
하나의 노드에 키(Key)는 env 이고 값(Value)은 dev 인 Label 부여
Node에 Label이 부여되었는지 확인
Pod 생성
Pod가 생성됐는지 확인
Metric Server 설치
Pod들의 CPU 사용량 확인
노드별로 할당 가용한 Memory 리소스 확인
Pod 재생성
Pod가 생성되었는지 확인
Metrics Server가 60초 마다 지표를 수집하기 때문에 2-3분 정도 대기 - https://github.com/kubernetes-sigs/metrics-server/blob/master/FAQ.md#how-often-metrics-are-scraped
Pod들의 메모리 사용량 확인
Pod가 배포된 Node에 발생한 Event 확인
Pod의 상태가 OOMKilled가 될때까지 2-3분간 대기
Pod 상태 확인
상태가 Running이 아닌 Pod가 있으면 원인을 확인
각 Pod별 QoS 클래스 확인
Pod가 배포된 Node에 발생한 Event 확인
새로운 터미널을 열고 Pod가 배포된 Node의 인스턴스 ID를 확인하고 환경변수로 지정
Pod가 배포된 Node로 Session Manager 연결
커널 로그에서 OOM 관련된 내용이 있는지 확인 - https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#node-out-of-memory-behavior
Session Manager 종료
리소스 삭제
Taints & Tolerations
Pod 생성
Pod가 배포된 Node 확인
Node 목록 확인
첫번째 Node에 Taint 부여
Node에 부여된 Taint 확인
Pod 재생성
Pod가 배포된 Node 확인
첫번째 Node에 부여한 Taint 삭제
Node에 부여된 Taint 확인
두번째 Node에 Taint 부여
Node에 부여된 Taint 확인
Pod 삭제
Deployment 생성
위에서 생성한 Deployment를 통해서 생성된 Pod가 배포된 Node 확인
Deployment 재생성
위에서 재생성한 Deployment를 통해서 생성된 Pod가 배포된 Node 확인
Node에 Taint가 부여되어 있고 PodSpec에 Toleration이 설정되어 있을 경우에 어떤 절차를 통해서 Pod가 Node에 스케쥴링 되는지 확인
두번째 Node에 부여한 Taint 삭제
Node에 부여된 Taint 확인
Deployment 생성
위에서 재생성한 Deployment를 통해서 생성된 Pod가 배포된 Node 확인
첫번째 Node에 Taint 부여
첫번째 Node에 Label 부여
Node에 부여된 Taint 확인
Taint가 부여된 Node에 배포되었던 Pod가 삭제되고 다른 Node에 새로운 Pod가 생겼는지 확인 - 리소스가 부족할 경우 Pending 상태가 될수도 있음
nodeSelector를 명시한 Pod 생성
Pod가 생성되는지 확인
Pod가 생성되지 않으면 그 이유를 확인
Pod에 toleration 명시 - 60초 동안만 toleration 유지
Pod가 생성되는지 확인
60초가 지난 후에도 Pod가 존재하는지 확인
노드에 부여한 Taint 삭제
생성된 Pod들이 Taint가 삭제된 Node로 옮겨가거나 Pending 상태의 Pod들이 Taint가 삭제된 Node에 생성되는지 확인
Deployment 삭제
Descheduler
Cluster Autoscaler 가 실행중인 경우에는 해당 실습이 정상적으로 수행되지 않을수도 있으니 아래의 명령어로 Cluster Autoscaler 정지
Deployment 생성
생성된 Pod 확인
첫번째 Node에 있는 Pod를 다른 Node로 강제 이동
재배포된 Pod 확인
Node에 부여된 Taint 확인 - 3번 명령어에서 명시된 Node에 node.kubernetes.io/unschedulable:NoSchedule Taint가 부여됨
Taint 제거
Node에 부여된 Taint 확인
Descheduler 실행
Descheduler Job 상태 확인
Descheduler Job 로그 확인
재배포된 Pod 확인
Descheduler Job 삭제
Deployment 삭제
Node에 부여된 Label 확인
하나의 노드에 키(Key)는 env 이고 값(Value)은 test 인 Label 부여
Label이 정상적으로 부여 됐는지 확인
Deployment 생성
생성된 Pod가 env=test Label을 부여한 노드에 배포 됐는지 확인
15번에서
env=test
Label을 부여한 노드에서 해당 Label 삭제Label이 정상적으로 삭제 되었는지 확인
기존에 생성된 Pod에 변경사항이 있는지 확인
다른 노드에 키(Key)는 env 이고 값(Value)은 test 인 Label 부여
Label이 정상적으로 부여 됐는지 확인
기존에 생성된 Pod에 변경사항이 있는지 확인
Descheduler 실행
Descheduler Job 상태 확인
Descheduler Job 로그 확인
Pod 상태 확인
리소스 삭제
Last updated