GH GambleHub

ब्लू-ग्रीन और कैनरी तैनात

ब्लू-ग्रीन और कैनरी तैनात

1) चुनौती और प्रमुख विचार

ब्लू-ग्रीन और कैनरी नॉन-स्टॉप रिलीज रणनीतियां हैं जो गोद लेने के जोखिम को कम करती हैं:
  • ब्लू-ग्रीन: दो समानांतर संस्करण रखें (नीला - सक्रिय, हरा - नया), परमाणु रूप से यातायात स्विच करें। एक त्वरित रोलबैक - तुरंत ब्लू वापसी।
  • कैनरी: नए संस्करण को चरणों में चालू करें (1% → 5% → 25% → 50% → 100%), एसएलओ मैट्रिक्स की निगरानी करें और गिरावट के दौरान स्टॉप/रोल वापस करें।

सामान्य सिद्धांत "ट्रैफिक समावेश" से "कलाकृतियों की डिलीवरी" को अलग करना और अवलोकन + रोलबैक को स्वचालित करना है।

2) कब चुनना है

ब्लू-ग्रीन उपयुक्त है जब:
  • तत्काल स्विचिंग (हार्ड आरटीओ), सरल राज्य-कम सेवाओं की आवश्यकता;
  • सख्त रिलीज/फ्रीज खिड़कियां और स्पष्ट धुएं की जांच हैं;
  • एक लंबी दोहरी क्षमता रखना महंगा है - लेकिन यह थोड़े समय के लिए संभव है।
कैनरी उपयुक्त है जब:
  • जटिल परिवर्तन, वास्तविक यातायात पर चरण-दर-चरण सत्यापन की आवश्यकता है;
  • परिपक्व टेलीमेट्री (एसएलओ, बिजनेस मैट्रिक्स), ऑटो-स्टॉप क्षमता है;
  • गंभीर रूप से क्षति की त्रिज्या (फिनटेक/आईगेमिंग धाराएं) को सीमित करें।

कॉम्बो पैटर्न: ग्रीन को रोल आउट करें और इसे कैनरी-स्टेज (फ्रेम के रूप में ब्लू-ग्रीन, ट्रैफिक ले जाने की एक विधि के रूप में कैनरी) के माध्यम से स्विच करें।

3) ट्रैफिक रूटिंग आर्किटेक्चर

ट्रैफिक जोड़ ने के लिए विकल्प:

1. L4/L7 बैलेंसर (एएलबी/एनएलबी, क्लाउड लोड बैलेंसर) - भारित लक्ष्य समूह।

2. एपीआई प्रवेश द्वार/डब्ल्यूएएफ - मार्ग/संस्करणों, शीर्षकों, कुकीज़, क्षेत्रों द्वारा वजन।

3. सेवा मेश (इस्तियो/लिंकर्ड/कांसुल) - प्रतिशत वितरण, दोष इंजेक्शन, टाइमआउट/रिट्रे/प्रतिबंध हैंडल।

4. इंग्रेस/NGINX/दूत - अपस्ट्रीम वजन और विशेषता मार्ग।

5. आर्गो रोलआउट्स/फ्लैगर - ऑपरेटर-कंट्रोलर, स्वचालित प्रगति, प्रोमेथियस/न्यू रेलिक/डाटाडोग के साथ एकीकरण।

4) कुबर्नेट्स: व्यावहारिक टेम्पलेट्स

4. 1 ब्लू-ग्रीन (सेवा चयनकर्ता के माध्यम से)

Два तैनाती: 'ऐप-ब्लू' и 'ऐप-ग्रीन'।

वांछित 'संस्करण' के लिए चयनकर्ता के साथ एक सेवा 'ऐप-एसवीसी'।

yaml apiVersion: apps/v1 kind: Deployment metadata: { name: app-green, labels: { app: app, version: green } }
spec:
replicas: 4 selector: { matchLabels: { app: app, version: green } }
template:
metadata: { labels: { app: app, version: green } }
spec:
containers:
- name: app image: ghcr. io/org/app:1. 8. 0 apiVersion: v1 kind: Service metadata: { name: app-svc }
spec:
selector: {app: app, version: blue} # ← switch to green - change ports: [{port: 80, targetPort: 8080}]

