سنركز اليوم على جوانب GitOps من ACM ونفصلها باستخدام تكوين النموذج التالي:
لذلك ، لدينا ثلاث مجموعات OpenShift هنا. تستخدم ACM نموذجًا مُدارًا من الموزع لإدارة المجموعات ، حيث يكون المحور هو الكتلة التي تشغل ACM وتتم إدارتها هي المجموعات التي تديرها ACM. يستخدم المحور برنامج Red Hat التالي:
| بواسطة | الإصدار |
|---|---|
| منصة حاوية Red Hat OpenShift | 4.5.7 |
| ريد هات إدارة الكتلة المتقدمة | 2.0 حزمة الإصلاح 2.0.2 |
يرجى ملاحظة أن المجموعات المُدارة لها تسميات مختلفة ، وسوف نستخدمها بنشاط عند وضع التطبيقات في بيئات مختلفة.
كما هو موضح في الشكل ، لدينا مجموعة تطوير مُدارة تسمى المجموعة 1 المُدارة والتي تم نشرها في سحابة AWS في منطقة الاتحاد الأوروبي. وهناك أيضًا مجموعة إنتاج مُدارة تسمى مُدارة - الكتلة 2 - prod ، والتي يتم نشرها أيضًا في AWS ، في منطقة الولايات المتحدة.
دورة حياة التطبيق
تقدم ACM إمكانات شاملة لإدارة دورة حياة التطبيقات. هنا سنلقي نظرة على الفئات التي تنتمي إلى فئة GitOps وسنكون مفيدة في السيناريوهات التالية:
- انشر تطبيقك في بيئات متعددة.
- انشر أزرق / أخضر.
- هجرة التطبيق.
- التعافي من الكوارث
أولاً ، دعنا نحدد المصطلحات والمفاهيم التي سنعمل بها في هذه المقالة.
القنوات
تشير القنوات إلى موقع مادي حيث يتم تخزين الموارد المراد نشرها. سنستخدم هنا أنابيب من نوع Git ، بالرغم من وجود أنواع أخرى من الأنابيب (Helm ، Namespaces ، إلخ).
تعرف على المزيد
PlacementRules من
خلال إنشاء قواعد المواضع وإدارتها ، فإنك تحدد مكان نشر اشتراكات موارد Kubernetes وإصدارات Helm. من خلال تطبيق هذه القواعد ، يمكنك تبسيط نشر موارد Kubernetes عبر بيئات متعددة بشكل كبير.
تعرف على المزيد من
الاشتراكات
الاشتراكات هي مجموعة من التعريفات لتحديد موارد Kubernetes في القنوات باستخدام التعليقات التوضيحية والتسميات والإصدارات. يتم إعداد موارد الاشتراك في المركز ودفعها إلى مجموعات مُدارة. تراقب وحدة التحكم في الاشتراك موقع المصدر (القناة) للموارد الجديدة أو المحدثة. عندما يحدث هذا ، يمكنه تنزيل المورد المقابل مباشرةً من موقع المصدر (القناة) إلى الكتلة المُدارة دون التحقق أولاً من مجموعة Hub (حيث تم إرسال الاشتراك بالفعل).
يمكن للاشتراك تصفية إصدارات Helm لتحديد الإصدار الصحيح من المخطط. في هذه الحالة ، تنظر وحدة التحكم في الاشتراك في معلمة الإصدار لفهم أي إصدار من إصدار Helm (مخطط) يجب استخدامه للنشر.
المزيد من
التطبيقات
يمكن اعتبار كائن التطبيق وسيلة لتجميع الاشتراكات في مجموعة. لهذا ، هناك أدوات مقابلة ووحدة تحكم لأداء التجميع وعرض جميع مكونات التطبيق.
المزيد من التفاصيل
مستودع Git
سيتم نشر تطبيقاتنا وفقًا لقوالب GitOps ، وفي البيئات المختلفة ، ستحتاج إلى بيانات مختلفة سيتم تخزينها في مستودع Git ، والذي يظهر هيكله في الجدول أدناه:
| فرع شجرة | وصف |
|---|---|
| التكوين | يخزن الملفات الأساسية للتطبيقات المستخدمة في جميع البيئات |
| همز | يخزن ملفات التراكب للتطبيقات المستخدمة في بيئات الإنتاج |
| المسرح | يخزن ملفات التراكب للتطبيقات المستخدمة في بيئات الاختبار |
ملحوظة. تعمل Red Hat ACM على تقييد كيفية هيكلة مستودع Git الخاص بك. يمكن تنظيمه ليس فقط كما هو موضح في هذا الجدول ، ولكن أيضًا بأي طريقة أخرى مناسبة لك.
نشر التطبيق في بيئات متعددة
لنلقِ الآن نظرة على كيف يمكن أن تساعدك ACM في نشر تطبيقك عبر بيئات متعددة باستخدام خدمة ويب بسيطة تقلب الكلمات. هذه الخدمة لها إصداران: المرحلة (هذه هي النسخة التي يختبرها المطورون حاليًا) والإنتاج (هذه هي النسخة التي يستخدمها العملاء).
تدعم ACM Kustomize ، مما يجعل من السهل جدًا تخصيص التطبيقات لبيئة النشر المستهدفة.
كما ذكرنا سابقًا ، في كلتا البيئتين نستخدم نفس التطبيق ، ولكن في إصدارات مختلفة فقط.
لنشر التطبيق ، سنستخدم أداة oc ومجموعة من قوائم yaml مع التكوينات اللازمة لـ ACM ، والتي تحدد القناة والاشتراك وقاعدة الموضع. كل ما نقوم به من سطر الأوامر يمكن القيام به من وحدة تحكم الويب.
في أداة oc ، سيكون لدينا ثلاثة سياقات مهيأة ، واحد لكل بيئة:
| سياق الكلام | وصف |
|---|---|
| المركز رئيسي | ملف تعريف CLI لمجموعة HUB (حيث يتم نشر ACM) |
| ديف | ملف تعريف CLI لمجموعة التطوير المُدارة (Managed-Cluster1-dev) |
| طليعة | ملف تعريف CLI لمجموعة الإنتاج المُدارة (Managed-cluster2-prod) |
يمكنك قراءة المزيد عن ملفات تعريف CLI هنا .
الآن دعنا نلقي نظرة على الموارد التي سيتم استخدامها في مثالنا:
القناة
apiVersion: apps.open-cluster-management.io/v1
kind: Channel
metadata:
name: acm-app-lifecycle-blog
namespace: open-cluster-management
spec:
type: Git
pathname: https://github.com/RHsyseng/acm-app-lifecycle-blog.git
قمنا بتعيين القناة لتكون قناة Git ستستخدمها اشتراكاتنا للحصول على موارد Kubernetes التي تنشر تطبيقنا.
في حالتنا ، تم تكوين القناة لتلقي موارد Kubernetes من مستودع github.com/RHsyseng/acm-app-lifecycle-blog.git.
مساحة الاسم
apiVersion: v1
kind: Namespace
metadata:
name: reverse-words-stage
عندما نستخدم الاشتراك ، يتم تمرير مساحة الاسم التي تحتوي على هذا الاشتراك إلى مجموعة النشر الهدف. لذلك نحن هنا بصدد إنشاء مساحة اسم تسمى مرحلة الكلمات العكسية والتي سيتم دفعها إلى مجموعات التطوير الخاصة بنا من خلال هذا الاشتراك.
التنسيب
apiVersion: apps.open-cluster-management.io/v1
kind: PlacementRule
metadata:
name: development-clusters
namespace: reverse-words-stage
spec:
clusterConditions:
- type: "ManagedClusterConditionAvailable"
status: "True"
clusterSelector:
matchExpressions: []
matchLabels:
environment: "dev"
يتم أخذ قائمة المجموعات التي يتم فيها تمرير الاشتراكات مما تقوم بإرجاعه PlacementRule. بعبارة أخرى ، نحتاج إلى تحديد مجموعات معينة من بيئاتنا بطريقة ما ونقلها إلى اشتراكات مختلفة ، وهذه هي بالضبط المهمة التي تحلها PlacementRules. في مثالنا
، تقوم PlacementRule المسماة مجموعات التنمية بإرجاع جميع المجموعات التي تم تمييزها على أنها متوفرة ، وبتصنيف يلبي شرط البيئة : dev. وهذا يعني ، في حالتنا ، أن الإخراج سيكون عبارة عن مجموعة مطوّرة مُدارة تسمى المجموعة المدارة 1-dev.
الاشتراك
apiVersion: apps.open-cluster-management.io/v1
kind: Subscription
metadata:
name: reversewords-dev-app-subscription
namespace: reverse-words-stage
labels:
app: reversewords-dev-app
annotations:
apps.open-cluster-management.io/git-path: apps/reversewords/
apps.open-cluster-management.io/git-branch: stage
spec:
channel: open-cluster-management/acm-app-lifecycle-blog
placement:
placementRef:
kind: PlacementRule
name: development-clusters
في المثال أعلاه ، يكون الاشتراك مسؤولاً عن نشر قائمة بموارد Kubernetes (مأخوذة من القناة) إلى مجموعات من القائمة (مأخوذة من قاعدة الموضع). ولكن إلى جانب ذلك ، يمكنك أيضًا تحديد مكان وجود موارد Kubernetes هذه بالضبط في مستودع Git (القناة).
يستخدم اشتراكنا القناة التي حددناها أعلاه ويأخذ موارد Kubernetes من فرع المرحلة ، حيث يبحث عنها في التطبيقات / عكس الكلمات / المجلد.
تطبيق
apiVersion: app.k8s.io/v1beta1
kind: Application
metadata:
name: reversewords-dev-app
namespace: reverse-words-stage
spec:
componentKinds:
- group: apps.open-cluster-management.io
kind: Subscription
descriptor: {}
selector:
matchExpressions:
- key: app
operator: In
values:
- reversewords-dev-app
يساعد التطبيق في إنشاء طوبولوجيا تطبيقنا على مجموعات تديرها ACM. للقيام بذلك ، يختار التطبيق اشتراكًا واحدًا أو أكثر ، مما يؤدي في النهاية إلى إنشاء موارد على مجموعات مختلفة ، حتى نتمكن من تتبع من أنشأ ماذا وأين تم إنشاؤه.
ملحوظة. هنا ، قمنا بتغطية تلك الموارد التي سيتم استخدامها عند نشر تطبيق في بيئة التطوير. يمكن العثور على موارد البيئات الأخرى في مستودع GitHub وهي تشرح نفسها بنفسها تمامًا وتشبه تلك التي قمنا بتغطيتها.
نشر التطبيق في بيئة التطوير
1. الخطوة الأولى هي إنشاء تعريف القناة.
oc --context hub create -f https://raw.githubusercontent.com/RHsyseng/acm-app-lifecycle-blog/master/acm-manifests/base/00_channel.yaml
2. بعد ذلك ، نقوم بإنشاء Namespace لتخزين بيانات تطبيقنا.
oc --context hub create -f https://raw.githubusercontent.com/RHsyseng/acm-app-lifecycle-blog/master/acm-manifests/reversewords-stage/00_namespace.yaml
3. نقوم الآن بإنشاء "قاعدة تحديد المواضع" التي ستحدد مجموعات التطوير المُدارة.
oc --context hub create -f https://raw.githubusercontent.com/RHsyseng/acm-app-lifecycle-blog/master/acm-manifests/reversewords-stage/01_placement_rule.yaml
انظر حالة قاعدة التنسيب. لاحظ أن هذه القاعدة حددت الكتلة المدارة-cluster1-dev:
oc --context hub -n reverse-words-stage get placementrule development-clusters -o yaml
<OMITTED_OUTPUT>
status:
decisions:
- clusterName: managed-cluster1-dev
clusterNamespace: managed-cluster1-dev
4. يمكنك الآن إنشاء اشتراك وتطبيق لاستهداف مجموعة التطوير باستخدام PlacementRule.
oc --context hub create -f https://raw.githubusercontent.com/RHsyseng/acm-app-lifecycle-blog/master/acm-manifests/reversewords-stage/02_subscription-dev.yaml
oc --context hub create -f https://raw.githubusercontent.com/RHsyseng/acm-app-lifecycle-blog/master/acm-manifests/reversewords-stage/03_application-dev.yaml
نحن ننظر في حالة الاشتراك. انتبه إلى كلمة الانتشار ، فهذا يعني أنه تم إرسال الاشتراك إلى الكتلة المستهدفة:
oc --context hub -n reverse-words-stage get subscription reversewords-dev-app-subscription -o yaml
<OMITTED_OUTPUT>
status:
message: Active
phase: Propagated
5. أخيرًا ، نلقي نظرة على dev-cluster ونرى أنه تم نشر التطبيق وهو يعمل.
oc --context dev -n reverse-words-stage get deployments,services,pods
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.extensions/reverse-words 1/1 1 1 73s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/reverse-words LoadBalancer 172.30.217.208 a84668cb23acf4d109a78b119dfddbef-750551.eu-central-1.elb.amazonaws.com 8080:30053/TCP 73s
NAME READY STATUS RESTARTS AGE
pod/reverse-words-68b9b894dd-jfgpf 1/1 Running 0 73s
إذا حاولنا تنفيذ الطلبات إلى مجموعة الإنتاج ، فسنرى أن التطبيق لا يعمل هناك.
oc --context pro -n reverse-words-stage get deployments,services,pods
No resources found in reverse-words-stage namespace.
6. الآن دعنا ننفذ طلبًا لتطبيقنا ونتأكد من نشرنا الإصدار المطلوب ، أي التدريج:
curl http://$(oc --context dev -n reverse-words-stage get service reverse-words -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'):8080
Reverse Words Release: Stage Release v0.0.3. App version: v0.0.3
نشر التطبيق في بيئة الإنتاج
1. ليست هناك حاجة لإنشاء قناة جديدة ، لأننا سنستخدم نفس Git repo مثل المصدر ، ولكننا سنستخدم فرعًا مختلفًا فقط.
2. إنشاء Namespace لتخزين بيانات التطبيق لدينا.
oc --context hub create -f https://raw.githubusercontent.com/RHsyseng/acm-app-lifecycle-blog/master/acm-manifests/reversewords-prod/00_namespace.yaml
3. نقوم الآن بإنشاء قاعدة تحديد المواضع التي تحدد مجموعات الإنتاج:
oc --context hub create -f https://raw.githubusercontent.com/RHsyseng/acm-app-lifecycle-blog/master/acm-manifests/reversewords-prod/01_placement_rule.yaml
انظر حالة قاعدة التنسيب. لاحظ أن هذه القاعدة حددت مجموعة الإنتاج المُدارة للمجموعة 2 المنتج.
oc --context hub -n reverse-words-prod get placementrule production-clusters -o yaml
<OMITTED_OUTPUT>
status:
decisions:
- clusterName: managed-cluster2-prod
clusterNamespace: managed-cluster2-prod
4. يمكنك الآن إنشاء اشتراك وتطبيق لتعيين مجموعة الإنتاج كهدف باستخدام PlacementRule.
oc --context hub create -f https://raw.githubusercontent.com/RHsyseng/acm-app-lifecycle-blog/master/acm-manifests/reversewords-prod/02_subscription-pro.yaml
oc --context hub create -f https://raw.githubusercontent.com/RHsyseng/acm-app-lifecycle-blog/master/acm-manifests/reversewords-prod/03_application-pro.yaml
نحن ننظر في حالة الاشتراك. انتبه إلى كلمة الانتشار ، فهذا يعني أنه تم إرسال الاشتراك إلى الكتلة المستهدفة:
oc --context hub -n reverse-words-prod get subscription reversewords-pro-app-subscription -o yaml
<OMITTED_OUTPUT>
status:
message: Active
phase: Propagated
5. وأخيرًا ، ننظر إلى مجموعة الإنتاج ونرى أنه تم نشر التطبيق ويعمل.
oc --context pro -n reverse-words-prod get deployments,services,pods
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.extensions/reverse-words 1/1 1 1 93s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/reverse-words LoadBalancer 172.30.100.0 a6067d9a2cd904003a1b53b65f9e1cb3-450574743.us-west-2.elb.amazonaws.com 8080:30293/TCP 96s
NAME READY STATUS RESTARTS AGE
pod/reverse-words-7dd94446c-vkzr8 1/1 Running 0 94s
6. الآن ، دعنا نرسل طلبًا إلى تطبيقنا ونتأكد من نشرنا الإصدار المطلوب ، وهو الإنتاج:
curl http://$(oc --context pro -n reverse-words-prod get service reverse-words -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'):8080
Reverse Words Release: Production release v0.0.2. App version: v0.0.2
7. لدينا الآن إصدارات مختلفة من تطبيقنا لبيئات النشر المختلفة:
# Query development environment
curl http://$(oc --context dev -n reverse-words-stage get service reverse-words -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'):8080
# Query production environment
curl http://$(oc --context pro -n reverse-words-prod get service reverse-words -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'):8080
# Dev Query
Reverse Words Release: Stage Release v0.0.3. App version: v0.0.3
# Pro Query
Reverse Words Release: Production release v0.0.2. App version: v0.0.2
وأخيرًا ، لنرى كيف تبدو في وحدة تحكم الويب:
العرض العام لتطبيقات ACM

عرض تطبيق تطوير ACM

يتبع
في المنشور التالي ، سنوضح لك كيفية استخدام ACM لعمليات النشر باللونين الأزرق / الأخضر ، وترحيل التطبيقات ، والتعافي من الكوارث.