نشر تطبيق Micronaut يحتوى على Jib على Google Kubernetes Engine

1. نظرة عامة

لمحة عن Micronaut

Micronaut هو إطار عمل حديث ومتكامل ومستنِد إلى JVM لإنشاء خدمات مصغّرة معيارية وقابلة للاختبار بسهولة وتطبيقات بدون خادم. تهدف Micronaut إلى توفير وقت بدء تشغيل رائع وسرعة معالجة البيانات مع تقليل البصمة الكربونية. يمكن للمطوّرين التطوير باستخدام Micronaut باستخدام Java أو Groovy أو Kotlin.

يوفّر Micronaut ما يلي:

  • وقت بدء التشغيل السريع استهلاك منخفض للذاكرة — تعمل أطر عمل IoC المستندة إلى الانعكاس على تحميل بيانات الانعكاس وذاكرة التخزين المؤقت لكل حقل وطريقة ودالة إنشائية في الرمز البرمجي، في حين أنه في حال استخدام Micronaut، لا يتم ربط وقت بدء تشغيل التطبيق واستهلاك الذاكرة بحجم قاعدة الرموز.
  • عميل HTTP توضيحي وتفاعلي ووقت تجميع البيانات: يمكنك إنشاء برامج HTTP تفاعلية بشكل صريح، ويتم تنفيذها في وقت التجميع، ما يقلّل من استهلاك الذاكرة.
  • خادم HTTP لا يحظر الحظر ومبني على Netty — بفضل منحنى التعلم السلس، يعمل خادم HTTP التابع لـ Micronaut على تسهيل عرض واجهات برمجة التطبيقات التي يمكن أن يستهلكها عملاء HTTP.
  • الاختبار السريع والسهل: يمكنك إدارة الخوادم والعملاء بسهولة في اختبارات الوحدات، وتنفيذها على الفور.
  • إدخال التبعية الفعّالة لوقت التجميع وAOP — يوفر Micronaut واجهة برمجة تطبيقات بسيطة وموجهة نحو الجانب أثناء التجميع ولا تستخدم الانعكاس.
  • إنشاء تطبيقات تفاعلية بالكامل ولا تحظر المحتوى: يتوافق Micronaut مع أي إطار عمل ينفِّذ أحداث البث التفاعلية، بما في ذلك RxJava وReact.

لمزيد من المعلومات، يُرجى زيارة موقع Miicronaut الإلكتروني.

لمحة عن Kubernetes

Kubernetes هو مشروع مفتوح المصدر يمكن تنفيذه في العديد من البيئات المختلفة، من أجهزة الكمبيوتر المحمولة إلى المجموعات العنقودية متعددة العُقد عالية التوفّر، ومن السُحب الإلكترونية العامة إلى عمليات النشر داخل المؤسسات، بدءًا من الأجهزة الافتراضية وحتى أجهزة المعدن المجرّد.

وفي هذا التمرين، سيتم نشر خدمة Micronaut دقيقة بسيطة مستندة إلى Groovy في Kubernetes والتي تعمل على Kubernetes Engine.

الهدف من هذا الدرس التطبيقي هو تشغيل خدمتك المصغّرة كخدمة منسوخة على Kubernetes. ما عليك سوى تحويل الرمز البرمجي الذي طوّرته على جهازك إلى صورة حاوية Docker، ثم تشغيل تلك الصورة على Kubernetes Engine.

في ما يلي مخطّط بياني للأجزاء المختلفة المستخدمة في هذا الدرس التطبيقي حول الترميز لمساعدتك على فهم كيفية توافق القطع معًا. استخدِمه كمرجع أثناء تقدّمك في الدرس التطبيقي حول الترميز. يجب أن يكون كل شيء منطقيًا بحلول الوقت الذي تصل فيه إلى النهاية (ولكن لا تتردد في تجاهل هذا في الوقت الحالي).

Kubernetes Codelab مُخطّط 1 (2).png

لأغراض هذا الدرس التطبيقي، يتيح لك استخدام بيئة مُدارة، مثل Kubernetes Engine (إصدار مستضاف من Google من Kubernetes يعمل على Compute Engine) التركيز بشكل أكبر على تجربة Kubernetes بدلاً من إعداد البنية الأساسية الأساسية.

