نحوه تهيه نسخه پشتيبان و بازيابي يك خوشه Kubernetes در vpsgol با استفاده از Velero

۸ بازديد

مقدمه
Velero يك ابزار پشتيبان مناسب براي خوشه هاي Kubernetes است كه موارد Kubernetes را براي ذخيره سازي مورد به مورد، فشرده سازي و پشتيبان گيري مي كند. همچنين با استفاده از ويژگي هاي اسنپ شات ذخيره سازي واحد ارائه دهنده cloud ، عكس هايي از واليوم هاي مداوم خوشه شما مي گيرد و مي تواند موارد و واليوم هاي ماندگار خوشه را به حالت قبلي بازگرداند.
افزونه vpsgol Velero به شما امكان مي دهد تا از حافظه بلوك vpsgol استفاده كنيد تا از واليوم هاي ماندگار اسنپ شات بگيريد و فضايي به شما ميدهد تا از موارد Kubernetes بك آپ تهيه كنيد. در هنگام اجراي يك خوشه Kubernetes در vpsgol ، اين به شما امكان مي دهد تا به سرعت از وضعيت خوشه خود نسخه پشتيبان تهيه كرده و در صورت بروز مشكل بازيابي كنيد.
در اين آموزش ابزار خط فرمان velero را روي يك دستگاه محلي تنظيم و پيكربندي مي كنيم و مؤلفه سرور مجازي را در خوشه Kubernetes خود مستقر مي كنيم. سپس يك نمونه از برنامه Nginx را استفاده مي كنيم كه از يك واليوم پايدار براي ورود به سيستم استفاده مي كند و سپس يك سناريوي بازيابي مشكل را شبيه سازي مي كند.
پيش نيازها
قبل از شروع اين آموزش ، موارد زير را بايد در اختيار داشته باشيد:
در رايانه محلي خود:
⦁ ابزار خط فرمان kubectl ، پيكربندي شده بايد تا به خوشه شما متصل شود. مي توانيد اطلاعات بيشتري در مورد نصب و پيكربندي ر در مطالب Kubernetes بخوانيد.
⦁ ابزار خط فرمان gitكه مي توانيد نحوه نصب git را در شروع با Git بياموزيد.
در حساب vpsgol خود:
⦁ يك خوشه vpsgol Kubernetes يا يك خوشه Kubernetes (نسخه 1.7.5 يا بالاتر) در دراپلت هاي vpsgol.
⦁ سرور DNS كه در داخل خوشه شما قرار دارد. اگر از vpsgol Kubernetes استفاده مي كنيد ، اين به طور پيش فرض اجرا مي شود. براي كسب اطلاعات بيشتر در مورد پيكربندي يك سرويس DNS Kubernetes ، از ⦁ Customizing DNS Service در مطالب رسمي Kuberentes كمك بگيريد.
⦁ فضاي vpsgol كه موارد پشتيبان گرفته شده Kubernetes شما را ذخيره مي كند. براي يادگيري نحوه ايجاد يك فضا ، از  ⦁ the Spaces product documentation كمك بگيريد.
⦁ يك جفت كليد دسترسي براي vpsgol Space. براي يادگيري نحوه ايجاد مجموعه اي از كليدهاي دستيابي ، از ⦁ How to Manage Administrative Access to Spaces كمك بگيريد.
⦁ يك نشانه دسترسي شخصي براي استفاده با vpsgol API. براي يادگيري نحوه ايجاد يك نشانه دسترسي شخصي ، از ⦁ How to Manage Administrative Access to Spaces كمك بگيريد. اطمينان حاصل كنيد كه توكن ايجاد شده يا استفاده شده از مجوزهاي خواندن / نوشتن و يا اسنپ شات استفاده نميكند.
پس از تنظيم همه اين موارد ، آماده شروع كار با اين راهنما هستيد.

