SSH Pipelining と接続の再利用
タスクごとのオーバーヘッドを削減します。
「SSH Pipelining と接続の再利用」はCoddyKit上の無料Ansible Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAnsible Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ansible Academyコースには全4レッスンが含まれています。
SSHのオーバーヘッドは積み重なる
各タスクでは、SSHによる新しいログイン、ファイルのコピー、実行が発生することがあります。タスクとホストの数が増えると、このオーバーヘッドが実行時間の大部分を占めます。
タスクが通常実行される仕組み
デフォルトでは、Ansibleはモジュールをホストにコピーして実行し、その後で削除します。各ステップでSSHの往復が発生しますが、多くの場合これは省略できます。
Pipeliningで解決する
pipeliningを使うと、Ansibleは一時ファイルを先に書き込む代わりに、既存のSSHセッション経由でモジュールをストリーミングします。これにより、タスクごとの接続回数を減らせます。
[ssh_connection]
pipelining = Truerequirettyの落とし穴
PipeliningにはTTYなしでsudoを実行できることが必要です。そのため、リモートのsudoersでrequirettyを強制してはいけません。最近のディストリビューションでは問題ありませんが、セキュリティを強化した一部の環境では調整が必要です。
接続を再利用する
OpenSSHのControlPersistはマスター接続を開いたままにし、後続のタスクをそこ経由で処理します。これにより、タスクごとに新しいハンドシェイクを行わずに済みます。
ssh_argsを調整する
Ansibleはssh_argsを通じて接続の再利用を有効にします。ControlPersistの値は、最後のタスクの後も共有ソケットを維持する時間を設定します。
[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=60sソケットの場所
共有接続はcontrol pathのソケットファイルに保存されます。ソケット名の長さに関するオペレーティングシステムの制限を避けるため、このパスは短くしてください。
[ssh_connection]
control_path = %(directory)s/%%h-%%p-%%rPipeliningと再利用の違い
両者は異なるコストを削減します。pipeliningは1つのタスク内の往復通信を減らし、ControlPersistは複数のタスク間でSSHセッションを再利用します。
両方を組み合わせる
Pipeliningと永続的な接続は相乗効果を発揮します。両方を有効にすると、大規模なplaybookに対して、リスクが低く効果の大きい高速化を実現できます。
Factsの収集も高速化する
Factsが不要な場合は、gather_facts: falseを設定してsetupモジュールを省略します。これにより、各playの開始時に発生するコストの高い処理を取り除けます。
効果を測定する
profile_tasksコールバックを有効にすると、各タスクの実行時間を計測できます。どこで何秒かかっているかが正確に分かるため、調整の効果を確認できます。
クイックチェック
SSH経由で実行する前に、各タスクが一時ファイルを書き込まないようにしたいとします。
まとめ
pipeliningを有効にして往復通信を減らし、ControlPersistでSSHセッションを再利用します。両方を組み合わせると、大規模なplayで接続のオーバーヘッドを大幅に削減できます。⚡
よくある質問
「SSH Pipelining と接続の再利用」レッスンは無料ですか?
はい。「SSH Pipelining と接続の再利用」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ansible Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ansible Academyコースには全4レッスンが含まれています。
「SSH Pipelining と接続の再利用」で何を学びますか?
タスクごとのオーバーヘッドを削減します。 ブラウザで直接実行するハンズオンコードでAnsible Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Ansible Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAnsible Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「SSH Pipelining と接続の再利用」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAnsible Academyレッスンでコードを書いて実行できますか?
はい。すべてのAnsible Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- forks と並列実行のチューニング
- Strategy:linear、free、host_pinned
- SSH Pipelining と接続の再利用
- serial とローリングバッチ実行