नियंत्रित नाली के साथ चयनकर्ता (या लेबल) का परमाणु परिवर्तन।

4. 2 कैनरी (Istio VirtualService)

yaml apiVersion: networking. istio. io/v1beta1 kind: VirtualService metadata: { name: app }
spec:
hosts: ["app. example. com"]
http:
- route:
- destination: { host: app. blue. svc. cluster. local, subset: v1 }
weight: 90
- destination: { host: app. green. svc. cluster. local, subset: v2 }
weight: 10

कदम से 'वजन' बदलें; डेस्टिनेटरूल में रीट्री, टाइमआउट, आउटलेयर-डिटेक्टर जोड़ें।

4. 3 आर्गो रोलआउट्स (ऑटो कैनरी रन)

yaml apiVersion: argoproj. io/v1alpha1 kind: Rollout metadata: { name: app }
spec:
replicas: 6 strategy:
canary:
canaryService: app-canary stableService: app-stable steps:
- setWeight: 5
- pause: {duration: 300} # 5 min observation
- analysis:
templates:
- templateName: slo-guard
- setWeight: 25
- pause: { duration: 600 }
- analysis:
templates: [{ templateName: slo-guard }]
- setWeight: 50
- pause: {}
trafficRouting:
istio:
virtualService:
name: app routes: ["http-route"]

टेम्पलेट विश्लेषण मेट्रिक्स से जुड़ा हुआ है (नीचे देखें)।

5) एसएलओ गेट और ऑटो रोलबैक

संरक्षित मैट्रिक्स (उदाहरण):
  • तकनीकी: 'p95 _ लेटेंसी', '5xx _ रेट', 'त्रुटि _ बजट _ बर्न', 'सीपीयू/मेमोरी थ्रॉटलिंग'।
  • किराने: 'सीआर (जमा)', 'भुगतान की सफलता', 'धोखाधड़ी', 'एआरपीयू' (ठंडी खिड़कियों पर)।
नीति रोकें (उदाहरण):
  • यदि नए संस्करण का '5xx _ दर'> 0 है. 10 मिनट के लिए 5% - ठहराव और रोलबैक।
  • यदि 'p95 _ लेटेंसी' ↑> 20% बेस - रोलबैक।
  • यदि कैनरी प्रमोशन जाता है लेकिन बजट एसएलओ को जला दिया जाता है> 2 %/घंटा - होल्ड।
Argo Template (सरलीकृत):
yaml apiVersion: argoproj. io/v1alpha1 kind: AnalysisTemplate metadata: { name: slo-guard }
spec:
metrics:
- name: http_5xx_rate interval: 1m successCondition: result < 0. 005 provider:
prometheus:
address: http://prometheus. monitoring:9090 query:
sum(rate(http_requests_total{app="app",status=~"5.."}[5m])) /
sum(rate(http_requests_total{app="app"}[5m]))

6) डेटा और संगतता (दर्द का सबसे आम कारण)

विस्तार → माइग्रेट → अनुबंध रणनीति का उपयोग करें:
  • विस्तार: नया शून्य स्तंभ/सूचकांक जोड़ें, दोनों योजनाओं का समर्थन करें।
  • माइग्रेट करें: डबल राइट/रीड, बैक-फिल।
  • संविदा: 100% यातायात से बाहर निकलने के बाद पुराने फ़ील्ड/कोड मिटाएँ।
  • घटना/कतार: संस्करण पेलोड (v1/v2), समर्थन पहचान का समर्थन करें।
  • कैश/सत्र: संस्करण कुंजी; प्रारूप संगतता सुनिश्चित करें।

7) CI/CD और GitOps के साथ एकीकरण

CI: एक बार निर्माण, छवि हस्ताक्षर, SBOM, परीक्षण।