مرحله 1 – نصب مشتري Velero
ابزار پشتيبان گيري Velero شامل يك مشتري نصب شده بر روي رايانه محلي شما و يك سرور مجازي است كه در خوشه Kubernetes شما اجرا مي شود. براي شروع ، مشتري محلي Velero را نصب خواهيم كرد.
در مرورگر وب خود ، به صفحه منتشر شده repo Velero GitHub برويد ، نسخه مربوط به سيستم عامل و معماري سيستم خود را پيدا كنيد و آدرس پيوند را كپي كنيد. براي اهداف اين راهنما ، ما از يك سرور مجازي اوبونتو 18.04 در يك پردازنده x86-64 (يا AMD64) به عنوان دستگاه محلي خود و نسخه Velero v1.2.0 استفاده خواهيم كرد.
توجه: براي دنبال كردن اين راهنما ، بايد v1.2.0 از مشتري Velero را دانلود و نصب كنيد.
سپس ، از خط فرمان روي رايانه محلي خود ، به دايركتوري موقت / tmp برويد و cd را در آن قرار دهيد:
$cd / tmp
از wget و پيوندي كه قبلاً كپي كرده ايد براي دانلود تاربال نسخه استفاده كنيد:
$wget https: // link_copied_from_release_page
پس از اتمام دانلود ، تاربال را با استفاده از tar اكستركت كنيد (توجه داشته باشيد كه نام فايل بسته به نسخه منتشر شده و سيستم عامل شما ممكن است متفاوت باشد):
$tar -xvzf velero-v1.2.0-linux-amd64.tar.gz
ديركتوري / tmp اكنون بايد ديركتوري اكستركت شده velero-v1.2.0-linux-amd64 و همچنين تاربلي كه اخيراً دانلود كرده ايد ، را شامل شود.
تأييد كنيد كه مي توانيد مشتري velero را با اجراي باينري راه اندازي كنيد:
$./velero-v1.2.0-linux-amd64/velero help
شما بايد خروجي راهنمايي زير را مشاهده كنيد:
Output
Velero is a tool for managing disaster recovery, specifically for Kubernetes
cluster resources. It provides a simple, configurable, and operationally robust
way to back up your application state and associated data.

If you’re familiar with kubectl, Velero supports a similar model, allowing you to
execute commands such as ‘velero get backup’ and ‘velero create schedule’. The same
operations can also be performed as ‘velero backup get’ and ‘velero schedule create’.

Usage:
velero [command]

Available Commands:
backup Work with backups
backup-location Work with backup storage locations
bug Report a Velero bug
client Velero client related commands
completion Output shell completion code for the specified shell (bash or zsh)
create Create velero resources
delete Delete velero resources
describe Describe velero resources
get Get velero resources
help Help about any command
install Install Velero
plugin Work with plugins
restic Work with restic
restore Work with restores
schedule Work with schedules
snapshot-location Work with snapshot locations
version Print the velero version and associated image
. . .

در اين مرحله بايد velero  قابل اجرا را از ديركتوري موقت tmp  خارج كنيد و آن را به PATH اضافه كنيد. براي افزودن آن به PATH روي يك سيستم اوبونتو كافيست آن را در /usr/local/bin كپي كنيد:
$sudo mv velero-v1.2.0-linux-amd64/velero /usr/local/bin/velero
مرحله 2 – پيكربندي اطلاعات سري
قبل از تنظيم مؤلفه سرور مجازي Velero ، بايد كليدهاي vpsgol Spaces و نشانه هاي API خود را آماده كنيد. مجدداً با استفاده از دستور cd به ديركتوري موقت / tmp برويد:
$ cd / tmp
اكنون يك نسخه از افزونه Velero را براي vpsgol دانلود خواهيم كرد. به صفحه انتشار نسخه هاي Github افزونه برويد و پيوندهايي كه به.tar.gz ختم ميشوند را كپي كنيد.
از wget و پيوندي كه قبلاً كپي كرده ايد براي دانلود تاربال نسخه استفاده كنيد:
$wget https: // link_copied_from_release_page
پس از اتمام دانلود ، تاربل را با استفاده از tar اكستركت كنيد (دوباره توجه داشته باشيد كه نام فايل بسته به نسخه منتشر شده ممكن است متفاوت باشد):
$tar -xvzf v1.0.0.tar.gz
ديركتوري / tmp اكنون بايد پوشه velero-plugin-1.0.0 اكستركت شده و همچنين تاربل كه اخيراً دانلود كرده ايد ، را شامل شود.
سپس cd را در دايركتوري velero-plugin-1.0.0 وارد ميكنيم:
$ cd velero-plugin-1.0.0
اكنون مي توانيم كليدهاي دسترسي را براي vpsgol Space و نشانه API براي استفاده به عنوان Kubernetes Secret ذخيره كنيم. ابتدا با استفاده از ويرايشگر مورد علاقه خود ، فايل examples/cloud-credentials را باز كنيد.
⦁ $ nano examples/cloud-credential
پرونده به شرح زير خواهد بود:
/tmp/velero-plugin-1.0.0/examples/cloud-credentials
[default]
aws_access_key_id=
aws_secret_access_key=

