YongsHub / -Kubernetes-Study

스터디 레포지토리
1 stars 1 forks source link

Udemy Chapter2 - 범위: 섹션3 2024/02/22 #8

Closed YongsHub closed 3 hours ago

YongsHub commented 5 months ago
YongsHub commented 5 months ago

스케줄러 동작 과정

  1. 스케줄러는 모든 Pod을 보면서 nodeName 필드가 설정되어 있지 않은 Pod을 탐색
  2. 스케줄링 알고리즘을 실행하여 Pod에 적합한 Node를 식별
  3. 식별된 Node의 이름으로 nodeName 필드에 추가

스케줄러가 없다면?

YongsHub commented 5 months ago

label and selector

쿠버네티스 클러스터에서 수많은 리소스가 있다면, 구분하기 위한 방법이 필요 즉, 어떤 리소스를 선택해서 명령을 실행하고자 할 때 Label과 Selector를 사용할 수 있음

Label

Selector

YongsHub commented 5 months ago

Taints and Tolerations

Taint의 사전적인 내용을 보면 "오염"으로 풀이, 즉 Node가 오염되었기 때문에 Pod의 Schedule을 제한함 보통 Taint는 특정 Node에 대해 특정 Pod만 실행할 수 있도록 역할을 제한하기 위한 목적으로 많이 사용

Taint와 Toleration도 결국 Scheduling과 연관성을 가지고 있다

Taint는 node에 설정하고 Toleration은 Pod에 설정한다

Node에게 Pod를 받느냐 받지 않느냐에 대해 얘기하는 것이다

Master Node에 어느 Pod도 스케쥴되지 않는 것을 생각해본다면 Taint와 Tolerations를 떠올릴 수 있다

taint 방법

kubectl taint nodes node1 key1=value1:NoSchedule

untaint 방법

kubectl taint nodes node1 key1=value1:NoSchedule-

options NoSchedule: Pod를 해당 Node에 Schedule할 수 없다. 단 기존 실행되던 Pod에는 적용X PreferNoSchedule: Pod를 해당 Node에 Schedule할 수 없다. 다만 Toleration이 필수값이 아님 -> Cluster 내의 자원이 부족하거나 특정 상황에 따라서는 Taint에 설정된 Node에 Pod가 배포될 수 있음 NoExecute: Pod에 대해 Toleration 설정이 없으면 Schedule되지 않고 기존에 실행되던 Pod도 Delete된다

References

https://dobby-isfree.tistory.com/163

YongsHub commented 5 months ago

requiredDuringSchedulingIgnoredDuringExecution vs preferredDuringSchedulingIgnoredDuringExecution 차이

YongsHub commented 5 months ago

Node Selectors & Node Affinity

결과적으로 Taint는 특정 node에 특정 values값을 가지는 pod만 배포하겠다는 의미이지. 해당 pod가 항상 특정 node에 배포되는 것을 보장하지는 못함

이런 문제점을 해결하기 위한 것이 NodeAffinity

NodeAffinity는 특정 pod를 특정 node에만 배포하는것을 보장함

Running중인 Deployment 수정은 kubectl edit을 활용할 수 있음

Edit Deployments With Deployments you can easily edit any field/property of the POD template. Since the pod template is a child of the deployment specification, with every change the deployment will automatically delete and create a new pod with the new changes. So if you are asked to edit a property of a POD part of a deployment you may do that simply by running the command

Deployments의 경우, 자동으로 삭제하고 새로운 변화에 대한 새로운 파드를 생성해준다

Resource Requirements and Limits

request -> 요청이라고 하는 것은 호스트에게 나에게 요청량만큼 확보해달라고 하는 것 limit -> 예를 들어, pod는 memory 1G를 요청했고 2G로 limit를 걸었을 때 최소한 memory 3G 중에서 1G는 확보해서 무조건 할당해주고 최대 2G까지 늘려서 쓸 수 있다는 것

DaemonSet

EX) 모니터링 시스템 구축을 위해 모든 노드에 특정 파드를 관리해야 할 때 사용

Static Pods

cluster가 아니라 독립적인 Node만 존재하더라도 kubelet으로 Pod를 생성할 수 있음 kube-api에 의해 생성되는 pod도 아니고 directory에 yaml파일을 생성하여 pod를 생성할 수 있음

따라서 -> 이렇게 해야만 Pod를 생성할 수 있고 이것을 Static Pods라고 부름

특징

--pod-manifest-path=로 경로를 지정할 수 있음 또는 config로 따로 설정할 수 있음

Scheduler

scheduler는 pod의 조건을 충족하는 node에 호스팅시켜주는 역할 https://velog.io/@iwin1203/k8s-scheduling-2

himJJong commented 5 months ago

label and selector

쿠버네티스 클러스터에서 수많은 리소스가 있다면, 구분하기 위한 방법이 필요 즉, 어떤 리소스를 선택해서 명령을 실행하고자 할 때 Label과 Selector를 사용할 수 있음

Label

  • kubernetes Resource를 식별하기 위한 key-value 쌍의 메타정보
  • 리소스의 하위 집합을 선택하고, 구성하는데 사용할 수 있음
  • key는 고유한 값이어야 한다

Selector

  • Label을 이용해 쿠버네티스 리소스를 필터링하고 원하는 리소스 집합을 구할 수 있음
  • =, ==, != 3가지 연산자만 허용

label, selector, NodeSelector에 대해 기준이 애매모호하여 질문드립니다! 결국 label은 여러 객체들을 구분하기 위한 속성, 그리고 이 구분한 집단을 선택할 때 selector을 사용할 수 있습니다. NodeSelector는 Node에 요구된 리소스 자원량이나 처리해야 할 작업이 달라야 할 수 있는 경우에 해당 Node에 놓여져야 할 Pod를 선택할 때 NodeSelector를 사용하면 간단하고 편하다. 라고 이해했는데 이와 같이 이해했는지 궁금합니다!

himJJong commented 5 months ago

위에서 정리를 다해주셔서 딱히 언급할 것은 없네요! ㅎㅎ 이번 섹션은 어떠셨나요? 저는 지금까지 했던 테스트중에서는 조금 헤깔렸던 것 같아요!!

YongsHub commented 5 months ago

위에서 정리를 다해주셔서 딱히 언급할 것은 없네요! ㅎㅎ 이번 섹션은 어떠셨나요? 저는 지금까지 했던 테스트중에서는 조금 헤깔렸던 것 같아요!!

헷갈려서 Solution영상들이 도움이 많이 됐습니다!!!