docker swarm update コマンドを使ってスワーム設定を変更する方法

DockerBeginner
オンラインで実践に進む

はじめに

この実験では、Docker Swarm の設定を管理および変更する方法を学びます。まず、自分のマシン上で Docker Swarm を初期化し、それをスワームマネージャーにします。

初期化の後、docker swarm inspect コマンドを使用してスワームの現在の構成を表示する方法を調べます。これにより、デフォルト設定を確認できます。次に、この実験では、docker swarm update コマンドを使用して、重要なスワームパラメータ、具体的にはノード証明書の有効期限とタスク履歴の保持制限を更新する手順を案内します。最後に、再度スワーム設定を調べることで、変更が正常に適用されたことを確認します。

Docker Swarm を初期化する

このステップでは、Docker Swarm を初期化する方法を学びます。Docker Swarm は、クラスタに結合された Docker を実行するマシンのグループです。スワームに参加した後は、慣れている Docker コマンドを引き続き実行でき、スワームがそれらをクラスタ上で分散させます。

スワームを初期化するには、docker swarm init コマンドを使用します。このコマンドにより、現在のマシンがスワームマネージャーになります。

ターミナルを開き、次のコマンドを実行して Docker Swarm を初期化します。

docker swarm init

次のような出力が表示され、スワームが初期化され、他のノードをこのスワームに参加させるためのコマンドが提供されていることを示します。

Swarm initialized: current node (xxxxxxxxxxxx) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 192.168.99.100:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

このコマンドにより、現在のマシンがスワームマネージャーになります。実際のシナリオでは、高可用性のために通常複数のマネージャーが必要ですが、この実験では 1 つのマネージャーで十分です。

現在のスワーム設定を表示する

このステップでは、Docker Swarm の現在の設定を表示する方法を学びます。これは、現在の構成を理解し、設定を更新した後の変更を検証するのに役立ちます。

スワーム設定を表示するには、docker swarm inspect コマンドを使用します。このコマンドは、スワームの ID、作成日、およびさまざまな構成設定を含む、スワームに関する詳細情報を提供します。

ターミナルを開き、次のコマンドを実行して Docker Swarm を調査します。

docker swarm inspect

出力は、スワーム構成を含む JSON オブジェクトになります。設定可能な設定が含まれる Spec セクションを探します。タスク履歴とノード証明書に関連する設定が含まれる Orchestration および Dispatcher フィールドに注意してください。

たとえば、次のような出力が表示される場合があります(正確な値は異なります)。

[
  {
    "ID": "xxxxxxxxxxxx",
    "Version": {
      "Index": 10
    },
    "CreatedAt": "2023-10-27T10:00:00.000000000Z",
    "UpdatedAt": "2023-10-27T10:00:00.000000000Z",
    "Spec": {
      "Orchestration": {
        "TaskHistoryRetentionLimit": 5
      },
      "Raft": {
        "SnapshotInterval": 10000,
        "KeepOldSnapshots": 0,
        "LogEntriesForSlowFollowers": 500,
        "ElectionTick": 3,
        "HeartbeatTick": 1
      },
      "Dispatcher": {
        "HeartbeatPeriod": 5000000000
      },
      "CAConfig": {
        "NodeCertExpiry": 7776000000000000,
        "ExternalCAs": null,
        "SigningCACert": "...",
        "SigningCAKey": "...",
        "ForceRotate": 0
      },
      "TaskDefaults": {
        "LogDriver": null
      }
    },
    "TLSInfo": {
      "TrustRoot": "...",
      "CertIssuerSubject": "CN=swarm-ca",
      "CertIssuerPublicKey": "..."
    },
    "RootRotationInProgress": false
  }
]

Spec セクションでは、Orchestration の下に TaskHistoryRetentionLimit と、CAConfig の下に NodeCertExpiry を見つけることができます。これらは、次のステップで変更する設定です。

ノード証明書の有効期限を更新する