براي استفاده از كليدهاي vpsgol Spaces ، “متغيرهاي” و را ويرايش كنيد. حتماً كاراكترهاي < و > را حذف كنيد.
مرحله بعدي ويرايش فايل 01-velero-secret.patch.yaml است به گونه اي كه شامل نشانه API vpsgol شما باشد. پرونده را در ويرايشگر مورد علاقه خود باز كنيد:

⦁ $ nano examples/01-velero-secret.patch.yaml

مي بايست شبيه به اين باشه:

apiVersion: v1
kind: Secret
stringData:
vpsgol_token:
type: Opaque

براي استفاده از ، كل مكان نگهدار را تغيير دهيد. خط بايد چيزي شبيه به vpsgol_token: 18a0d730c0e0…. باشد: باز هم ، حتماً كاراكترهاي < و > را حذف كنيد.
مرحله 3 – نصب سرور مجازي Velero
نصب Velero شامل تعدادي از موارد Kubernetes است كه همگي براي ايجاد ، برنامه ريزي و مديريت پشتيبان گيري با هم كار مي كنند. velero قابل اجرا كه به تازگي دانلود كرده ايد مي تواند اين موارد را براي شما توليد و نصب كند. دستور نصب velero مراحل آماده سازي اوليه را انجام مي دهد تا براي خوشه شما پشتيبان تهيه شود. به طور خاص:
⦁ يك نام فضا velero ايجاد ميكند.
⦁ حساب سرويس velero را اضافه ميكند.
⦁ قوانين كنترل دسترسي مبتني بر نقش (RBAC) را براي اعطاي مجوز به حساب سرويس velero پيكربندي ميكند.
⦁ تعريف منابع اختصاصي (CRD) را براي منابع خاص Velero نصب ميكند: پشتيبان گيري ، برنامه ريزي، بازيابي ، پيكربندي.
⦁ پلاگين هاي Velero را براي مديريت اسنپ شات و فضاي ذخيره سازي ثبت ميكند.
دستور velero install را با چند گزينه تنظيمات غير پيش فرض اجرا خواهيم كرد. به طور خاص ، شما نياز به ويرايش هر يك از تنظيمات زير در فراخواني واقعي فرمان براي مطابقت با پيكربندي Spaces داريد:
– backup velero-backup: مقدار velero-backups را تغيير دهيد تا با نام فضاي vpsgol Space شما مطابقت داشته باشد. به عنوان مثال اگر فضاي خود را ” backup-bucket ” ناميديد ، اين گزينه به اين شكل است: –bucket backup-bucket
–backup-location-config s3Url=https://nyc3.vpsgolspaces.com,region=nyc3 : URL و منطقه را تغيير دهيد تا مطابق با تنظيمات فضاي شما باشد. به طور خاص ، هر دو بخش nyc3 را ويرايش كنيد تا با منطقه اي كه فضاي شما در آن ميزبان است مطابقت داشته باشد. به عنوان مثال ، اگر فضاي شما در منطقه fra1 ميزباني شود ، اين خط به اين صورت است: –backup-location-config s3Url=https://fra1.vpsgolspaces.com,region=fra1 region=fra1.
شناسه هاي منطقه عبارتند از: nyc3 ، sfo2 ، sgp1 و fra1.
پس از آماده شدن با تنظيمات مناسب مكان bucket و backup ، وقت آن است كه Velero را نصب كنيد. دستور زير را اجرا كنيد ، و در صورت لزوم مقادير خود را جايگزين كنيد:

$velero install
$  –provider velero.io/aws
$ –backup velero backup
$ –plugins velero/velero-plugin-for-aws:v1.0.0,vpsgol/velero-plugin:v1.0.0
$ –backup-location-config s3Url=https://nyc3.vpsgolspaces.com,region=nyc3
$ –use-volume-snapshots=false
$ –secret-file=./examples/cloud-credentials
بايد خروجي زير را مشاهده كنيد:
Output
CustomResourceDefinition/backups.velero.io: attempting to create resource
CustomResourceDefinition/backups.velero.io: created
CustomResourceDefinition/backupstoragelocations.velero.io: attempting to create resource
CustomResourceDefinition/backupstoragelocations.velero.io: created
CustomResourceDefinition/deletebackuprequests.velero.io: attempting to create resource
CustomResourceDefinition/deletebackuprequests.velero.io: created
CustomResourceDefinition/downloadrequests.velero.io: attempting to create resource
CustomResourceDefinition/downloadrequests.velero.io: created
CustomResourceDefinition/podvolumebackups.velero.io: attempting to create resource
CustomResourceDefinition/podvolumebackups.velero.io: created
CustomResourceDefinition/podvolumerestores.velero.io: attempting to create resource
CustomResourceDefinition/podvolumerestores.velero.io: created
CustomResourceDefinition/resticrepositories.velero.io: attempting to create resource
CustomResourceDefinition/resticrepositories.velero.io: created
CustomResourceDefinition/restores.velero.io: attempting to create resource
CustomResourceDefinition/restores.velero.io: created
CustomResourceDefinition/schedules.velero.io: attempting to create resource
CustomResourceDefinition/schedules.velero.io: created
CustomResourceDefinition/serverstatusrequests.velero.io: attempting to create resource
CustomResourceDefinition/serverstatusrequests.velero.io: created
CustomResourceDefinition/volumesnapshotlocations.velero.io: attempting to create resource
CustomResourceDefinition/volumesnapshotlocations.velero.io: created
Waiting for resources to be ready in cluster…
Namespace/velero: attempting to create resource
Namespace/velero: created
ClusterRoleBinding/velero: attempting to create resource
ClusterRoleBinding/velero: created
ServiceAccount/velero: attempting to create resource
ServiceAccount/velero: created
Secret/cloud-credentials: attempting to create resource
Secret/cloud-credentials: created
BackupStorageLocation/default: attempting to create resource
BackupStorageLocation/default: created
Deployment/velero: attempting to create resource
Deployment/velero: created
Velero is installed! ⛵ Use ‘kubectl logs deployment/velero -n velero’ to view the status.

شما ميتوانيد به كارگيري ورودي ها با استفاده از دستور kubect از خروجي را مشاهده كنيد. پس از آماده سازي به كارگيري، ميتوانيد به مرحله بعدي برويد كه پيكربندي سرور مجازي است. به كارگيري موفق شبيه زير خواهد بود (با يك تفاوت ستون AGE):
$ kubectl get deployment/velero –namespace velero
Output
NAME READY UP-TO-DATE AVAILABLE AGE
velero 1/1 1 1 2m

دراين نقطه مولفه سرور مجازي Velero  را در خوشه Kubernetes  به عنوان يك صف آرايي نصب كرده ايد. همچنين كليدهاي فضا را با Velero  و با استفاده از Kubernetes Secret ثبت نموده ايد.

توجه: مي توانيد kubeconfig را كه ابزار خط فرمان velero بايد با فلگ –kubeconfig استفاده كند ، مشخص كنيد. اگر از اين فلگ استفاده نمي كنيد ، velero متغير محيط KUBECONFIG را بررسي كرده و سپس به پيش فرض kubectl  يعني (~/.kube/config) برميگردد.

مرحله 4 – پيكربندي اسنپ شات
هنگامي كه سرور مجازي Velero را نصب كرديم ، گزينه –use-volume-snapshots = false بخشي از دستور بود. از آنجا كه مي خواهيم اسنپ شات از دستگاه هاي ذخيره سازي بلوك موجود در خوشه Kubernetes بگيريم ، بايد به Velero بگوييم كه از پلاگين صحيح براي ذخيره سازي بلوك vpsgol استفاده كند.
دستور زير را اجرا كنيد تا افزونه فعال شود و آن را به عنوان ارائه دهنده اسنپ شات پيش فرض ثبت كنيد:

$velero snapshot-location create default –provider vpsgol.com/velero
خروجي زير را مشاهده خواهيد كرد:
Snapshot volume location “default” configured successfully.