إذا كان يهمّك تشغيل Kubernetes على جهازك المحلي، مثل الكمبيوتر المحمول الخاص بالتطوير، ننصحك باستخدام Minikube. يوفر هذا إعدادًا بسيطًا لمجموعة kubernetes ذات عقدة واحدة لأغراض التطوير والاختبار. يمكنك استخدام Minikube للاطّلاع على هذا الدرس التطبيقي حول الترميز.

لمحة عن Jib

Jib هي أداة مفتوحة المصدر تتيح لك إنشاء صور Docker وOCI لتطبيقاتك في Java. ويتوفر كمكوّنات إضافية لـ Maven وGradle، وكمكتبة Java.

يهدف "جيب" إلى أن يكون:

  • السرعة: يمكنك نشر التغييرات بسرعة. يفصل Jib تطبيقك إلى طبقات متعددة، ويقسم التبعيات عن الفئات. الآن لست مضطرًا إلى انتظار Docker لإعادة إنشاء تطبيق Java بالكامل، ما عليك سوى نشر الطبقات التي تغيّرت.
  • قابلة لإعادة الإنتاج: تؤدي إعادة إنشاء صورة الحاوية بالمحتويات نفسها إلى إنشاء الصورة نفسها دائمًا. عدم تشغيل أي تحديث غير ضروري مرة أخرى
  • Demonless: يمكنك تقليل اعتماديات واجهة سطر الأوامر. أنشئ صورة Docker من داخل Maven أو Gradle، وانشرها إلى أي سجلّ من اختيارك. لن تحتاج بعد الآن إلى كتابة ملفات Dockerfiles واستدعاء ميزات Docker/push.

يمكنك العثور على مزيد من المعلومات عن Jib في صفحة مشروع GitHub.

لمحة عن هذا الدليل التعليمي

يستخدم هذا البرنامج التعليمي نموذج الرمز البرمجي من أداة Jib لإنشاء حاويات لتطبيقات Java.

ويكون النموذج عبارة عن خدمة hello world بسيطة، باستخدام إطار عمل Micronaut ولغة برمجة Apache Groovy.

ما ستتعرَّف عليه

  • كيفية تجميع تطبيق Java بسيط كحاوية Docker باستخدام Jib
  • كيفية إنشاء مجموعة Kubernetes على Kubernetes Engine
  • طريقة تفعيل خدمة Micronaut في نظام Kubernetes على Kubernetes Engine
  • كيفية توسيع نطاق خدمتك وطرح ترقية
  • كيفية الوصول إلى لوحة بيانات Kubernetes الرسومية

المتطلبات

  • مشروع Google Cloud Platform
  • متصفح، مثل Chrome أو Firefox
  • الإلمام بأدوات تحرير النصوص القياسية في Linux مثل Vim أو EMAC أو Nano

كيف ستستخدم هذا البرنامج التعليمي؟

القراءة فقط اقرأها وأكمِل التمارين

كيف تقيّم تجربتك في إنشاء تطبيقات ويب بتنسيق HTML/CSS؟

حديث متوسط بارع

ما هو تقييمك لتجربتك في استخدام خدمات Google Cloud Platform؟

حديث متوسط بارع

2. الإعداد والمتطلبات

إعداد بيئة ذاتية

  1. سجِّل الدخول إلى Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. (إذا لم يكن لديك حساب على Gmail أو G Suite، عليك إنشاء حساب.)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

يُرجى تذكُّر رقم تعريف المشروع، وهو اسم فريد في جميع مشاريع Google Cloud (سبق أن تم استخدام الاسم أعلاه ولن يكون مناسبًا لك). ستتم الإشارة إليها لاحقًا في هذا الدرس التطبيقي حول الترميز باسم PROJECT_ID.

  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد Google Cloud.

إنّ تنفيذ هذا الدرس التطبيقي حول الترميز لن يكون مكلفًا أو مكلفًا على الإطلاق. احرص على اتّباع أي تعليمات في قسم "الحذف سريعًا". الذي يقدم لك نصائح حول كيفية إيقاف تشغيل الموارد حتى لا تتكبّد أي فواتير خارج نطاق هذا البرنامج التعليمي. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج الفترة التجريبية المجانية التي تبلغ قيمتها 300 دولار أمريكي.

3- الحصول على نموذج رمز المصدر Micronaut

بعد إطلاق Cloud Shell، يمكنك استخدام سطر الأوامر لاستنساخ مثال رمز المصدر في الدليل الرئيسي والقرص المضغوط في الدليل الذي يحتوي على نموذج الخدمة الخاص بنا:

$ git clone https://github.com/GoogleContainerTools/jib.git
$ cd jib/examples/micronaut/

4. نظرة سريعة على الرمز

تتكون خدمة Micronaut البسيطة من وحدة تحكم تُصدر رسالة Hello World سيئة السمعة:

@Controller("/hello")
class HelloController {
    @Get("/")
    String index() {
        "Hello World"
    }
}

تستجيب وحدة التحكّم HelloController للطلبات ضمن المسار /hello، وتقبل الطريقة index() طلبات HTTP GET.

يتوفر أيضًا صف اختبار Spock للتحقق من عرض الرسالة الصحيحة في الناتج.

class HelloControllerSpec extends Specification {
    @Shared
    @AutoCleanup
    EmbeddedServer embeddedServer = ApplicationContext.run(EmbeddedServer)

    @Shared
    @AutoCleanup
    RxHttpClient client = embeddedServer.applicationContext.createBean(RxHttpClient, embeddedServer.getURL()) 

    void "test hello world response"() {
        when:
        HttpRequest request = HttpRequest.GET('/hello')
        String rsp  = client.toBlocking().retrieve(request)

        then:
        rsp == "Hello World"
    }
}

إنّ هذا الاختبار أكثر من مجرد اختبار وحدة بسيطة، بل يشغِّل في الواقع حزمة خادم Micronaut نفسها (استنادًا إلى إطار عمل Netty) الذي يتم تشغيله في مرحلة الإنتاج. وبالتالي، سيكون سلوك الرمز البرمجي هو نفسه في المنتج كما هو الحال في اختباراتك.

لإجراء الاختبارات، يمكنك تشغيل الأمر التالي للتأكّد من أنّ كل شيء على ما يرام:

./gradlew test

5- تشغيل التطبيق محليًا

يمكنك بدء خدمة Micronaut بشكل طبيعي باستخدام أمر Gradle التالي:

$ ./gradlew run

بعد بدء تشغيل التطبيق، يمكنك فتح مثيل Cloud Shell إضافي بفضل رمز علامة + الصغير، ثم التحقّق باستخدام طريقة curl من حصولك على النتيجة المتوقعة:

$ curl localhost:8080/hello

وينبغي أن ترى رسالة "مرحبًا بالعالم" تظهر رسالة.

6- تجميع التطبيق كحاوية Docker باستخدام Jib

بعد ذلك، عليك إعداد تطبيقك لتشغيله على Kubernetes. لهذا الغرض، سنستفيد من "جيب" لتنفيذ العمل الشاق بالنيابة عنا، لأننا لن نضطر إلى لمس Dockerfile بأنفسنا.

لننفِّذ الأمر لإنشاء حاويتنا:

$ ./gradlew jibDockerBuild

إليك المخرجات التي من المفترض أن تظهر لك:

Tagging image with generated image reference micronaut-jib:0.1. If you'd like to specify a different tag, you can set the jib.to.image parameter in your build.gradle, or use the --im
age=<MY IMAGE> commandline flag.

Containerizing application to Docker daemon as micronaut-jib:0.1...
warning: Base image 'gcr.io/distroless/java' does not use a specific image digest - build may not be reproducible
Getting base image gcr.io/distroless/java...
Building dependencies layer...
Building resources layer...
Building classes layer...
Finalizing...

