INTEGRITY Dokumentace

Rollouty

Jak fungují rollouty

A rollout aplikuje cílovou konfiguraci aplikace kontejneru poté, co deploy Worker, který používá Containers. Cíl může měnit obraz, typ instance, limity, umístění nebo jiná nastavení kontejneru.

A instance kontejneru je jedna běžící kopie vašeho image kontejneru v síti Cloudflare. Spouští proces, který zahajuje váš image (ENTRYPOINT/CMD v Dockerfile, případně výchozí hodnota základního image). Když cíl změní image, rollout nahradí instance kontejnerů kopiemi, které běží na cílovém image. Rollouty nemění úložiště Durable Object.

Když se změní efektivní konfigurace existující kontejnerové aplikace, wrangler deploy:

  1. Nahraje a aktivuje novou verzi Workeru, včetně kódu třídy Durable Object.
  2. V případě potřeby sestaví a pushne image podle Dockerfile, nebo použije nakonfigurovaný odkaz na image v registru.
  3. Spustí rollout, který použije cílovou konfiguraci kontejneru.

Worker je aktivní ještě před tím, než začnou kroky pro image a rollout. Tyto kroky nejsou transakční, takže Worker může zůstat aktivní i v případě, že některý pozdější krok s image nebo rolloutem selže. Úspěšné nasazení znamená, že rollout začal, ne že se dokončila náhrada všech instancí kontejneru. První nasazení vytvoří aplikaci kontejneru přímo a nasazení bez skutečných změn kontejneru žádný rollout nespustí.

Když se image změní, nový kód Workeru může až do dokončení rolloutu stále komunikovat s instancemi kontejneru na předchozím image. V tomto okně upřednostněte změny Workeru a image, které spolu fungují společně, nebo zvolte okamžité pokud potřebujete nejkratší smíšené okno, které platforma umožňuje.

Názvy polí a povolené hodnoty jsou uvedeny v části Konfigurace Containers.

Výchozí hodnoty

Nastavení Výchozí
rollout_step_percentage 100 v případě, že max_instances je vynecháno nebo menší než 2; jinak [10, 100]
rollout_active_grace_period 0 sekund
Sekvence zastavení při výměně instance kontejneru SIGTERM hlavnímu procesu a poté SIGKILL po 15 minutách, pokud se neukončil

Postupné nasazování

Ve výchozím nastavení Wrangler spouští postupné nasazení pomocí rollout_step_percentage. Pokud max_instances je vynecháno nebo menší než 2, Wrangler používá jeden 100 krok. Jinak si Wrangler vyžádá [10, 100]:

  1. Vyžádejte cíl přibližně 10 % instancí kontejnerů s novou konfigurací. Platforma toto procento v případě potřeby zvýší tak, aby daný krok představoval alespoň jednu instanci při nakonfigurovaném max_instances.
  2. Cílí na 100% instancí kontejneru s novou konfigurací.

Nakonfigurujte kroky pomocí rollout_step_percentage ve Wrangleru. Výchozí plán pro jedno nasazení přepíšete pomocí --containers-rollout.

Jak se nahrazuje instance kontejneru

Když rollout vybere instanci kontejneru k aktualizaci:

  1. Ochranná lhůta (pokud je nakonfigurována). Pokud rollout_active_grace_period je větší než 0, instance kontejneru, které se teprve nedávno připojily ke svému Durable Object se přeskakují, dokud neprojdou tímto oknem. Výchozí hodnota 0 znamená žádné další čekání. Viz Aktivní ochranná lhůta rolloutu.
  2. Signalizace zastavení. Platforma odešle SIGTERM hlavnímu procesu v kontejneru, aby mohl přestat přijímat novou práci a dokončit rozpracovanou práci. Ošetřete SIGTERM ve vašem image, pokud tento proces před ukončením potřebuje úklid.
  3. Vyprázdnění. Proces má až 15 minut na ukončení po SIGTERM.
  4. V případě potřeby vynuťte zastavení. Pokud proces stále běží i po 15 minutách, platforma odešle SIGKILL.
  5. Po ukončení. Třída Container onStop hook se ve Workeru spustí až poté, co proces kontejneru skončí.
  6. Spuštění nové instance kontejneru s cílovým obrazem. Disk je dočasný pokud data neukládáte mimo souborový systém kontejneru.