مرحله 5 – اضافه كردن يك نشانه API
در مرحله قبل ، ذخيره بلوك و موارد دخيره را در سرور مجازي Velero ايجاد كرديم. ما افزونه vpsgol / velero: v1.0.0 را با سرور مجازي ثبت كرده ايم و كليدهاي مخفي Spaces را در خوشه نصب كرده ايم.
مرحله آخر افزودن اطلاعات سري cloud-credentials است كه قبلاً براي استفاده از نشانه vpsgol API ما ايجاد كرده ايم. بدون اين نشانه ، افزونه Snapshot قادر به تأييد اعتبار با API vpsgol نخواهد بود.
ما مي توانيم از دستور edit kubectl براي تغيير موضوع آرايش Velero با استفاده از نشانه API استفاده كنيم. با اين حال ، ويرايش موضوعات پيچيده YAML با دست مي تواند خسته كننده و پر خطا باشد. در عوض ، از دستور patch kubectl استفاده خواهيم كرد زيرا Kubernetes از patch موضوعات پشتيباني مي كند. بياييد نگاهي گذرا به مطالب فايل هاي پچ مورد نظر خود بياندازيم.
اولين فايل افزوده examples/01-velero-secret.patch.yaml است كه قبلاً ويرايش كرده ايد. اين براي افزودن نشانه API شما به اطلاعات سري secrets/cloud-credentials طراحي شده است كه از قبل حاوي كليدهاي Spaces شما بود. فايل را cat كنيد:
$cat examples/01-velero-secret.patch.yaml
بايد مانند اين باشد (با نشان شما به جاي نگهدارنده  placeholder):
examples/01-velero-secret.patch.yaml
. . .

apiVersion: v1
kind: Secret
stringData:
vpsgol_token:
type: Opaque

حال بياييد به فايل پچ Deployment نگاه كنيم:
$cat examples/02-velero-deployment.patch.yaml
بايد YAML زير را ببينيد:
examples/02-velero-deployment.patch.yaml
. . .

apiVersion: v1
kind: Deployment
spec:
template:
spec:
containers:
– args:
– server
command:
– /velero
env:
– name: vpsgol_TOKEN
valueFrom:
secretKeyRef:
key: vpsgol_token
name: cloud-credentials
name: velero

اين فايل نشان مي دهد كه ما در حال وصله كردن Deployment’s Pod spec هستيم كه به آن velero گفته مي شود. از آنجا كه اين يك پچ است ، ديگر نيازي به مشخص كردن كل خصوصيات يا ابرداده هاي Kubernetes نيست. در اين حالت ، پياده سازي Velero قبلاً با استفاده از cloud-credentials پيكربندي شده است زيرا دستور نصب velero آن را براي ما ايجاد كرده است. بنابراين ، تمام آنچه كه بايد اين پچ انجام دهد ثبت نام vpsgol_token به عنوان متغير محيط با Velero Pod است كه قبلاً مستقر شده است.
بياييد اولين پچ مخفي را با استفاده از دستور patch kubectl اعمال كنيم:

$kubectl patch secret/cloud-credentials -p “$(cat examples/01-velero-secret.patch.yaml)” –namespace velero
بايد خروجي زير را مشاهده كنيد:
secret/cloud-credentials patched

سرانجام ما Deployment را پچ مي كنيم. دستور زير را اجرا كنيد:
$kubectl patch deployment/velero -p “$(cat examples/02-velero-deployment.patch.yaml”) –namespace velero
در صورت موفقيت آميز بودن، خروجي زير را مشاهده خواهيد كرد:
deployment.apps/velero patched

بياييد تأييد كنيم كه آرايش پچ شده با استفاده از kubectl get در فضايvelero كار مي كند:
$kubectl get deployment/velero –namespace velero
بايد خروجي زير را مشاهده كنيد:
NAME READY UP-TO-DATE AVAILABLE AGE
velero 1/1 1 1 12s

در اين مرحله Velero در حال اجرا و كاملاً پيكربندي شده است ، و آماده تهيه نسخه پشتيبان و بازيابي موارد خوشه اي Kubernetes و واليوم هاي پايدار در vpsgol Spaces و Block Storage است.
در بخش بعدي ، ما يك آزمايش سريع انجام خواهيم داد تا اطمينان حاصل كنيم كه عملكرد نسخه پشتيبان و بازيابي همانطور كه انتظار مي رود ، كار مي كند.
مرحله ششم – تست تهيه نسخه پشتيبان و بازيابي فرآيند
اكنون كه Velero را با موفقيت نصب و پيكربندي كرده ايم ، مي توانيم با استفاده از واليوم و سرويس مداوم ، آزمايش Nginx Deployment را ايجاد كنيم. پس از اجراي Deployment ، از پشتيبان گيري استفاده مي كنيم و فرآيند را بازيابي مي كنيم تا اطمينان حاصل شود كه Velero پيكربندي شده و به درستي كار مي كند.
اطمينان حاصل كنيد كه هنوز در دايركتوري /tmp/velero-plugin-1.0.0 كار مي كنيد. دايركتوري examples  حاوي نمونه Nginx به نام nginx-shembull.yaml است.
اين فايل را با استفاده از ويرايشگر مورد نظر خود باز كنيد:
$nano examples/nginx-example.yaml
متن زير را بايد مشاهده كنيد:
Output
. . .

