Load Balancer 配下でのローリングデプロイ
serial でダウンタイムなくリリースします。
「Load Balancer 配下でのローリングデプロイ」はCoddyKit上の無料Ansible Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAnsible Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ansible Academyコースには全4レッスンが含まれています。
ダウンタイムゼロが目標です
1つのリクエストも失敗させずに、すべてのWebノードを更新します。コツはローリングデプロイです。数台ずつ変更していきます。🔄
serial でバッチを制御する
プレイに serial を追加すると、Ansibleはすべてのホストを一度に処理せず、小さな波に分けて順番に処理します。
- hosts: web
serial: 1
tasks:
- import_role:
name: webapp割合も使用できます
serial には割合やサイズのリストを指定できます。まずカナリアを実行し、その後より大きなバッチへ段階的に増やせます。
serial:
- 1
- 25%
- 50%触れる前にドレインする
ノードを更新する前に、ローテーションから外します。delegate_to を使ってロードバランサーに指示し、そのノードへのトラフィックを停止させます。
- name: Drain node
community.general.haproxy:
state: disabled
host: "{{ inventory_hostname }}"
delegate_to: lb1LBに delegate_to する理由
Webホスト自身がロードバランサー上で自分を無効にすることはできません。無効にするのはロードバランサーです。delegate_to により、各Webホストについて lb1 上でそのタスクを実行します。
新しいバージョンをデプロイする
ノードをドレインしたら、コードをデプロイし、設定を生成して、handler にそのホストだけのアプリサービスを再読み込みさせます。
- name: Pull release
ansible.builtin.git:
repo: "{{ app_repo }}"
version: "{{ app_version }}"
dest: /srv/app
notify: Reload app再有効化する前にヘルスチェックする
uri を使ってノードが正常であることを確認してから、ユーザーを戻します。壊れたホストをプールに再追加してはいけません。
- name: Wait for health
ansible.builtin.uri:
url: http://localhost:8080/health
status_code: 200
retries: 5
delay: 3ロードバランサーで再有効化する
正常であることを確認したら、再び delegate_to でロードバランサーを介してノードをローテーションに戻します。新しいバージョンにトラフィックが流れます。
- name: Enable node
community.general.haproxy:
state: enabled
host: "{{ inventory_hostname }}"
delegate_to: lb1max_fail_percentage で保護する
max_fail_percentage を設定すると、失敗するホストが多すぎる場合にロールアウトを停止できます。問題のあるリリースがさらに広がるのを防ぎます。
- hosts: web
serial: 1
max_fail_percentage: 20共有ステップには run_once を使う
1回限りのDBマイグレーションなど、一度だけ実行すべきステップがあります。run_once を使い、1台のホストだけが実行するようにします。
- name: Migrate db
ansible.builtin.command: /srv/app/migrate
run_once: true一連の流れ
ホストごとに、ドレイン、デプロイ、ヘルスチェック、再有効化を行います。serial はこのループを安全な波に分けて繰り返し、すべてのホストを更新します。✅
確認問題
LBのステップを機能させるキーワードを1つ確認しましょう。
まとめ
serial によるバッチ処理、delegate_to によるドレインと再有効化、ヘルスチェック、失敗時の停止処理を備えたローリングデプロイを構築しました。ダウンタイムはゼロです。🟢
よくある質問
「Load Balancer 配下でのローリングデプロイ」レッスンは無料ですか?
はい。「Load Balancer 配下でのローリングデプロイ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ansible Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ansible Academyコースには全4レッスンが含まれています。
「Load Balancer 配下でのローリングデプロイ」で何を学びますか?
serial でダウンタイムなくリリースします。 ブラウザで直接実行するハンズオンコードでAnsible Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Ansible Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAnsible Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「Load Balancer 配下でのローリングデプロイ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAnsible Academyレッスンでコードを書いて実行できますか?
はい。すべてのAnsible Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- プロジェクトを設計する:Role と Inventory
- ホストのプロビジョニング・堅牢化・初期設定
- Load Balancer 配下でのローリングデプロイ
- Smoke Test、ロールバック、通知