Scheduling

hahic·2023년 1월 8일
0

Kubernetes/CKA

목록 보기
3/13
post-thumbnail

MANUAL SCHEDULING

핵심 명령어

  • k get nodes
  • k get nodes -o wide
  • k describe node controlplane
  • k replace --force -f /tmp/kubectl-edit-3913397764.yaml
  • k get pods -o wide

Reference

https://kubernetes.io/ko/docs/concepts/scheduling-eviction/assign-pod-node/#nodename -> 특정 node 선택 - nodeName

LABELS AND SELECTORS

matchLabels과 container의 label과 일치해야 한다

  • wrong
apiVersion: apps/v1
kind: ReplicaSet
metadata:
   name: replicaset-1
spec:
   replicas: 2
   selector:
      matchLabels:
        tier: front-end
   template:
     metadata:
       labels:
        tier: nginx
     spec:
       containers:
       - name: nginx
         image: nginx
  • correct
apiVersion: apps/v1
kind: ReplicaSet
metadata:
   name: replicaset-1
spec:
   replicas: 2
   selector:
      matchLabels:
        tier: nginx
   template:
     metadata:
       labels:
        tier: nginx
     spec:
       containers:
       - name: nginx
         image: nginx

핵심 명령어

  • k get pods -l env=dev
  • k get pods --selector env=dev
  • k get pods -l env=dev --no-headers | wc -l
  • k get all
  • k get all -l env=prod --no-headers | wc -l
  • k get pods --selector env=prod,bu=finance,tier=frontend

TAINTS AND TOLERATIONS

핵심 명령어

  • k get nodes --no-headers | wc -l
  • k describe node node01
  • kubectl taint node node01 spray=mortein:NoSchedule
  • k get pods -o wide
  • k edit node controlplane
  • k replace --force -f /tmp/kubectl-edit-1144610070.yaml

Reference

https://kubernetes.io/ko/docs/concepts/scheduling-eviction/taint-and-toleration/ -> toleration 포함한 yaml 작성 방법

ex)

apiVersion: v1
kind: Pod
metadata:
  name: bee
spec:
  containers:
  - name: nginx
    image: nginx
  tolerations:
  - key: "spray"
    operator: "Equal"
    value: "mortein"
    effect: "NoSchedule"

NODE AFFINITY

Taint Effect

  • NoSchedule: Pod가 Taint를 허용하지 않는 경우, Pod가 Node에 스케줄링되지 않는다
  • PerferNoSchedule: NoSchedule의 소프트한 버전이다. 즉, Scheduler가 Pod를 Node에 스케줄링하지 않으려 하지만 다른 곳에 스케줄링할 수 없으면 해당 Node에 스케줄링된다
  • NoExecute: Scheduler에만 영향을 주는 NoScheduler이나 PerferNoSchedule과 달리, NoExecute는 Node에서 이미 실행 중인 Pod에도 영향을 준다. NoExecute를 Node에 추가하면 해당 노드에서 이미 실행 중이지만 NoExecute을 허용하지 않는 Pod는 해당 Node에서 제거된다

Taint Operator

  • Equal (default)
  • Exists

Affinity Rule

  • requireDuringScheduling...: 이 필드 아래에 정의된 규칙은 Pod가 Node로 스케줄링되고자 가져야하는 Label을 지정한다
  • preferredDuringScheduling...
  • ...IgnoredDuringExecutioin: 이 필드 아래에 정의된 규칙은 노드에서 이미 실행 중인 파드에는 영향을 미치지 않는다
  • ...RequiredDuringExecution: Node에서 label을 제거하면, 해당 Label을 가지고 Node에서 실행되던 Node가 해당 Node에서 제거된다

Affinity Operator

  • In
  • NotIn
  • Exists
  • DoesNotExist
  • GtLt

핵심 명령어

  • k get nodes --show-labels
  • k label node node01 color=blue

Reference

https://kubernetes.io/ko/docs/tasks/configure-pod-container/assign-pods-nodes-using-node-affinity/ -> affinity 포함한 yaml 작성 방법
https://kubernetes.io/ko/docs/concepts/scheduling-eviction/assign-pod-node/#%EB%85%B8%EB%93%9C-%EC%96%B4%ED%94%BC%EB%8B%88%ED%8B%B0 -> affinity operator 리스트

RESOURCE LIMITS

Resource Limit으로 발생한 오류 확인하는 부분

DAEMONSETS

핵심 명령어

  • k get ds --all-namespaces
  • k get ds -A
  • k get ds -A --no-headers | wc -l
  • k describe ds -n=kube-flannel kube-flannel-ds

Reference

https://kubernetes.io/ko/docs/concepts/workloads/controllers/daemonset/ -> Daemon Set 생성 yaml

STATIC PODS

Pod의 Name에 Node의 Name이 포함되어 있는 경우, 해당 Pod는 Static Pod이다

Static Pod의 definition files은 (default)/etc/kubernetes/manifests/에 저장되어 있다

(default)/etc/kubernetes/manifests/ 위치에 manifeset file을 작성하기만 하면 Static Pod 생성

manifest file path는 /var/lib/kubelet/config.yaml file에서 확인 가능하다

핵심 명령어

  • cd /etc/kubernetes/manifests/
  • ssh node01
  • cat /var/lib/kubelet/config.yaml
  • rm greenbox.yaml
  • exit

Reference

https://kubernetes.io/ko/docs/tasks/configure-pod-container/static-pod/ -> static pod 생성 방법

MULTIPLE SCHEDULERS

스케줄링할 Scheduler을 선택할 수 있다

핵심 명령어

  • k get configmaps
  • k get serviceaccounts
  • k get sa -A

Reference

https://kubernetes.io/ko/docs/concepts/configuration/configmap/ -> configmap
https://kubernetes.io/ko/docs/tasks/extend-kubernetes/configure-multiple-schedulers/ -> 다중 스케줄러에 대한 Document

profile
👩‍💻 Junior Backend Developer

0개의 댓글