apiVersion: v1
kind: Namespace
metadata:
name: nginx-example
labels:
app: nginx


kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nginx-logs
namespace: nginx-example
labels:
app: nginx
spec:
storageClassName: do-block-storage
accessModes:
– ReadWriteOnce
resources:
requests:
storage: 5Gi


apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
namespace: nginx-example
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
volumes:
– name: nginx-logs
persistentVolumeClaim:
claimName: nginx-logs
containers:
– image: nginx:stable
name: nginx
ports:
– containerPort: 80
volumeMounts:
– mountPath: “/var/log/nginx”
name: nginx-logs
readOnly: false


apiVersion: v1
kind: Service
metadata:
labels:
app: nginx
name: nginx-svc
namespace: nginx-example
spec:
ports:
– port: 80
targetPort: 80
selector:
app: nginx
type: LoadBalancer

در اين فايل فضاهايي براي موارد زير مشاهده مي كنيم:
⦁ يك نام فضاي Nginx به نام nginx-example
⦁ استقرار Nginx متشكل از يك نمونه كپي شده از تصوير كانتينر nginx:stable
⦁ ادعاي واليوم مداوم 5Gi (به نام log-nginx) با استفاده از do-block-storage در StorageClass
⦁ يك سرويس LoadBalancer كه پورت 80 را در معرض ديد قرار مي دهد
با استفاده از kubectl apply موارد را ايجاد كنيد:
$kubectl apply -f examples/nginx-example.yaml
بايد خروجي زير را مشاهده كنيد:
Output
namespace/nginx-example created
persistentvolumeclaim/nginx-logs created
deployment.apps/nginx-deploy created
service/nginx-svc created

بررسي كنيد كه استقرار موفق باشد:
$kubectl get deployments –namespace=nginx-example
بايد براي سرويس my-nginx هم CLUSTER-IP داخلي و هم EXTERNAL-IP را مشاهده كنيد:
Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-svc LoadBalancer 10.245.147.61 159.203.48.191 80:30232/TCP 3m1s

به EXTERNAL-IP توجه داشته باشيد و آن را به سمت استفاده از مرورگرتان هدايت كنيد.
هنگامي كه در دسترس قرار گرفت به 1 رسيد ، IP خارجي تعادل بار Nginx را با استفاده از kubectl دريافت كنيد:

شما بايد صفحه خوشامدگويي NGINX زير را ببينيد:

اين نشان مي دهد كه Nginx Deployme شما و خدمات به روز و در حال اجرا هستند.
قبل از شبيه سازي سناريوي فاجعه ما ، ابتدا ورود به دسترسي Nginx (كه در يك حجم مداوم متصل به Nginx Pod ذخيره شده) را بررسي كنيد:
$kubectl get pods –namespace nginx-example
Output
NAME READY STATUS RESTARTS AGE
nginx-deploy-694c85cdc8-vknsk 1/1 Running 0 4m14s

اكنون ، داخل كانتينر در حال اجرا Nginx وارد شويد تا به يك پوسته در داخل آن برسيد:
$kubectl exec -it nginx-deploy-694c85cdc8-vknsk –namespace nginx-example — /bin/bash

به محض ورود به كانتينر Nginx برويد ، ورودهاي دسترسي Nginx را cat كنيد:

# cat /var/log/nginx/access.log
بايد برخي از ورودي هاي Nginx را مشاهده كنيد:
Output
10.244.0.119 – – [03/Jan/2020:04:43:04 +0000] “GET / HTTP/1.1” 200 612 “-” “Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0” “-”
10.244.0.119 – – [03/Jan/2020:04:43:04 +0000] “GET /favicon.ico HTTP/1.1” 404 153 “-” “Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0” “-”

