以下の内容はhttps://tech.guitarrapc.com/entry/2023/04/04/012615より取得しました。


EKS Fargate に DaemonSet を配置しない Node Affinity

Kubernetes小ネタです。

EKS Fargateは便利なのですが、Fargate = PodなのでDaemonSetは配置できません。ということで、「DaemonSetをFargateには配置しない」をNode Affinityで実現しましょう。

Node affinity を用いた Fargate にスケジュールしない指定

単純なNodeGroupベースの配置ならnodeSelectorでいいのですが、FargateかどうかとなるとNode affinityのほうが柔軟に管理しやすいのでこれを用ています。

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: foo-daemonset
spec:
  selector:
    matchLabels:
      k8s-app: foo-daemonset
  template:
    metadata:
      labels:
        k8s-app: foo-daemonset
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: eks.amazonaws.com/compute-type
                    operator: NotIn
                    values:
                      - fargate
      containers:
        - name: foo
          image: foo

設定に関してはAssigning Pods to Nodesを参照するのが王道です。大体ここに書いてあります。

Node affinityには2つの指定方法があります。 IgnoredDuringExecutionはNodeのラベルがスケジュール後に代わってもPodをそこで動作させ続ける意味です。

  • requiredDuringSchedulingIgnoredDuringExecution: 指定した条件のNodeに配置できないならスケジュールはしない。nodeSelectorと同じような使い方
  • preferredDuringSchedulingIgnoredDuringExecution: 指定した条件のNode配置できるなら配置したいけどだめなら他のNodeにスケジュールして良し

幸いEKS FargateはSelectorにeks.amazonaws.com/compute-type: fargateを持っているのでこれで指定できますね。

どんな時に使う?

DaemonSetなので、管理用に入れているエージェント系Podが多いことでしょう。私の場合、Datadog AgentやNodeLocal DNSCache、FluentBitで利用すること多いです。

HelmでnodeAffinityを想定されていることが多くなったので、ここ一年ぐらいで楽になってきましたね。




以上の内容はhttps://tech.guitarrapc.com/entry/2023/04/04/012615より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14