सीडी: वातावरण के माध्यम से कलाकृतियों का प्रचार; ब्लू-ग्रीन/कैनरी घोषणापत्र द्वारा शासित होते हैं।

GitOps: MR → नियंत्रक (Argo CD/Flux) वजन/चयनकर्ताओं को लागू करता है।

वातावरण/अनुमोदन: उत्पादन चरणों के लिए - मैनुअल गेट + ऑडिट निर्णय।

8) NGINX/दूत और बादल LBs: त्वरित उदाहरण

8. 1 NGINX (अपस्ट्रीम वेट)

nginx upstream app_upstream {
server app-blue:8080 weight=90;
server app-green:8080 weight=10;
}
server {
location / { proxy_pass http://app_upstream; }
}

8. 2 AWS ALB (भारित लक्ष्य समूह)

टीजी-ब्लू: 90, टीजी-ग्रीन: 10 IaC/CLI के माध्यम से वजन बदलते हैं।

लिंक CloudWatch अलर्ट को ऑटो स्क्रिप्ट को रोलबैक करने के लिए (वजन 0/100 पर परिवर्तित)।

9) सुरक्षा और अनुपालन

संस्करणों के बीच शून्य विश्वास: एन्क्रिप्शन रहस्यों/रोलिंग कुंजियों के बीच अंतर करें।

पॉलिसी-ए-कोड: अहस्ताक्षरित छवि तैनात करना, 'नवीनतम नहीं'।

संस्करण कलाकृतियों के रूप में रहस्य और कॉन्फ़िग; रोलबैक में कॉन्फ़िग का रोलबैक शामिल है।

ऑडिट: कौन, जब उसने वजन उठाया/चयनकर्ता को स्विच किया, तो टिकट के साथ।

10) लागत और क्षमता

ब्लू-ग्रीन को रिलीज़ अवधि के लिए दोगुनी शक्ति की आवश्यकता होती है - एक खिड़की की यो

कैनरी लंबे समय तक चल सकती है - टेलीमेट्री/निगरानी की लागत, दो संस्करणों की समानांतर सामग्री।

अनुकूलन: एचपीए/वीपीए द्वारा ऑटोस्कैलिंग, लघु ब्लू-ग्रीन विंडो, "भारी" सेवाओं के लिए रात रिलीज।

11) रनबुक

1. पदोन्नति को रोकें।

2. हरे भार को 0% (कैनरी )/ब्लू (ब्लू-ग्रीन) पर रिटर्न चयनकर्ता तक कम करें।

3. जाँचें: त्रुटियाँ/विलंबता मूल, नाली कनेक्शन पर लौट आई.

4. एक घटना खोलें, कलाकृतियों (लॉग, ट्रैक, मेट्रिक्स की तुलना) एकत्र करें।

5. मंच पर फिक्स/रीप्रॉड करें, धूम्रपान करें, प्रगति को फिर से शुरू करें।

12) एंटी-पैटर्न

चरण और प्रोड के बीच एक कलाकृति का पुनर्निर्माण ("एक बार निर्माण" का उल्लंघन)।

एसएलओ/मैट्रिक्स के बिना "बहरा" कैनरी एक औपचारिकता है, रक्षा नहीं।

सुविधा झंडे की कमी: रिलीज को एक बार में व्यवहार 100% शामिल करने के लिए मजबूर किया जाता है

गैर-कामकाजी स्वास्थ्य-जाँच/जीविका - "चिपचिपा" बोतलें और झूठी स्थिरता।

डेटाबेस संगतता "यादृच्छिक पर": स्विच करते समय अनुबंध टूट जाता है।

प्रोड में उत्परिवर्ती छवि टैग/' नवीनतम '।

13) कार्यान्वयन चेकलिस्ट (0-45 दिन)

0-10 दिन

सेवाओं के लिए एक रणनीति चुनें: B/G, Canary या संयुक्त।