اين موارد را يادداشت كنيد (به ويژه زمانها) ، زيرا ما از آنها براي تأييد موفقيت در روش بازيابي استفاده خواهيم كرد. از pod خارج شويد:
$ exit
اكنون مي توانيم از روش پشتيبان گيري براي كپي كردن همه موارد nginx Kubernetes در Spaces استفاده كنيم و يك اسنپ شات از واليوم مداوم كه هنگام استقرار Nginx ايجاد كرديم را بگيريد.
$ velero backup create nginx-backup –selector app=nginx
برنامه –selector = nginx به سرور مجازي Velero دستور مي دهد تا فقط از موضوعات Kubernetes با انتخابگر ليبل app=nginx پشتيبان تهيه كند.
بايد خروجي زير را مشاهده كنيد:
Output
Backup request “nginx-backup” submitted successfully.
Run `velero backup describe nginx-backup` or `velero backup logs nginx-backup` for more details.

اجراي velero backup describe nginx-backup –details بايد خروجي زير را بعد از يك تأخير كوتاه ارائه دهد:
Output
Name: nginx-backup
Namespace: velero
Labels: velero.io/backup=nginx-backup
velero.io/pv=pvc-6b7f63d7-752b-4537-9bb0-003bed9129ca
velero.io/storage-location=default
Annotations:

Phase: Completed

Namespaces:
Included: *
Excluded:

Resources:
Included: *
Excluded:
Cluster-scoped: auto

Label selector: app=nginx

Storage Location: default

Snapshot PVs: auto

TTL: 720h0m0s

Hooks:

Backup Format Version: 1

Started: 2020-01-02 23:45:30 -0500 EST
Completed: 2020-01-02 23:45:34 -0500 EST

Expiration: 2020-02-01 23:45:30 -0500 EST

Resource List:
apps/v1/Deployment:
– nginx-example/nginx-deploy
apps/v1/ReplicaSet:
– nginx-example/nginx-deploy-694c85cdc8
v1/Endpoints:
– nginx-example/nginx-svc
v1/Namespace:
– nginx-example
v1/PersistentVolume:
– pvc-6b7f63d7-752b-4537-9bb0-003bed9129ca
v1/PersistentVolumeClaim:
– nginx-example/nginx-logs
v1/Pod:
– nginx-example/nginx-deploy-694c85cdc8-vknsk
v1/Service:
– nginx-example/nginx-svc

Persistent Volumes:
pvc-6b7f63d7-752b-4537-9bb0-003bed9129ca:
Snapshot ID: dfe866cc-2de3-11ea-9ec0-0a58ac14e075
Type: ext4
Availability Zone:
IOPS:

اين خروجي نشان مي دهد كه پشتيبان گيري nginx-backup با موفقيت انجام شد. ليست منابع هر يك از موضوعات Kubernetes را كه در نسخه پشتيبان تهيه شده است نشان مي دهد. بخش آخر نشان مي دهد كه از PersistentVolume نيز با استفاده از اسنپ شات فايل سيستم نسخه پشتيبان تهيه شده است.
براي تأييد از داخل كنترل پنل vpsgol Cloud ، به فضاي حاوي فايل هاي پشتيبان Kubernetes خود برويد.
شما بايد يك دايركتوري جديد با نام nginx-backup را ببينيد كه حاوي فايل هاي پشتيبان Velero است.
با استفاده از نوار ناوبري در سمت چپ ، به قسمت تصاوير و سپس اسنپ شات ها برويد. در اسنپ شات ها ، به Volume برويد. شما بايد Snapshot مربوط به PVC ذكر شده در خروجي فوق را مشاهده كنيد.
اكنون مي توانيم فرآيند بازيابي را آزمايش كنيم.
بياييد ابتدا نام فضاي nginx-example را حذف كنيم. با اين كار همه چيز در نام فضا، از جمله Load Balancer و واليوم مداوم حذف مي شود:
$kubectl delete namespace nginx-example
تأييد كنيد كه ديگر نمي توانيد به Nginx در انتهاي Load Balancer دسترسي پيدا كنيد ، و اين كه به كارگيري برنامه nginx-example ديگر در حال اجرا نيست:
$kubectl get deployments –namespace=nginx-example
Output
No resources found in nginx-example namespace.