このステップでは、Docker Swarm のノード証明書の有効期限を更新する方法を学びます。ノード証明書は、スワームノード間の安全な通信に使用されます。デフォルトでは、これらの証明書は 3 か月後に期限切れになります。セキュリティポリシーや運用ニーズに基づいて、この期間を調整することができます。

ノード証明書の有効期限を更新するには、--cert-expiry フラグを使用して docker swarm update コマンドを実行します。--cert-expiry の値は期間を表す文字列で、たとえば 24 時間なら 24h、30 日(720 時間)なら 720h、有効期限を無効にする場合は 0(本番環境では推奨されません)です。

ノード証明書の有効期限を 30 日(720 時間)に更新しましょう。ターミナルを開き、次のコマンドを実行します。

docker swarm update --cert-expiry 720h

更新が確認される出力が表示されるはずです。

Swarm updated.

このコマンドは、スワーム構成を更新して新しい証明書の有効期限を設定します。この更新後に発行される新しいノード証明書は、新しい有効期限を持ちます。既存の証明書は、証明書のローテーションを強制しない限り、元の発行日と以前の有効期限設定に基づいて期限切れになります。

タスク履歴の保持上限を更新する

このステップでは、Docker Swarm のタスク履歴の保持上限を更新する方法を学びます。タスク履歴の保持上限は、スワームの履歴に保存される完了または失敗したタスクの数を決定します。タスクの履歴を保持することは、デバッグや監視に役立ちますが、保持するタスクが多すぎると過剰なリソースを消費する可能性があります。

タスク履歴の保持上限を更新するには、--task-history-limit フラグを使用して docker swarm update コマンドを実行します。--task-history-limit の値は、保持するタスクの数を表す整数です。

タスク履歴の保持上限を 10 に更新しましょう。ターミナルを開き、次のコマンドを実行します。

docker swarm update --task-history-limit 10

更新が確認される出力が表示されるはずです。

Swarm updated.

このコマンドは、スワーム構成を更新して、最後の 10 個の完了または失敗したタスクの履歴を保持するように設定します。

更新された Swarm 設定を確認する

この最後のステップでは、前のステップで更新したスワーム設定が正常に適用されたことを確認します。再度 docker swarm inspect コマンドを使用し、NodeCertExpiry と TaskHistoryRetentionLimit の値を確認します。

ターミナルを開き、次のコマンドを実行して Docker Swarm を調査します。

docker swarm inspect

出力された JSON を調べます。Spec セクションを探し、CAConfig の下の NodeCertExpiry と Orchestration の下の TaskHistoryRetentionLimit の値を確認します。

NodeCertExpiry が現在 2592000000000000(ナノ秒で 30 日を表す)に設定され、TaskHistoryRetentionLimit が 10 に設定されていることが確認できるはずです。

たとえば、出力の関連部分は次のようになります。

[
    {
        ...
        "Spec": {
            "Orchestration": {
                "TaskHistoryRetentionLimit": 10
            },
            ...
            "CAConfig": {
                "NodeCertExpiry": 2592000000000000,
                ...
            },
            ...
        },
        ...
    }
]

スワーム構成を調査することで、更新が成功したことを確認できます。

まとめ

この実験では、docker swarm init コマンドを使用して Docker Swarm を初期化し、現在のマシンをスワームマネージャにする方法を学びました。次に、docker swarm inspect コマンドを使用して現在のスワーム設定を表示する方法を調べました。このコマンドは、スワーム構成の詳細な JSON 出力を提供し、設定可能な設定が含まれる Spec セクションも含まれます。

初期化と調査の後、特定のスワーム設定を更新する練習を行いました。docker swarm update コマンドを使用して、ノード証明書の有効期限とタスク履歴の保持上限を変更する方法を学びました。最後に、再度 docker swarm inspect コマンドを使用し、出力の更新された構成を調べることで、これらの変更が正常に適用されたことを確認しました。