【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