Ambassador Edge Stack を 3.7.x から 3.8.x へアップデートする際に必要なユーザ定義
はじめに
Ambassador Edge Stack(以下、Ambassador)は、Kubernetes 環境向けの高機能な API ゲートウェイおよびイングレスコントローラーとして、クラウドネイティブな環境で、スケーラブルかつ安全な API 管理を提供し、マイクロサービスアーキテクチャにおける通信の中心的な役割を担い、トラフィックの制御、セキュリティの確保、API の公開を効率的に実現します。
また、Ambassadorは、Envoy プロキシをベースとして宣言的な設定アプローチを採用しており、Kubernetes のカスタムリソース定義(CRD)を活用することで、インフラストラクチャをコードとして管理する GitOps の実践にも適しています。
本記事では、Azure Kubernetes Service(以下、AKS) で使用しているAmbassador を 3.7.x から 3.8.x へのアップデート作業時に発生したエラーとともに、必要となるユーザー定義の変更点について確認します。
前提条件
- Kubernetes クラスター v1.31.7 の AKS
- kubectl v1.31.6
- Helm v3.17.1
- バックアップなどのアップデート事前準備作業が完了済み
- バージョンアップ前の Ambassador のアプリバージョン v3.7.x
- バージョンアップ後の Ambassador のアプリバージョン v3.8.x
- バージョンアップ前の Ambassador の Helm Chart v8.7.x
- バージョンアップ後の Ambassador の Helm Chart v8.8.x
- Ambassador のライセンスを取得済み
発生したエラーと解決方法
バックアップなどのすべてのアップデート前準備を完了したのちに、Ambassador のアプリバージョンを 3.7.x から 3.8.x へのバージョンアップのために下記のコマンドを実行するとエラーが発生しました。
# 実行コマンド
$ helm upgrade edge-stack datawire/edge-stack -n ${NAME_SAPCE} --version 8.7.2 --dry-run # --version では Helm Chart Version を指定する。
# 出力されたエラー
Error: UPGRADE FAILED: template: edge-stack/charts/emissary-ingress/templates/ambassador-agent.yaml:1:14: executing "edge-stack/charts/emissary-ingress/templates/ambassador-agent.yaml" at <.Values.agent.enabled>: nil pointer evaluating interface {}.enabled
agent.enable が未定義もしくは正しく値を受け渡せていないことが原因でエラーが出ていそうなので、Ambassador の Helm Chart にてユーザが定義した値を下記コマンドで出力して確認します。
$ helm get values edge-stack -n ${NAME_SAPCE} > edge-stack-values.yaml
GitHub | Ambassador Edge Stack リポジトリから Ambassador の Helm Chart が参照している values.yaml までたどり、こちらを参考に、出力した edge-stack-values.yaml に下記の内容を追加します。
# ~~~~~~~~ 省略
emissary-ingress:
agent:
enabled: true
# ~~~~~~~~ 省略
以前までは、上記が定義されていない場合はデフォルトで true として動作していましたが、3.8.x のバージョンではユーザが定義しなければいけなくなったようです。
修正後、下記のコマンドを実行すると、アップデートシミュレーションが成功しました。
$ helm upgrade edge-stack datawire/edge-stack -n ${NAME_SAPCE} --version 8.7.2 -f edge-stack-values.yaml --dry-run
アップデートシミュレーションが完了したので、--dry-run フラグを外してコマンドを実行、アップデートを実施、helm や kubectl、Azure Portal などを駆使して動作確認をしたところ、問題なくアップデートが完了しました。
まとめ
Ambassador のアプリバージョンを 3.7.x から 3.8.x へアップデートする場合、ユーザが定義した値を修正せずに helm upgrade ~ を実行するだけではアップデートできませんでした。
そのため、3.7.x に使用しているユーザが定義した値を 3.8.x に適応したスキーマに修正してからアップデートを行う必要がありました。
Kubernetes 内の Ambassador を Helm で管理する場合には、手動でバージョンを管理することから逃れることができないので、引き続き安全にアップデートできるようにしていきたいと思います。