اكنون مي توانيم دوباره با استفاده از مشتري velero ، فرآيند بازيابي را انجام دهيم:
$ velero restore create –from-backup nginx-backup
در اينجا ما از create  براي ايجاد مورد Velero Restore از موضوع nginx-backup استفاده مي كنيم.
بايد خروجي زير را مشاهده كنيد:
Output
$Restore request “nginx-backup-20200102235032” submitted successfully.
$Run `velero restore describe nginx-backup-20200102235032` or `velero restore logs nginx-backup-20200102235032` for more details.
وضعيت اجراي بازيابي شده را بررسي كنيد:
$kubectl get deployments –namespace=nginx-example
Output
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deploy 1/1 1 1 58s
ايجاد واليوم مداوم را بررسي كنيد
$kubectl get pvc –namespace=nginx-example
Output
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
nginx-logs Bound pvc-6b7f63d7-752b-4537-9bb0-003bed9129ca 5Gi RWO do-block-storage 75s

بازيابي همچنين LoadBalancer ايجاد كرد. گاهي اوقات سرويس با يك آدرس IP جديد ايجاد مي شود. بايد مجدداً آدرس EXTERNAL-IP را پيدا كنيد:

$kubectl get services –namespace nginx-example
Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-svc LoadBalancer 10.245.15.83 159.203.48.191 80:31217/TCP 97s
براي تأييد به روز رساني و اجراي Nginx ، يك بار ديگر به IP خارجي سرويس Nginx برويد.
در آخر ، ورودهاي مربوط به واليوم پايدار را بازبيني كنيد تا تأييد كنيد كه سابقه ورود پس از بازيابي ، حفظ شده است.
براي اين كار ، يك بار ديگر نام Pod را با استفاده از kubectl get دريافت كنيد:
$kubectl get pods –namespace nginx-example
Output
NAME READY STATUS RESTARTS AGE
nginx-deploy-694c85cdc8-vknsk 1/1 Running 0 2m20s

سپس به آن exec كنيد:
$kubectl exec -it nginx-deploy-694c85cdc8-vknsk –namespace nginx-example — /bin/bash
به محض ورود به كانتينر Nginx، ورودهاي دسترسي به Nginx را cat كنيد:
$cat /var/log/nginx/access.log
Output
10.244.0.119 – – [03/Jan/2020:04:43:04 +0000] “GET / HTTP/1.1” 200 612 “-” “Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0” “-”
10.244.0.119 – – [03/Jan/2020:04:43:04 +0000] “GET /favicon.ico HTTP/1.1” 404 153 “-” “Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0” “-”

شما بايد همان اقدامات دسترسي قبل از تهيه نسخه پشتيبان را ببينيد (بازه هاي زماني را يادداشت كنيد) كه تأييد ميكند كه بازيابي واليوم پايدار موفقيت آميز بوده است. توجه داشته باشيد پس از انجام بازيابي ، اگر از صفحه فرود Nginx بازديد كنيد ، ممكن است تلاش هاي بيشتري نياز باشد.
در اين مرحله ، ما با موفقيت از موضوعات Kubernetes خود در فضاهاي vpsgol و واليومهاي پايدار خود با استفاده از اسنپ شات هاي بلوك ذخيره سازي پشتيبان تهيه كرده ايم. ما يك سناريوي فاجعه را شبيه سازي كرديم و سرويس را به برنامه تست Nginx بازيابي كرديم.
نتيجه
در اين راهنما ابزار پشتيبان گيري Velero Kubernetes را روي يك خوشه مبتني بر vpsgol Kubernetes نصب و پيكربندي كرديم. ما اين ابزار را براي تهيه نسخه پشتيبان از موضوعات Kubernetes در vpsgol Spaces و پشتيبان گيري از واليوم هاي مداوم با استفاده از اسنپ شات هاي واليوم ذخيره سازي بلوك پيكربندي كرده ايم.

از Velero همچنين مي توان براي برنامه ريزي پشتيبان گيري منظم از خوشه Kubernetes براي بازيابي در برابر مشكلات استفاده كرد. براي اين كار مي توانيد از دستور velero schedule استفاده كنيد. Velero همچنين مي تواند براي انتقال منابع از يك خوشه به گروه ديگر استفاده شود.
براي كسب اطلاعات بيشتر در مورد vpsgol Spaces ، از مطالب رسمي Spaces كمك بگيريد. براي كسب اطلاعات بيشتر در مورد واليوم هاي ذخيره سازي بلوك ، با مستندات واليوم ذخيره سازي بلوك مشورت كنيد.
اين آموزش بر اساس README موجود در repo GitHub-plugin-plugin-digital-stackPointCloud

تا كنون نظري ثبت نشده است
ارسال نظر آزاد است، اما اگر قبلا در مونوبلاگ ثبت نام کرده اید می توانید ابتدا وارد شوید.