[クラウドネイティブ] KubernetesコントローラーでのDaemonSetとJobの使用

 

 

目次

デーモンセット

1 DaemonSet とは

2 DaemonSet の使用

仕事

1 仕事とは何か

2 ジョブを使用する

3 自動的にクリーンアップされるジョブ

コントローラーでは問題を解決できません


デーモンセット

1 DaemonSet とは

デーモンセット | Kubernetes

DaemonSet は、すべて (または一部) のノードが Pod のコピーを実行することを保証します。ノードがクラスターに参加すると、それらのノードにポッドが追加されます。これらのポッドは、ノードがクラスターから削除されたときにもリサイクルされます。DaemonSet を削除すると、DaemonSet が作成したすべての Pod が削除されます。

DaemonSet の一般的な使用例は次のとおりです。

  • 各ノードでクラスターデーモンを実行する

  • 各ノードでログ収集デーモンを実行する

  • 各ノードで監視デーモンを実行する

簡単な使用法は、デーモンの種類ごとにすべてのノードで DaemonSet を開始することです。もう少し複雑な使用法は、同じ種類のデーモンに対して複数の DaemonSet をデプロイすることであり、それぞれが異なるフラグ、異なるメモリ、異なるハードウェア タイプの CPU 要件を持ちます。

2 DaemonSet の使用

apiVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    app: nginx
  name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:1.19
        imagePullPolicy: IfNotPresent
        name: nginx
        resources: {}
      restartPolicy: Always

仕事

1 仕事とは何か

仕事 | Kubernetes

ジョブは 1 つ以上の Pod を作成し、指定された数の Pod が正常に終了するまで Pod の実行を再試行し続けます。ポッドが正常に完了すると、ジョブは正常に完了したポッドの数を追跡します。数値が指定された成功しきい値に達すると、タスク (つまり、ジョブ) が終了します。ジョブを削除すると、作成されたすべてのポッドがクリアされます。ジョブを一時停止する操作では、ジョブが再び再開されるまで、ジョブのアクティブなポッドがすべて削除されます。

単純な使用例では、信頼性の高い方法でポッドを完了まで実行するジョブ オブジェクトを作成します。最初の Pod が失敗するか削除されると (ノードのハードウェア障害や再起動などにより) Job オブジェクトは新しい Pod を開始します。

ジョブを使用して複数の Pod を並行して実行することもできます。

2 ジョブを使用する

apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl:5.34.0
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  # 当前任务出现失败 最大的重试次数
  backoffLimit: 4

3 自動的にクリーンアップされるジョブ

完了したジョブは通常、システム内に保持する必要はありません。これらをシステム内に常に保持すると、API サーバーに余分な負荷がかかります。ジョブがCronJobなどの上位レベルのコントローラーによって管理されている場合、ジョブは特定の容量ベースのクリーンアップ戦略に基づいて CronJob によってクリーンアップできます。

  • 完了したジョブの TTL メカニズム

    • Complete完了したジョブ (ステータスまたは)を自動的にクリーンアップするもう 1 つの方法Failedは、TTL コントローラが提供する TTL メカニズムを使用することです。Job.spec.ttlSecondsAfterFinishedフィールドを設定すると、コントローラーは完了したリソースをクリーンアップできます。TTL コントローラがジョブをクリーンアップすると、ジョブ オブジェクトがカスケードで削除されます。つまり、ポッドやジョブ自体を含むすべての依存オブジェクトが削除されます。ジョブが削除されるとき、システムはファイナライザーなどのライフサイクル保証を考慮することに注意してください。

apiVersion: batch/v1
kind: Job
metadata:
  name: pi-with-ttl
spec:
  ttlSecondsAfterFinished: 100
  template:
    spec:
      containers:
      - name: pi
        image: perl:5.34.0
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never

ジョブはpi-with-ttl終了後 100 秒後に自動的に削除できます。このフィールドが に設定されている場合0、ジョブは終了直後に自動的に削除可能になります。このフィールドが設定されていない場合、ジョブは完了後に TTL コントローラによって自動的にクリアされません。

コントローラーでは問題を解決できません

  • ポッドにネットワーク サービスを提供する方法

  • 複数のポッド間で負荷分散を実現する方法

おすすめ

転載: blog.csdn.net/weixin_53678904/article/details/132233724