【PipeCD】Piped管理の効率化: launcherの仕組みと使い分け
PipeCDのPipedのバイナリ/イメージは、piped
とlauncher
の2種類あります。
本記事では、launcher
の仕組みを解説した上で、それぞれのバージョン・設定ファイルの管理方法を比較します。
先にまとめ
- 「Pipedのバージョン・設定をGitで管理したい」 →
piped
がおすすめ - 「PipedのバージョンをUIで簡単に更新したい」→
launcher
がおすすめ
pipedとは
piped
バイナリ/イメージはPipedエージェントの本体であり、デプロイなどの処理を担います。
pipedの構成図
後述のlauncher
は必須ではなく、基本的に必要な機能はpiped
だけで揃っています。
launcherとは
launcherは、Pipedの管理を楽にするための補助的な仕組みです。
launcherはデプロイ関連の処理を担わず、Piped自体のライフサイクルを管理します。
launcherの構成図
launcherのメリット
launcherを利用することで、主に2点のメリットがあります。
-
メリット1. PipedのバージョンをUIから手軽に更新できる (Remote Upgrade機能)
UIからPipedのバージョンを更新すると、launcherが新しいPipedを起動する -
メリット2. Pipedの設定ファイルが更新された際に、自動でPipedを新規起動できる
launcherの仕組み
launcherは、以下の3処理を繰り返し実行します。
- Pipedの設定読込
- Pipedの更新判定
- 新しいPipedの起動 or 稼働中のPiped継続
インターバルはデフォルトで1分間です。
1. Pipedの設定読込
読込元としては、現在以下の6種類がサポートされています。
- 実行時引数(base64 encoded)
- ファイル渡し(ローカルファイル)
- Gitリポジトリ
- Google Cloud Secret Manager
- AWS Secrets Manger
- AWS SSM Parameter Store
2〜6に関しては、設定ファイルの内容に変更があった場合、launcher
は自動で新しいPipedを起動します。
3〜6はホスト外にありますが、launcher
初回起動時だけでなくインターバル経過ごとに再度取得しています。
なお、piped
では「3. Gitリポジトリ」以外の5つがサポートされています。
2. Piped更新判定
「新しいPipedを起動するか?」の判定は、以下2点のOR条件で行われます。
- UIで指定されたバージョンと、実行中の
piped
のバージョンが異なる - "1. Pipedの設定読込"で取得した設定が、実行中の
piped
の設定と異なる
3. 新しいPipedの起動
新しいバージョンのpiped
バイナリをダウンロードし、新しい設定値を利用してPipedを起動します。
古いPipedは、launcher
からSIGTERMを送信してgraceful shutdownさせます。
launcherのコード
launcherのコードは1ファイルにまとまっています。上記フローを頭に入れれば、比較的簡単に理解できると思います。
launcher利用時の注意点
- UIからPipedのバージョンを更新しても、
launcher
自体のバージョンは変わりません - launcherに新機能が追加されたときは、
launcher
をアップデートしないとその機能を使えません - Pipedのトラブルシューティングをする際は、基本的に
launcher
ではなくpiped
のバージョンをまず参照したほうが良いです。- launcherが問題の原因になるのは稀です
- UIには
piped
のバージョンのみが表示されます -
launcher
のバージョンは、launcher
をデプロイしているバイナリやコンテナを直接参照してください
比較: piped vs launcher
piped | launcher | |
---|---|---|
Pipedのバージョンアップ方法 | バイナリ/イメージのバージョンを変更して再度デプロイ | Web UIから |
設定ファイルの更新時 | 再度デプロイ | 自動で新規piped 起動 |
使い分けの例:
- 「PipedのバージョンもGitで管理したい」→
piped
- 「Pipedのアップデートは手軽に行いたい」→
launcher
- 「Secret Manager等のPiped設定を更新したら、自動で反映してほしい」 →
launcher
個人的には、GitOpsの思想に則ってpiped
をGit管理するのが好みです。ただし、Pipedの設定にはクレデンシャルが含まれるため、設定ファイルはSecret Manager等で管理するのが良いと思います。
余談: プラグイン対応後はどうなる? →検討中
PipeCDでは、「デプロイをプラグインで拡張可能にする」構想が絶賛進行中です。詳細はこちら:
プラグインにもそれぞれバージョンがあり、Pipedの設定ファイルに記載される見込みです。
例)
kind: Piped
spec:
plugins:
- name: k8s-plugin
url: https://github.com/xxx/k8s-plugin:v0.2.0
...
- name: ecs-plugin
url: https://github.com/yyy/ecs-plugin:v0.1.0
...
piped
単体で利用する場合は別として、launcher
はどうなるのでしょう?
- UIからPipedのバージョンが変更された時: Pipedと全プラグインを再起動する?
- 設定ファイル内のプラグインバージョンが変更された時: Pipedと全プラグインを新規起動する?対象のプラグインだけ再起動する?
どれがいいか決定していないので、これから検討していきます。
Discussion