Každá vybraná instance Container prochází touto sekvencí podle vlastního plánu. Celá flotila se nerestartuje najednou.

Požadavky během spouštění instance kontejneru

Nová instance kontejneru musí spustit svůj proces. Spuštění obvykle trvá řádově sekundy, v závislosti na velikosti image a na tom, co se při startu spouští. Více informací najdete v studené starty.

Požadavek, který danou instanci kontejneru potřebuje, může čekat, dokud kontejner nebude připravený, nebo selže, pokud je časový limit klienta či Workeru kratší než doba spuštění. Práci při spouštění udržujte rychlou, používejte kontroly připravenosti portu, pokud je máte nastavené, a časové limity volte s ohledem na dobu spuštění.

Aktivní ochranná lhůta rolloutu

rollout_active_grace_period platí pouze během rolloutu, kdy platforma vybírá, které instance kontejneru nahradit.

Containers jsou díky Durable Objects. Každá běžící instance kontejneru je přiřazena k instanci Durable Object, která ji spouští a posílá jí provoz. Ochranná lhůta udává, jak dlouho už toto spojení muselo běžet, než smí rollout kontejner vypnout. Neměří se od dokončení nasazení.

Hodnota Účinek
0 (výchozí) Žádná další ochrana. Vybrané instance kontejnerů mohou být nahrazeny, jakmile je rollout zasáhne.
Více než 0 (například 300) Instance kontejneru, které jsou ke svému Durable Object připojené kratší dobu, než je zde uvedený počet sekund, se ponechají beze změny, dokud tuto dobu nepřekročí.

Nenulovou hodnotu použijte, pokud mají krátké relace skončit dřív, než je kontejner nahrazen rolloutem. Instance kontejneru, které jsou připojené déle, mohou být nahrazeny i po uplynutí tohoto časového okna.

rollout_active_grace_period platí pro každý режим rolloutu, včetně okamžité.

Režimy rolloutu

--containers-rollout platí pro wrangler deploy pouze. Nevztahuje se na wrangler versions upload.

Při úplném nasazení Wrangler aktivuje Worker ještě před zpracováním image kontejneru a rolloutu. Režim rolloutu určuje, jak se použije cílová konfigurace kontejneru.

Režim Příznak Instance kontejneru
Postupné (výchozí) vynechat příznak Použijte rollout_step_percentage, který může obsahovat jeden nebo více kroků
Okamžité --containers-rollout=immediate Cílení na 100% instancí kontejneru v jednom kroku
Žádné --containers-rollout=none Ponechat obrazy a běžící instance kontejnerů beze změny; nasadit pouze kód Workeru

Okamžité

Možnost Okamžité nastaví plán nasazení na jediný krok, který cílí na 100 % instancí kontejnerů. Neexistuje žádné mezikrokové zadržení na určitém procentu.

npx wrangler deploy --containers-rollout=immediate

Hodnotu immediate použijte, pokud musí kód Workeru a obraz kontejneru zůstat kompatibilní a chcete, aby přechodné okno bylo co nejkratší, jak to platforma umožňuje (například při zásadní změně komunikace Workeru s procesem uvnitř obrazu).

Chování:

Žádné

None ponechá images a běžící instance kontejnerů beze změny a nasadí pouze kód Workeru.

Hodnotu none použijte, pokud nasazení nemá publikovat nový obraz ani spouštět rollout instancí kontejneru. Pokud image je cesta k Dockerfile a Docker není dostupný, může Wrangler tento příznak nebo funkční instalaci Docker vyžadovat, aby nasazení mohlo kroky s kontejnerem přeskočit.

Příklad konfigurace

rollout_active_grace_period 300 sekund (pět minut) a zvyšuje se v krocích po [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" ]