تكوين إجراءات مواجهة الكوارث

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

ملاحظة:

يفترض هذا الحل وجود كل من مجموعات Kubernetes، بما في ذلك مستوى التحكم ونقاط التوصيل العاملة بالفعل.

تخطيط التكوين

تخطيط الموارد والتكوين على النظام الثانوي استنادًا إلى النظام الأساسي.

ملاحظة:

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

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

استكمل المتطلبات التالية الخاصة بـ Restore عند تخطيط التكوين:

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

    على سبيل المثال، إذا قام موقعك الأساسي بحل المجموعة المشابهة لما يلي:

    [opc@olk8-m1 ~]$ kubectl get nodes -A
    NAME      STATUS   ROLES           AGE      VERSION
    olk8-m1   Ready    control-plane   552d     v1.25.12
    olk8-m2   Ready    control-plane   552d     v1.25.12
    olk8-m3   Ready    control-plane   2y213d   v1.25.12
    olk8-w1   Ready    <none>          2y213d   v1.25.12
    olk8-w2   Ready    <none>          2y213d   v1.25.12
    olk8-w3   Ready    <none>          2y213d   v1.25.12
    [opc@olk8-m1 ~]$ nslookup olk8-m1
    Server:         169.254.169.254
    Address:        169.254.169.254#53
    
    Non-authoritative answer:
    Name:   olk8-m1.k8dbfrasubnet.k8dbvcn.oraclevcn.com
    Address: 10.11.0.16
    بعد ذلك، يجب أن يستخدم موقعك الثانوي نفس أسماء نقاط التوصيل. في المثال السابق لنقطة التوصيل في مستوى التحكم، سيكون اسم المضيف في المنطقة الثانية هو نفسه المعين إلى IP مختلف.
    [opc@k8dramsnewbastion ~]$ nslookup olk8-m1
    Server:         169.254.169.254
    Address:        169.254.169.254#53
    
    Non-authoritative answer:
    Name:   olk8-m1.sub01261629121.k8drvcnams.oraclevcn.com
    Address: 10.5.176.144
    
    [opc@k8dramsnewbastion ~]$
    سيستخدم التكوين الناتج في الثانوية (بعد استخدام kubeadm لتكوين المجموعة وإضافة نقاط التوصيل العاملة) نفس أسماء نقاط التوصيل بالضبط، حتى في حالة تأجيل عناوين IP الداخلية والقيم الأخرى.
    [opc@k8dramsnewbastion ~]$ kubectl get nodes -A
    NAME      STATUS   ROLES           AGE      VERSION
    olk8-m1   Ready    control-plane   552d     v1.25.11
    olk8-m2   Ready    control-plane   552d     v1.25.11
    olk8-m3   Ready    control-plane   2y213d   v1.25.11
    olk8-w1   Ready    <none>          2y213d   v1.25.11
    olk8-w2   Ready    <none>          2y213d   v1.25.11
    olk8-w3   Ready    <none>          2y213d   v1.25.11
  3. استخدم "اسم مضيف بديل" مماثل لعنوان الطرف الأمامي kube-api.

    ملاحظة:

    يجب ألا تستخدم مجموعة kubernetes الأساسية عناوين IP لواجهة المستخدم kube-api. يجب استخدام اسم مضيف حتى يمكن استخدام الواجهة الأمامية هذه في النظام الثانوي. راجع اسكربت maak8s-kube-api-alias.sh للاطلاع على مثال حول كيفية إضافة اسم مضيف بديل إلى نظام kube-api الأساسي الموجود لديك.

    على سبيل المثال، إذا كان حل العنوان الأساسي kube-api كما يلي:
    [opc@olk8-m1 ~]$  grep server .kube/config
        server: https://k8lbr.paasmaaoracle.com:6443
    [opc@olk8-m1 ~]$  grep k8lbr.paasmaaoracle.com /etc/hosts
    132.145.247.187 k8lbr.paasmaaoracle.com k8lbr
    ثم، يجب أن يستخدم kube-api الثانوي نفس اسم المضيف (يمكنك تخطيطه إلى IP مختلف):
    [opc@k8dramsnewbastion ~]$ grep server .kube/config
        server: https://k8lbr.paasmaaoracle.com:6443
    [opc@k8dramsnewbastion ~]$ grep k8lbr.paasmaaoracle.com /etc/hosts
    144.21.37.81 k8lbr.paasmaaoracle.com k8lbr
    يمكنك تحقيق ذلك باستخدام الأجهزة المضيفة الظاهرية أو دقة /etc/hosts المحلية أو خوادم DNS مختلفة في كل موقع. لتحديد أسلوب دقة اسم المضيف المستخدم بواسطة مضيف معين، ابحث عن قيمة معلمة المضيفين في ملف /etc/nsswitch.conf على المضيف.
    • إذا أردت تحليل أسماء المضيفين محليًا على المضيف، فقم بجعل إدخال الملفات هو الإدخال الأول لمعلمة hosts. عندما يكون files هو الإدخال الأول لمعلمة المضيفات، يتم استخدام الإدخالات في ملف المضيف /etc/hosts أولاً لحل أسماء المضيف.

      تحديد استخدام قرار اسم المضيف المحلي في ملف /etc/nsswitch.conf:

      hosts: files dns nis
    • إذا أردت حل أسماء المضيفين باستخدام DNS على المضيف، فقم بجعل إدخال dns هو الإدخال الأول لمعلمة المضيفين. عندما يكون dns هو الإدخال الأول لمعلمة hosts، يتم استخدام إدخالات خادم DNS أولاً لحل أسماء المضيفين.

      تحديد استخدام ملف قرار اسم مضيف DNS /etc/nsswitch.conf:

      hosts: dns files nis

    من أجل البساطة والاتساق، توصي Oracle جميع المضيفين داخل الموقع (موقع الإنتاج أو الموقع البديل) باستخدام نفس طريقة حل اسم المضيف (حل أسماء المضيفين محليًا أو حل أسماء المضيفين باستخدام خوادم DNS منفصلة أو خادم DNS عام).

    تم استخدام تقنية "بديل اسم المضيف" لسنوات عديدة في الحماية من الكوارث لأنظمة البرامج الوسيطة. يمكنك العثور على التفاصيل والأمثلة في وثائق Oracle، بما في ذلك دليل استرداد كوارث Oracle Fusion Middleware والمستندات الأخرى المتعلقة بحماية كوارث Oracle Cloud، مثل Oracle WebLogic Server for Oracle Cloud Infrastructure Disaster Recovery وSOA Suite في Oracle Cloud Infrastructure Marketplace Disaster Recovery.

  4. قم بتكوين المجموعة الثانوية باستخدام نفس اسم المضيف لموازن تحميل kube-api في الواجهة الأمامية كما هو الحال في الأساسي.
    قم بتنفيذ هذه الخطوة بعد أن يكون حل اسم المضيف جاهزًا. راجع وثائق أداة Kubernetes kubeadm. استخدم نفس إصدارات kubeadm وKubernetes كما هي في الإصدار الأساسي. قد تؤجل أوقات تشغيل الحاوية، ولكن يجب عليك استخدام نفس إصدارات بنية Kubernetes الأساسية في كلا المنطقتين.
    على سبيل المثال، إذا تم تكوين المجموعة الأساسية باستخدام ما يلي:
    kubeadm init --control-plane-endpoint $LBR_HN:$LBR_PORT --pod-network-cidr=10.244.0.0/16 --node-name $mnode1 --upload-certs  --v=9

    ثم استخدم نفس قيم $LBR_HN:$LBR_PORT وCIDR في العنصر الثانوي كما هي في العنصر الأساسي. ينطبق الشيء نفسه إذا كنت تستخدم أدوات إنشاء مجموعات أخرى، مثل kOps وkubesparay.

  5. عند إضافة مستوى تحكم إضافي أو نقاط توصيل عامل، تأكد من استخدام نفس أسماء نقاط التوصيل في الأساسي والثانوي.
    kubeadm join $LBR_HN:$LBR_PORT --token $token --node-name $host --discovery-token-ca-cert-hash $token_ca  --control-plane --certificate-key $cp_ca
  6. بمجرد تكوين المجموعة الثانوية، يجب أن تظهر أسماء المضيف نفسها عند استرجاع معلومات نقطة التوصيل من kubernetes.

    يجب أن تكون المتغيرات $host المستخدمة في الثانوية لكل مستوى تحكم ونقاط توصيل عامل مماثلة للمتغيرات المستخدمة في الأساس.

    المجموعة الأساسية

    قم بتشغيل الأمر التالي على "أساسي" لتأكيد حالة نقطة توصيل العامل ومستوى التحكم، والدور، والعمر، والإصدار، وIP الداخلي، وIP الخارجي، وصورة نظام التشغيل، وإصدار المحرك الأساسي، ووقت تشغيل الحاوية:
    [opc@olk8-m1 ~]$ kubectl get nodes -o wide
    فيما يلي مثال على المخرجات.
    [opc@olk8-m1 ~]$ kubectl get nodes -o wide
    NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
    olk8-m1 Ready control-plane 578d v1.25.12 10.11.0.16 <none> Oracle Linux Server 7.9 4.14.35-1902.302.2.el7uek.x86_64 cri-o://1.26.1
    olk8-m2 Ready control-plane 578d v1.25.12 10.11.210.212 <none> Oracle Linux Server 7.9 5.4.17-2136.301.1.3.el7uek.x86_64 cri-o://1.26.1
    olk8-m3 Ready control-plane 2y238d v1.25.12 10.11.0.18 <none> Oracle Linux Server 7.9 4.14.35-2047.527.2.el7uek.x86_64 cri-o://1.26.1
    olk8-w1 Ready <none> 2y238d v1.25.12 10.11.0.20 <none> Oracle Linux Server 7.9 4.14.35-1902.302.2.el7uek.x86_64 cri-o://1.26.1
    olk8-w2 Ready <none> 2y238d v1.25.12 10.11.0.21 <none> Oracle Linux Server 7.9 4.14.35-1902.302.2.el7uek.x86_64 cri-o://1.26.1
    olk8-w3 Ready <none> 2y238d v1.25.12 10.11.0.22 <none> Oracle Linux Server 7.9 4.14.35-1902.302.2.el7uek.x86_64 cri-o://1.26.1
    [opc@olk8-m1 ~]$
    قم بتشغيل الأمر التالي على الخادم الأساسي لتحديد موقع مستوى التحكم في Kubernetes ونظام أسماء النطاقات (DNS) الأساسي.
    [opc@olk8-m1 ~]$ kubectl cluster-info

    المجموعة الثانوية

    قم بتشغيل الأمر التالي الثانوي لتأكيد حالة نقطة توصيل العامل ومستوى التحكم والدور والعمر والإصدار وIP الداخلي وIP الخارجي وصورة نظام التشغيل وإصدار المحرك الأساسي ووقت تشغيل الحاوية:
    [opc@k8dramsnewbastion ~]$ kubectl get node -o wide
    فيما يلي مثال على المخرجات.
    [opc@k8dramsnewbastion ~]$ kubectl get node -o wide
    NAME      STATUS   ROLES           AGE      VERSION    INTERNAL-IP    EXTERNAL-IP   OS-IMAGE                  KERNEL-VERSION                     CONTAINER-RUNTIME
    olk8-m1   Ready    control-plane   579d     v1.25.11   10.5.176.144   <none>        Oracle Linux Server 8.7   5.15.0-101.103.2.1.el8uek.x86_64   containerd://1.6.21
    olk8-m2   Ready    control-plane   579d     v1.25.11   10.5.176.167   <none>        Oracle Linux Server 8.7   5.15.0-101.103.2.1.el8uek.x86_64   containerd://1.6.21
    olk8-m3   Ready    control-plane   2y239d   v1.25.11   10.5.176.154   <none>        Oracle Linux Server 8.7   5.15.0-101.103.2.1.el8uek.x86_64   containerd://1.6.21
    olk8-w1   Ready    <none>          2y239d   v1.25.11   10.5.176.205   <none>        Oracle Linux Server 8.7   5.15.0-101.103.2.1.el8uek.x86_64   containerd://1.6.22
    olk8-w2   Ready    <none>          2y239d   v1.25.11   10.5.176.247   <none>        Oracle Linux Server 8.7   5.15.0-101.103.2.1.el8uek.x86_64   containerd://1.6.22
    olk8-w3   Ready    <none>          2y239d   v1.25.11   10.5.176.132   <none>        Oracle Linux Server 8.7   5.15.0-101.103.2.1.el8uek.x86_64   containerd://1.6.22
    [opc@k8dramsnewbastion ~]$ kubectl cluster-info
    Kubernetes control plane is running at https://k8lbr.paasmaaoracle.com:6443
    CoreDNS is running at https://k8lbr.paasmaaoracle.com:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
    
    To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
    [opc@k8dramsnewbastion ~]$
    قم بتشغيل الأمر التالي على المرحلة الثانوية لتحديد مكان تشغيل مستوى التحكم في Kubernetes ونظام أسماء النطاقات (DNS) الأساسي.
    [opc@k8dramsnewbastion ~]$ kubectl cluster-info

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

  7. قم بتثبيت etcdctl في الموقعين الأساسي والثانويين (نقاط التوصيل التي تقوم بتنفيذ اسكربتات النسخ الاحتياطي والاستعادة).
    ستستخدم اسكربتات النسخ الاحتياطي والاستعادة etcdctl للحصول على معلومات من المجموعة ولإنشاء لقطات etcd وتطبيقها. لتثبيت etcdctl يرجى الاطلاع على وثائق https://github.com/etcd-io/etcd/releases.
  8. تأكد من وجود جدار الحماية وقواعد الأمان المناسبة حتى يتم تمكين نقطة التوصيل التي تقوم بتنفيذ عمليات النسخ الاحتياطي والاستعادة لهذا النوع من الوصول.
    كما ستحتاج البرامج النصية إلى الوصول إلى المجموعة باستخدام kubectl والوصول إلى نقاط التوصيل المختلفة من خلال SSH وHTTP (لأوامر shell وعمليات etcdctl).