Container entrypoint set to [java, -cp, /app/resources:/app/classes:/app/libs/*, example.micronaut.Application]
Loading to Docker daemon...

Built image to Docker daemon as micronaut-jib:0.1

الآن وبعد أن تم إنشاء صورتنا، دعنا نتحقق مما إذا كان بإمكاننا رؤية رسالة الترحيب الودية، من خلال تشغيل صورة Docker في علامة التبويب الأولى من Cloud Shell:

$ docker run -it -p 8080:8080 micronaut-jib:0.1
16:57:20.255 [main] INFO  i.m.context.env.DefaultEnvironment - Established active environments: [cloud, gcp]
16:57:23.203 [main] INFO  io.micronaut.runtime.Micronaut - Startup completed in 2926ms. Server Running: http://97b7d76ccf3f:8080

فخدمتنا قيد التشغيل، لذا يمكننا الآن تشغيل الأمر curl في علامة تبويب Cloud Shell الثانية، لمعرفة ما إذا كان يعمل كما هو متوقع أم لا:

$ curl localhost:8080/hello
Hello World

يمكنك إيقاف الحاوية عن طريق الضغط على Ctrl+C في Cloud Shell.

7. نشر خدمتنا المندمجة في الحاوية إلى قاعدة بيانات المسجّلين

والآن بعد أن أصبحت الصورة تعمل على النحو المطلوب، يمكنك إرسالها إلى Google Container Registry، وهو مستودع خاص لصور Docker يمكن الوصول إليها من كل مشروع على Google Cloud (ولكن أيضًا من خارج Google Cloud Platform).

قبل التمكن من الانتقال إلى السجل، يجب التأكد من تمكين Container Registry لمشروعنا، من خلال الانتقال إلى أدوات >. Container Registry. إذا لم يتم تفعيلها، سيظهر لك مربّع الحوار التالي، ثم انقر على تفعيل Container Registry API. لتفعيلها:

ac812e6260ac7dfb.png

عندما يصبح السجلّ جاهزًا، لإرسال الصورة إلى السجل، ابدأ تشغيل الأوامر التالية:

$ gcloud auth configure-docker
$ docker tag micronaut-jib:0.1 \
         gcr.io/$GOOGLE_CLOUD_PROJECT/micronaut-jib:0.1
$ docker push gcr.io/$GOOGLE_CLOUD_PROJECT/micronaut-jib:0.1

تتيح الأوامر أعلاه لحزمة تطوير البرامج (SDK) في gcloud ضبط إعدادات Docker والسماح لها بإرسال الصور إلى مثيل Container Registry، لوضع علامة على الصورة للإشارة إلى موقعها في السجلّ، ثم إرسالها إلى قاعدة بيانات المسجّلين.

إذا سارت الأمور على ما يرام وبعد فترة وجيزة، من المفترض أن تتمكن من رؤية صورة الحاوية مدرجة في وحدة التحكم: الأدوات >. Container Registry. في هذه المرحلة، لديك الآن صورة Docker على مستوى المشروع يمكن لـ Kubernetes الوصول إليها وتنسيقها كما سيصلك بعد بضع دقائق.

12224c4e42183b4e.png

8. إنشاء مجموعتك

حسنًا، أصبح بإمكانك الآن إنشاء مجموعة Kubernetes Engine، ولكن قبل ذلك، انتقِل إلى قسم Google Kubernetes Engine في وحدة تحكّم الويب وانتظِر إلى أن يتم إعداد النظام (من المفترض أن تستغرق بضع ثوانٍ فقط).

20c0587c0108b8ba.png

تتكوّن المجموعة العنقودية من خادم واجهة برمجة تطبيقات رئيسي في Kubernetes تديره Google ومجموعة من عُقد العوامل. عُقد العامل هي أجهزة افتراضية في Compute Engine. لنستخدم واجهة سطر الأوامر gcloud من جلسة CloudShell لإنشاء مجموعة مع عقدتين n1-standard-1 (سيستغرق إكمال ذلك بضع دقائق):

$ gcloud container clusters create hello-cluster \
  --num-nodes 2 \
  --machine-type n1-standard-1 \
  --zone us-central1-c

في النهاية، ينبغي أن ترى المجموعة التي تم إنشاؤها.

Creating cluster hello-cluster in us-central1-c...done.
Created [https://container.googleapis.com/v1/projects/mn-gke-test/zones/us-central1-c/clusters/hello-cluster].
To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/us-central1-c/hello-cluster?project=mn-gke-test
kubeconfig entry generated for hello-cluster.
NAME           LOCATION       MASTER_VERSION  MASTER_IP       MACHINE_TYPE   NODE_VERSION  NUM_NODES  STATUS
hello-cluster  us-central1-c  1.9.7-gke.7     35.239.224.115  n1-standard-1  1.9.7-gke.7   2          RUNNING

من المفترض أن تكون لديك الآن مجموعة Kubernetes كاملة الأداء وتستند إلى Google Kubernetes Engine:

d9e1e314769753e7.png

حان الوقت الآن لنشر تطبيقك المُحوَّل في مجموعة Kubernetes. من الآن فصاعدًا، ستستخدم سطر الأوامر kubectl (الذي تم إعداده بالفعل في بيئة Cloud Shell). يتطلّب باقي هذا الدرس التطبيقي حول الترميز أن يكون إصدار البرنامج والخادم من Kubernetes هو 1.2 أو إصدار أحدث. وسيعرض لك kubectl version الإصدار الحالي من الأمر.

9. نشر تطبيقك على Kubernetes

يمكن لعملية نشر Kubernetes إنشاء مثيلات متعددة لتطبيقك وإدارتها وتوسيع نطاقها باستخدام صورة الحاوية التي أنشأتها للتو. لنبدأ في عملية نشر تطبيقك في Kubernetes باستخدام الأمر kubectl create deployment:

$ kubectl create deployment hello-micronaut \
  --image=gcr.io/$GOOGLE_CLOUD_PROJECT/micronaut-jib:0.1

لعرض عملية النشر التي أنشأتها للتو، ما عليك سوى تشغيل:

$ kubectl get deployments
NAME              DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
hello-micronaut   1         1         1            1           5m

لعرض مثيلات التطبيق التي أنشأتها عملية النشر، شغِّل الأمر التالي:

$ kubectl get pods
NAME                               READY     STATUS    RESTARTS   AGE
hello-micronaut-5647fb98c5-lh5h7   1/1       Running   0          5m

في هذه المرحلة، من المفترض أن تكون حاويتك قيد التشغيل تحت إدارة Kubernetes، ولكن لا يزال عليك جعلها متاحةً للجميع.

10. السماح بالزيارات الخارجية

لا يمكن الوصول إلى المجموعة تلقائيًا إلا من خلال عنوان IP الداخلي في المجموعة. لإتاحة الوصول إلى حاوية hello-micronaut من خارج شبكة kubernetes الافتراضية، عليك عرض لوحة التحكّم كخدمة kubernetes.

من Cloud Shell، يمكنك عرض اللوحة على الإنترنت المتاح للجميع باستخدام الأمر kubectl expose بالإضافة إلى علامة --type=LoadBalancer. هذه العلامة مطلوبة لإنشاء عنوان IP يمكن الوصول إليه خارجيًا :

$ kubectl expose deployment hello-micronaut --type=LoadBalancer --port=8080

تحدّد العلامة المستخدَمة في هذا الأمر أنّك ستستخدم جهاز موازنة الحمل الذي توفّره البنية الأساسية الأساسية (في هذه الحالة جهاز موازنة الحمل في الحوسبة). يُرجى العِلم أنّك تعرض عملية النشر، وليس المجموعة مباشرةً. سيؤدي هذا إلى تحميل الخدمة الناتجة لموازنة حركة البيانات عبر جميع اللوحات التي تتم إدارتها من خلال عملية النشر (في هذه الحالة مجموعة واحدة فقط، ولكنك ستضيف المزيد من النسخ المكررة لاحقًا).

تنشئ مشرف Kubernetes جهاز موازنة الحمل وقواعد إعادة التوجيه ذات الصلة في Compute Engine ومجموعات الأهداف وقواعد جدار الحماية لإتاحة الوصول الكامل إلى الخدمة من خارج Google Cloud Platform.

للعثور على عنوان IP للخدمة المتاح للجميع، ما عليك سوى طلب من kubectl إدراج جميع خدمات المجموعة:

$ kubectl get services
NAME              TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)          AGE
hello-micronaut   LoadBalancer   10.39.243.251   aaa.bbb.ccc.ddd 8080:30354/TCP   1m
kubernetes        ClusterIP      10.39.240.1     <none>          443/TCP          31m

يُرجى ملاحظة أنّ هناك عنوانَي IP مُدرَجَين لخدمتك، وهما منفذ العرض 8080. أحدهما هو عنوان IP الداخلي الذي لا يظهر إلا داخل شبكتك الافتراضية على السحابة الإلكترونية، والآخر عنوان IP الخارجي المتوازن بالحمولة. في هذا المثال، عنوان IP الخارجي هو aaa.bbb.ccc.ddd.

من المفترض أن يكون بإمكانك الآن الوصول إلى الخدمة من خلال توجيه المتصفح إلى هذا العنوان: http://<EXTERNAL_IP>:8080/hello

11. توسيع نطاق خدمتك

إحدى الميزات الفعّالة التي يقدّمها Kubernetes هي مدى سهولة توسيع نطاق تطبيقك. لنفترض أنك احتجت فجأة إلى سعة أكبر لتطبيقك، يمكنك ببساطة توجيه وحدة التحكم في النسخ المماثل لإدارة عدد جديد من النسخ المكررة لمثيلات التطبيق:

$ kubectl scale deployment hello-micronaut --replicas=3
deployment.extensions "hello-micronaut" scaled

$ kubectl get deployment
NAME              DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
hello-micronaut   3         3         3            3           16m

ننصحك بالتعرّف على النهج الإعلاني هنا، بدلاً من بدء مثيلات جديدة أو إيقافها، يجب أن تذكر عدد المثيلات التي يجب عرضها في جميع الأوقات. يحرص أيضًا مديرو تسويق Kubernetes على التأكّد من أنّ الواقع يتطابق مع ما طلبته ويتخذ الإجراءات اللازمة إذا لزم الأمر.

12. طرح ترقية لخدمتك

في مرحلة ما، سيتطلب التطبيق الذي نشرته في قناة الإصدار العلني إصلاح أخطاء أو ميزات إضافية. يساعدك Kubernetes في نشر إصدار جديد في قناة الإصدار العلني بدون التأثير على المستخدمين.

أولاً، لنبدأ بتعديل التطبيق. افتح أداة تعديل الرموز من Cloud Shell.

5aee8f3d1e003571.png

يُرجى الانتقال إلى /jib/examples/micronaut/src/main/groovy/example/micronaut/HelloController.groovy وتعديل قيمة الردّ:

@Controller("/hello")
class HelloController {
    @Get("/")
    String index() {
        "Hello Kubernetes World"
    }
}

في /jib/examples/micronaut/build.gradle، ستتم ترقية إصدار الصورة من 0.1 إلى 0.2 من خلال تعديل هذا السطر:

version '0.2'

بعد ذلك، يمكنك إعادة إنشاء التطبيق وإضافة آخر التغييرات إليه:

$ ./gradlew jibDockerBuild

ثم ضع علامة وادفع الصورة إلى سجل صور الحاوية:

$ docker tag micronaut-jib:0.2 \
         gcr.io/$GOOGLE_CLOUD_PROJECT/micronaut-jib:0.2
$ docker push gcr.io/$GOOGLE_CLOUD_PROJECT/micronaut-jib:0.2

أنت الآن جاهز لتطبيق Kubernetes لتحديث وحدة التحكّم في النسخ المتماثل بسلاسة إلى الإصدار الجديد من التطبيق. لتغيير تصنيف الصورة لحاوية قيد التشغيل، عليك تعديل hello-micronaut deployment الحالية وتغيير الصورة من gcr.io/PROJECT_ID/micronaut-jib:0.1 إلى gcr.io/PROJECT_ID/micronaut-jib:0.2.

يمكنك استخدام الأمر kubectl set image لتطلب من Kubernetes نشر الإصدار الجديد من تطبيقك على المجموعة بأكملها على جهاز واحد في كل مرة من خلال التحديث المتكرّر:

$ kubectl set image deployment/hello-micronaut \
          micronaut-jib=gcr.io/$GOOGLE_CLOUD_PROJECT/micronaut-jib:0.2

deployment.apps "hello-micronaut" image updated

يُرجى مراجعة http://EXTERNAL_IP:8080 مجددًا للتأكد من أنّه يعرض الاستجابة الجديدة.

13. العودة إلى الإصدار السابق

عفوًا — هل ارتكبت خطأ في إصدار جديد من التطبيق؟ ربما احتوى الإصدار الجديد على خطأ وبالتالي تحتاج إلى العودة إلى الإصدار السابق بسرعة. باستخدام Kubernetes، يمكنك العودة إلى الحالة السابقة بسهولة. لنعيد التطبيق إلى الحالة السابقة عن طريق تشغيل:

$ kubectl rollout undo deployment/hello-micronaut

إذا ألقيت نظرة على ناتج الخدمة، سنعود إلى أول "مرحبًا بالعالم" .

14. ملخّص

في هذه الخطوة، أعددتَ خدمة Micronaut hello تستند إلى Apache Groovy، وشغّلتها مباشرةً من داخل Cloud Shell، وتغليفها كحاوية باستخدام Jib ونشرها في Google Kubernetes Engine.

15. تهانينا!

لقد تعلّمت كيفية إنشاء خدمة Apache Groovy / Micronaut دقيقة جديدة على الويب ونشرها في Kubernetes على Google Kubernetes Engine.

مزيد من المعلومات

الترخيص

هذا العمل مرخّص بموجب رخصة المشاع الإبداعي 2.0 مع نسب العمل إلى مؤلف عام.