छवि हस्ताक्षर, स्वास्थ्य-जाँच, तत्परता-नमूने, 'नवीनतम नहीं' सक्षम करें.

एसएलओ डैशबोर्ड (विलंबता/त्रुटि दर/व्यवसाय मैट्रिक्स) तैयार करें।

11-25 दिन

स्वचालित वजन (इस्तियो/आर्गो रोलआउट्स/एएलबी-वेट)।

विश्लेषण टेम्पलेट, अलर्ट और ऑटो-रोलबैक कॉन्फ़िगर करें।

टेम्पलेट मैनिफेस्ट (हेल्म/कुस्टोमाइज़), GitOps के साथ एकीकृत करें।

26-45 दिन

डेटाबेस के लिए विस्तार-माइग्रेट-अनुबंध रणनीति लागू करें।

महत्वपूर्ण किल-स्विच झंडे को कवर करें।

"गेम डे" खर्च करें: एक रोलबैक और घटना का अनुकरण करें।

14) परिपक्वता मैट्रिक्स

ब्लू-ग्रीन/कैनरी (लक्ष्य> 90%) के माध्यम से रिलीज़ का%।

औसत स्विचओवर/रोलबैक समय (लक्ष्य <3 मिनट)।

एसएलओ ऑटो-स्टॉप (और घटनाओं के बिना) के साथ रिलीज़ का हिस्सा।

टेलीमेट्री (ट्रेस/लॉग/मेट्रिक्स)> 95% द्वारा सेवा कवरेज।

विस्तार-प्रवासन-अनुबंध योजना के अनुसार डीबी पलायन का हिस्सा> 90% है।

15) संलग्नक: नीति और पाइपलाइन टेम्पलेट

ओपीए (अहस्ताक्षरित छवियों को अस्वीकृत करें)

rego package admission. image

deny[msg] {
input. request. kind. kind == "Deployment"
some c img:= input. request. object. spec. template. spec. containers[c].image not startswith(img, "ghcr. io/org/")
msg:= sprintf("Image not from trusted registry: %v", [img])
}

कैनरी के लिए हेल्म- मान (सरलीकृत)

yaml canary:
enabled: true steps:
- weight: 5 pause: 300
- weight: 25 pause: 600
- weight: 50 pause: 900 sloGuards:
max5xxPct: 0. 5 maxP95IncreasePct: 20

GitHub क्रियाएँ - वजन पदोन्नति (छद्म)

yaml
- name: Promote canary to 25%
run: kubectl patch virtualservice app \
--type=json \
-p='[{"op":"replace","path":"/spec/http/0/route/1/weight","value":25}]'

16) निष्कर्ष

ब्लू-ग्रीन और कैनरी पारस्परिक रूप से अनन्य नहीं हैं, लेकिन पूरक रणनीतियां हैं। उन्हें हस्ताक्षरित कलाकृतियों, SLO अवलोकन, स्वचालित द्वार और GitOps नियंत्रण के शीर्ष पर बनाएं। समावेश से अलग डिलीवरी, एक त्वरित रोलबैक और प्रवासन अनुशासन रखें - और रिलीज पूर्वानुमानित, सुरक्षित और तेज हो जाते हैं।

Contact

हमसे संपर्क करें

किसी भी प्रश्न या सहायता के लिए हमसे संपर्क करें।हम हमेशा मदद के लिए तैयार हैं!

इंटीग्रेशन शुरू करें

Email — अनिवार्य है। Telegram या WhatsApp — वैकल्पिक हैं।

आपका नाम वैकल्पिक
Email वैकल्पिक
विषय वैकल्पिक
संदेश वैकल्पिक
Telegram वैकल्पिक
@
अगर आप Telegram डालते हैं — तो हम Email के साथ-साथ वहीं भी जवाब देंगे।
WhatsApp वैकल्पिक
फॉर्मैट: देश कोड और नंबर (उदा. +91XXXXXXXXXX)।

बटन दबाकर आप अपने डेटा की प्रोसेसिंग के लिए सहमति देते हैं।