تكوين

اضبط ذلك لاستعادة القدرة على العمل بعد الكوارث.

تتضمن خطوات الاستعادة ما يلي:

  1. خذ نسخة احتياطية من etcd في موقع أساسي.
  2. شحن النسخة الاحتياطية إلى الموقع الثانوي.
  3. استعادة ذلك النسخ الاحتياطي من etcd في مجموعة ثانوية.

تنفيذ الخطوات التالية:

  1. تكوين نسخة احتياطية من etcd في مجموعة Kubernetes أساسية.
    1. Download ALL the of the scripts for etcd snapshot DR from the "Download Code" section of this document.

      ملاحظة:

      يجب أن تكون كل السكريبتات في نفس المسار لأن السكريبتات الرئيسية تستخدم سكريبتات مساعدة أخرى.
    2. احصل على advert_port من تكوين etcd لنقطة توصيل مستوى التحكم.
      [opc@olk8-m1 ~]$ sudo grep etcd.advertise-client-urls /etc/kubernetes/manifests/etcd.yaml | awk -F ":" '{print $NF}'
      
      2379
      ونفس الشيء بالنسبة إلى init_port:
      [opc@olk8-m1 ~]$  sudo grep initial-advertise-peer-urls  /etc/kubernetes/manifests/etcd.yaml  | awk -F ":" '{print $NF}'
      
      2380

      وهذه المنافذ هي المنافذ الافتراضية ويتم استخدامها بواسطة كافة وحدات التنفيذ الأساسية etcd الخاصة بمستوى التحكم. في المواقف النادرة التي يتم فيها تخصيص etcd لاستخدام منفذ init وadvertise مختلف في كل نقطة توصيل، يجب تخصيص الاسكربتات لمراعاة ذلك. يمكنك أيضًا تخصيص قيمة infra_pod_list في حالة استخدام برامج إضافية أخرى للشبكة أو في حالة ضرورة إعادة تشغيل وحدات التنفيذ الأساسية أو عمليات النشر ذات الصلة بعد الاستعادة في حالتك الخاصة. ومع ذلك، بشكل عام، يمكن تعيينها افتراضيًا على القيم المتوفرة في الملف.

    3. قم بتحرير الاسكربت maak8s.env وتحديث المتغيرات وفقًا للبيئة الخاصة بك.
      فيما يلي مثال على ملف maak8s.env:
      [opc@olk8-m1 ~]$ cat maak8s.env
      #sudo ready user to ssh into the control plane nodes
      export user=opc
      #ssh key for the ssh
      export ssh_key=/home/opc/KeyMAA.ppk
      #etcdctl executable's location
      export etcdctlhome=/scratch/etcdctl/
      #etcd advertise port
      export advert_port=2379
      #etcd init cluster port
      export init_port=2380
      #infrastructure pods that will be restarted  on restore
      export infra_pod_list="flannel proxy controller scheduler"
    4. قم بتشغيل الاسكربت maak8-etcd-backup.sh مع توفير الحقول التالية في هذا الترتيب كوسائط:
      • الدليل حيث سيتم تخزين النسخة الاحتياطية
      • وصف "LABEL/TEXT" النسخ الاحتياطي
      • موقع تكوين المجموعة لتشغيل عمليات kubectl
      على سبيل المثال:
      [opc@olk8-m1 ~]$  ./maak8-etcd-backup.sh  /backup-volumes/ "ETCD Snapshot after first configuration " /home/opc/.kubenew/config

    ينفذ الاسكربت المهام التالية:

    • تكوين لقطة etcd من نقطة التوصيل الرئيسية etcd
    • تكوين نسخة من التكوين الحالي لكل نقطة توصيل مستوى تحكم (تحركات وشهادات لكل نقطة توصيل مستوى تحكم)، بما في ذلك مفاتيح التوقيع للمجموعة
    • تسجيل قائمة نقاط التوصيل ووحدات التنفيذ الأساسية والخدمات وتكوين المجموعة
    • تخزين كافة المعلومات أعلاه في دليل مسمى بالتاريخ. إذا كان الدليل المحدد في وسيطة سطر الأوامر هو /backup-volume، فسيتم تخزين النسخة الاحتياطية ضمن /backup-volume/etcd_snapshot_date للنسخة الاحتياطية. على سبيل المثال، /backup-volume/etcd_snapshot_2022-08-29_15-56-59.
  2. نسخ الدليل بالكامل (/backup-volume/etcd_snapshot_date) إلى المجموعة الثانوية.
    1. استخدم أداة sftp أو قم بإنشاء رسم بياني باستخدام الدليل وقم بإرساله إلى الموقع الثانوي.
    2. قم بفك ضغط الملف أو فك ضغطه لجعله متوفرًا في النظام الثانوي، كما كان في النظام الأساسي.
    3. قم بتدوين تسمية التاريخ في النسخة الاحتياطية (في المثال أعلاه سيكون 2022-08-29_15-56-59).
    على سبيل المثال،
    [opc@olk8-m1 ~]$ scp -i KeyMAA.ppk -qr /backup-volume/etcd_snapshot_2022-08-29_15-56-59 154.21.39.171:/restore-volume
    [opc@olk8-m1 ~]$ ssh -i KeyMAA.ppk 154.21.39.171 "ls -lart /restore-volume"
    total 4
    drwxrwxrwt. 6 root root  252 Aug 30 15:11 ..
    drwxrwxr-x. 3 opc  opc    47 Aug 30 15:12 .
    drwxrwxr-x. 5 opc  opc  4096 Aug 30 15:12 etcd_snapshot_2022-08-29_15-56-59
  3. بمجرد إتاحة النسخ الاحتياطي في الموقع الثانوي، اتبع هذه الخطوات لاستعادةه:
    1. قم بتنزيل جميع اسكربتات etcd اللقطة DR من قسم "تعليمات التنزيل البرمجية" إلى نقطة توصيل المنطقة الثانوية التي ستقوم بتشغيل الاستعادة.
      تذكر أن نقطة التوصيل هذه يجب أن يكون لها أيضًا etcdctl مثبت وkubectl حق الوصول إلى المجموعة الثانوية.

      ملاحظة:

      نظرًا لأن السكريبتات الرئيسية تستخدم سكريبتات مساعدة أخرى، يجب أن يكون لديك كل السكريبتات في نفس المسار عند تنفيذ الخطوات المختلفة.
    2. قم بتحرير الاسكربت maak8s.env وتحديث المتغيرات وفقًا للبيئة الخاصة بك.
      يمكنك تغيير المستخدم ومفتاح ssh وموقع etcdctl، وفقًا لنقاط التوصيل الثانوية، ولكن يجب أن تكون المنافذ advert وinit هي نفسها المنافذ المستخدمة في الأساس.
      فيما يلي مثال على ملف maak8s.env:
      [opc@olk8-m1 ~]$ cat maak8s.env
      #sudo ready user to ssh into the control plane nodes
      export user=opc
      #ssh key for the ssh
      export ssh_key=/home/opc/KeyMAA.ppk
      #etcdctl executable's location
      export etcdctlhome=/scratch/etcdctl/
      #etcd advertise port
      export advert_port=2379
      #etcd init cluster port
      export init_port=2380
      #infrastructure pods that will be restarted  on restore
      export infra_pod_list="flannel proxy controller scheduler"
    3. قم بتشغيل الاستعادة باستخدام الاسكربت maak8-etcd-restore.sh. أدخل، كوسائط، الدليل الأولي حيث تم نسخ النسخة الاحتياطية من الأساس إلى البديل، والطابع الزمني للنسخة الاحتياطية، وموقع تكوين kubectl للمجموعة.
      على سبيل المثال،
      [opc@k8dramsnewbastion ~]$ ./maak8-etcd-restore.sh /restore-volume 2022-08-29_15-56-59 /home/opc/.kube/config

      يبحث الاسكربت في دليل /restore-volume عن دليل فرعي بالاسم etcd_snapshot_date. باستخدام المثال، سيتم استخدام /restore-volume/etcd_snapshot_2022-08-29_15-56-59.

      تنفذ الاستعادة المهام التالية:
      • فرض إيقاف مستوى التحكم في المرحلة الثانوية، إذا كان قيد التشغيل
      • استعادة اللقطة etcd في كل نقاط توصيل مستوى التحكم
      • استبدال مفاتيح توقيع المجموعة في كل نقاط توصيل مستوى التحكم
      • يبدء مستوى التحكم
      • إعادة تدوير جميع وحدات البنية الأساسية الأساسية (الوكيل، أداة الجدولة، وحدات التحكم) وعمليات النشر في المجموعة (لإحضارها إلى حالة متسقة)

      في نهاية الاستعادة، يعرض تقرير حالة وحدات التنفيذ الأساسية والنظام الفرعي etcd. على سبيل المثال،

      NAMESPACE      NAME                                         READY   STATUS              RESTARTS       AGE
      default        dnsutils                                     1/1     Running             0              27d
      default        nginx-deployment-566ff9bd67-6rl7f            1/1     Running             0              19s
      default        nginx-deployment-566ff9bd67-hnx69            1/1     Running             0              17s
      default        nginx-deployment-566ff9bd67-hvrwq            1/1     Running             0              15s
      default        test-pd                                      1/1     Running             0              26d
      kube-flannel   kube-flannel-ds-4f2fz                        1/1     Running             3 (22d ago)    35d
      kube-flannel   kube-flannel-ds-cvqzh                        1/1     Running             3 (22d ago)    35d
      kube-flannel   kube-flannel-ds-dmbhp                        1/1     Running             3 (22d ago)    35d
      kube-flannel   kube-flannel-ds-skhz2                        1/1     Running             3 (22d ago)    35d
      kube-flannel   kube-flannel-ds-zgkkp                        1/1     Running             4 (22d ago)    35d
      kube-flannel   kube-flannel-ds-zpbn7                        1/1     Running             3 (22d ago)    35d
      kube-system    coredns-8f994fbf8-6ghs4                      0/1     ContainerCreating   0              15s
      kube-system    coredns-8f994fbf8-d79h8                      1/1     Running             0              19s
      kube-system    coredns-8f994fbf8-wcknd                      1/1     Running             0              12s
      kube-system    coredns-8f994fbf8-zh8w4                      1/1     Running             0              19s
      kube-system    etcd-olk8-m1                                 1/1     Running             22 (89s ago)   44s
      kube-system    etcd-olk8-m2                                 1/1     Running             59 (88s ago)   44s
      kube-system    etcd-olk8-m3                                 1/1     Running             18 (88s ago)   26s
      kube-system    kube-apiserver-olk8-m1                       1/1     Running             26 (89s ago)   44s
      kube-system    kube-apiserver-olk8-m2                       1/1     Running             60 (88s ago)   42s
      kube-system    kube-apiserver-olk8-m3                       1/1     Running             18 (88s ago)   27s
      kube-system    kube-controller-manager-olk8-m1              1/1     Running             19 (89s ago)   10s
      kube-system    kube-controller-manager-olk8-m2              1/1     Running             18 (88s ago)   10s
      kube-system    kube-controller-manager-olk8-m3              1/1     Running             18 (88s ago)   10s
      kube-system    kube-flannel-ds-62dcq                        1/1     Running             0              19s
      kube-system    kube-flannel-ds-bh5w7                        1/1     Running             0              19s
      kube-system    kube-flannel-ds-cc2rk                        1/1     Running             0              19s
      kube-system    kube-flannel-ds-p8kdk                        1/1     Running             0              19s
      kube-system    kube-flannel-ds-vj8r8                        1/1     Running             0              18s
      kube-system    kube-flannel-ds-wz2kv                        1/1     Running             0              18s
      kube-system    kube-proxy-28d98                             1/1     Running             0              14s
      kube-system    kube-proxy-2gb99                             1/1     Running             0              15s
      kube-system    kube-proxy-4dfjd                             1/1     Running             0              14s
      kube-system    kube-proxy-72l5q                             1/1     Running             0              14s
      kube-system    kube-proxy-s8zbs                             1/1     Running             0              14s
      kube-system    kube-proxy-tmqnm                             1/1     Running             0              14s
      kube-system    kube-scheduler-olk8-m1                       0/1     Pending             0              5s
      kube-system    kube-scheduler-olk8-m2                       1/1     Running             18 (88s ago)   5s
      kube-system    kube-scheduler-olk8-m3                       1/1     Running             18 (88s ago)   5s
      newopns        weblogic-operator-5d74f56886-mtjp6           0/1     Terminating         0              26d
      newopns        weblogic-operator-webhook-768d9f6f79-tdt8b   0/1     Terminating         0              26d
      soans          soaedgdomain-adminserver                     0/1     Running             0              22d
      soans          soaedgdomain-soa-server1                     0/1     Running             0              22d
      soans          soaedgdomain-soa-server2                     0/1     Running             0              22d
      +--------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
      |   ENDPOINT   |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
      +--------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
      | olk8-m1:2379 | 63c63522f0be24a6 |   3.5.6 |  146 MB |      true |      false |         2 |       1195 |               1195 |        |
      | olk8-m2:2379 | 697d3746d6f10842 |   3.5.6 |  146 MB |     false |      false |         2 |       1195 |               1195 |        |
      | olk8-m3:2379 |  7a23c67093a3029 |   3.5.6 |  146 MB |     false |      false |         2 |       1195 |               1195 |        |
      +--------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
      +------------------+---------+---------+----------------------+---------------------------+------------+
      |        ID        | STATUS  |  NAME   |      PEER ADDRS      |       CLIENT ADDRS        | IS LEARNER |
      +------------------+---------+---------+----------------------+---------------------------+------------+
      |  7a23c67093a3029 | started | olk8-m3 | https://olk8-m3:2380 | https://10.5.176.154:2379 |      false |
      | 63c63522f0be24a6 | started | olk8-m1 | https://olk8-m1:2380 | https://10.5.176.144:2379 |      false |
      | 697d3746d6f10842 | started | olk8-m2 | https://olk8-m2:2380 | https://10.5.176.167:2379 |      false |
      +------------------+---------+---------+----------------------+---------------------------+------------+
      Restore completed at 2023-08-30_15-18-22
      [opc@k8dramsnewbastion ~]$

