본문 바로가기
공부/Kubernetes

[k8s/EKS] Fargate와 Daemonset

by haejang 2024. 2. 9.
728x90
728x90

 

 

# Fargate를 쓰는 이유

  • karpenter pod를 띄우기 위해서.
  • (karpenter pod는 karpenter가 띄운 노드에 뜰 수 없다.)
  • 별도 ec2 node group을 만들수도 있지만, 우리의 궁국적인 목적은 ec2 node group을 없애고 스팟으로만 운영하는 것이기 때문에 karpenter용 fargate를 띄움
  • 참고로 pod 하나당 fargate 하나가 뜸

 

# Daemonset

  • 노드의 백그라운드에서 항상 실행되며 여러 작업을 수행
  • → 노드별로 파드가 하나씩 떠야 함.
  • 이 때, fargate도 결국 노드의 한 종류인데 fargate에도 떠야하느냐? → 아니다. fargate는 hsot가 없기 때문에 데몬셋이 지원되지 않는다.
  • 따라서 데몬셋들은 fargate가 아닌, ec2 노드들에만 떠야 함.
  • https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/fargate.html#fargate-considerations

 

# 문제는?

  • 데몬셋들은 ec2 node에만 떠야 함 → 이게 자동으로 인식되는 줄 알았다.
  • 그러나 알고보니 nodeAffinity 설정을 통해 데몬셋 파드들이 fargate에는 뜨지 않도록 설정했어야 했다.
  • nodeAffinity 설정이 되어있지 않던 데몬셋들 : prometheus-node-exporter / loki-promtail / datadog-agent
  • -> 자꾸 pending상태의 daemonset pod들이 날아다녔다(?)

 

# 해결 (helm chart)

prometheus-node-exporter (in kube-prometheus-stack helm)

prometheus-node-exporter:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
          - matchExpressions:
            - key: eks.amazonaws.com/compute-type
              operator: NotIn
              values:
                - fargate

loki-promtail (in loki-stack helm)

promtail:
  enabled: true
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: eks.amazonaws.com/compute-type
            operator: NotIn
            values:
            - fargate

datadog-agent (in datadog helm)

agents:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: eks.amazonaws.com/compute-type
            operator: NotIn
            values:
            - fargate

 

 

 

 

728x90
728x90

댓글