问题描述
在查看Container App的Replica Count时候,发现它数量发生了变化,通常这意味着发生了重启了。
那么,是什么原因导致它重启了呢?
问题解答
可以从Container App的诊断日志 ContainerAppSystemLogs_CL中查看到有RevisionRestartWithNewSecrets事件,所以判断是Key Vault的Secret更新引起了 Container App 通过重启来获取最新值。
ContainerAppSystemLogs_CL | where ContainerAppName_s == "<your-app-name>" | where Reason_s == "RevisionRestartWithNewSecrets" | project TimeGenerated, RevisionName_s, Reason_s, Log_s | order by TimeGenerated desc
通过Environment variable 来引用secret 的任何active revision 都会自动重启来获取最新的值。
Key Vault机密 URI 必须具有以下格式之一:
- https://myvault.vault.azure.cn/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931: 引用特定版本的密钥。
- https://myvault.vault.azure.cn/secrets/mysecret:访问最新版本的密钥。
如果 URI 中未指定版本,则应用将使用密钥保管库中存在的最新版本。
有更新的版本可用时,应用会在 30 分钟内自动检索最新版本。
在环境变量中引用机密的任何活动修订版都会自动重启,以选取新值。
若要完全控制使用哪个机密版本,请在 URI 中指定版本。
所以,如果想要手动来控制Container App何时更新Secret值,避免更新 Key Vault 的行为引起 Container App 的滚动重启(rollout restart),可以指定 Key Vault 内 Secret 的版本,在希望更新时再进行手动更新,如上图中的第一种方式。
参考资料
从密钥保管库引用机密(Azure Container Apps): https://docs.azure.cn/zh-cn/container-apps/manage-secrets?tabs=azure-portal#reference-secret-from-key-vault
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!