تحقق

بعد تشغيل اسكربت maak8DR-apply.sh، تحقق من استنساخ جميع البيانات الاصطناعية الموجودة في المجموعة الأساسية إلى المجموعة الثانوية. انظر إلى المجموعة الثانوية وتحقق من أن وحدات التنفيذ الأساسية في الموقع الثانوي قيد التشغيل بدون أخطاء.
  1. تحقق من حالة العنصر الثانوي حتى تتطابق وحدات التنفيذ الأساسية المطلوبة مع الحالة في العنصر الأساسي.
    وبشكل افتراضي، تبدأ وحدات التنفيذ الأساسية وعمليات النشر في المنطقة الثانوية. في نهاية الاستعادة، تظهر حالة المجموعة الثانوية. قد تستغرق بعض وحدات التنفيذ الأساسية وقتًا إضافيًا للوصول إلى حالة التشغيل.
  2. راجع restore تسجيل الدخول الثانوي لمعرفة الأخطاء الممكنة.
    يتم الإبلاغ عن موقع السجل في بداية الاستعادة. وبشكل افتراضي، يتم تكوين السجل ضمن الدليل حيث كانت النسخة الاحتياطية نفسها موجودة، في /backup_dir/etcd_snapshot_backup-date/restore_attempted_restore-date/restore.log. يتم تكوين سجل آخر خاص بعملية استعادة اللقطة etcd /backup_dir/etcd_snapshot_backup-date/restore_attempted_restore-date/etcd_op.log.
  3. (اختياري) تراجع.

    بالإضافة إلى سجلات الاستعادة، يتم إنشاء نسخة احتياطية من تكوين /etc/kubernetes السابق لكل نقطة توصيل من نقاط توصيل مستويات التحكم ضمن الدليل /backup_dir/etcd_snapshot_backup-date/restore_attempted_restore-date/current_etc_kubernetes. وبالمثل، يتم نسخ قواعد بيانات etcd في كل نقطة توصيل قبل الاستعادة إلى /backup_dir/etcd_snapshot_backup-date/restore_attempted_restore-date/node_name. يمكنك استخدام هذه الإجراءات للعودة إلى تكوين المجموعة الموجود قبل تنفيذ الاستعادة.