当您运行 wrangler deploy 时,Worker 代码会立即更新,并且 Container 实例会使用滚动部署策略进行更新。默认推出配置分两步,第一步更新 10% 的实例,第二步更新剩余 90%。
可以使用 rollout_step_percentage 属性在 Wrangler 配置文件中进行配置。
在部署更改时,您还可以配置一个 rollout_active_grace_period,这是在推出期间活动容器实例有资格进行更新之前等待的最小秒数。
此时,将向容器发送 SIGTERM 信号,并且容器仍有 15 分钟的时间优雅地关闭。
如果该实例未在 15 分钟内停止,它将被发送 SIGKILL 信号强制停止。
如果在停止 Container 实例之前必须进行清理,您应该在这 15 分钟期间执行此操作。
一旦停止,该实例就会被运行已更新代码的新实例替换。当容器再次启动时,请求可能会挂起。
因为 Worker 代码会立即更新,而容器实例是逐步推出的,所以请保持更改在这两个版本中向后兼容,直到推出完成。
以下是一个示例配置,该配置设置了 5 分钟的宽限期和两步推出,其中第一步更新 10% 的实例,第二步更新 100% 的实例:
{
"containers": [
{
"max_instances": 10,
"class_name": "MyContainer",
"image": "./Dockerfile",
"rollout_active_grace_period": 300,
"rollout_step_percentage": [10, 100],
},
],
"durable_objects": {
"bindings": [
{
"name": "MY_CONTAINER",
"class_name": "MyContainer",
},
],
},
"migrations": [
{
"tag": "v1",
"new_sqlite_classes": ["MyContainer"],
},
],
}[[containers]]
max_instances = 10
class_name = "MyContainer"
image = "./Dockerfile"
rollout_active_grace_period = 300
rollout_step_percentage = [ 10, 100 ]
[[durable_objects.bindings]]
name = "MY_CONTAINER"
class_name = "MyContainer"
[[migrations]]
tag = "v1"
new_sqlite_classes = [ "MyContainer" ]如果您需要进行一次在单步中将部署推向 100% 容器实例的单次部署,则可以通过以下方式部署:
npx wrangler deploy --containers-rollout=immediateyarn wrangler deploy --containers-rollout=immediatepnpm wrangler deploy --containers-rollout=immediate请注意,rollout_active_grace_period(如果已配置)仍将适用。