[k8s] Node Selectors, Node Affinity, Taints/Tolerations vs Node Affinity, DaemonSets, Static Pods

Jisun-Rea·2022년 2월 1일
0
post-thumbnail

Node Selectors

Pod가 특정 Node에만 schedule될 수 있게 하는 것
** 그러나 multi label이라던지 복잡한 selector은 불가능

pod-definition.yml

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
spec:
  containers:
  - name: data-processor
    image: data-processor
  nodeSelector:
    size: Large
kubectl label nodes <node-name> <label-key>=<label-value>

Node Affinity

ensure pods are hosted on particular node

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: size
            operator: In
            values:
            - large            
  containers:
  - name: nginx
    image: nginx
  • 만약 large node 뿐만 아니라 small node에도 배포될 수 있게 하려면, values 밑에 small 을 추가하기만 하면 된다.

Node Affinity Types

Available

  • requiredDuringSchedulingIgnoredDuringExecution
    - if matching node does not exist, the pod will not be scheduled
    - preferredDuringSchedulingIgnoredDuringExecution
    ** 위와 같은 상황에서, affinity rule을 무시하고 아무 available node에 schedule함
    - 둘다 이미 pod가 node에서 실행되고 있는 와중에 node label이 변한다거나 해도 그대로 현 node에서 schedule된다.

Planned

  • requiredDuringSchedulingRequiredDuringExecution

Taints/Tolerations vs Node Affinity

Taints/Tolerations는 node에 특정 pod만 배포될 수 있도록 할 수 있고,
Node Affinity로 pod가 특정 node에만 배포될 수 있도록 할 수 있다.

즉, 두개 모두 사용시 특정 pod가 특정 node에만 배포되고 다른 pod는 해당 node에 배포되지 못하게 할 수 있다.

DaemonSets

ReplicaSet과 비슷하지만 pod가 각 node에 하나씩 스케줄링되도록 한다.
항상 모든 node에 pod가 배포되는 것을 보장한다.
만약 node가 삭제되면, 해당 노드에 배포된 pod도 삭제된다.

  • UseCase
    - Monitoring Solution
    - Logs Viewer
    - kube-proxy
    - networking

Static Pods

kubernetes control plane에 독립적으로, kubelet을 통해서만 관리되는 pod

만약 pod에 문제가 생기면 kubelet이 자동으로 restart시킴

master node에 control plane component(api server, controller, etc.) 를 pod로 구성시키는데 사용됨

profile
호기심 많고 걱정도 많은 사람👻 @DevOps @Cloud

0개의 댓글