نحوه راه اندازی Failover برای اپراتور DigitalOcean Static Routes

مقدمه

هدف اصلی اپراتور مسیرهای ثابت ارائه انعطاف پذیری و کنترل بیشتر بر ترافیک شبکه در محیط Kubernetes شما است. این به شما امکان می دهد پیکربندی مسیریابی را برای برآورده کردن نیازهای برنامه و بهینه سازی عملکرد شبکه تنظیم کنید. این به عنوان یک DaemonSet مستقر شده است. از این رو، روی هر گره از خوشه Kubernetes مدیریت شده DigitalOcean شما اجرا می شود.

در این آموزش، شما یاد خواهید گرفت که جدول مسیریابی هر گره کارگر را بر اساس مشخصات CRD مدیریت کنید و یک گیت‌وی خطا را راه‌اندازی کنید.

هدف اصلی این آموزش نشان دادن نحوه مدیریت جدول مسیریابی هر گره کارگر بر اساس مشخصات CRD و راه‌اندازی یک گیت‌وی خرابی است.

پیش نیازها
  • خوشه Kubernetes با مدیریت DigitalOcean که به آن دسترسی دارید.
  • Kubectl CLI روی دستگاه محلی شما نصب شده است (پیکربندی شده تا به خوشه Kubernetes مدیریت شده DigitalOcean شما اشاره کند)
  • NAT GW Droplets (2 یا بالاتر) طبق جزئیات در اینجا پیکربندی و اجرا می شود.
  • سیستمی برای تشخیص خرابی ها در Gateway Droplet ایجاد کنید که متناسب با نیازهای کاربر باشد و تشخیص واضح و دقیق را با حداقل هشدارهای اشتباه تضمین کند. از خدمات نظارتی مانند Prometheus یا Nagios استفاده کنید، نقاط پایانی بررسی سلامت را در Droplet تنظیم کنید، یا ابزارهای هشدار مانند Alertmanager برای اعلان‌ها. برای این منظور، می توانید از یک پشته نظارت از بازار ما استفاده کنید.

در زیر نمودار معماری آمده است:

استقرار اپراتور مسیرهای ثابت Kubernetes

با استفاده از kubectl، آخرین نسخه اپراتور مسیرهای ثابت را در خوشه Kubernetes مدیریت شده DigitalOcean خود مستقر کنید:

kubectl apply -f https://raw.githubusercontent.com/digitalocean/k8s-staticroute-operator/main/releases/v1/k8s-staticroute-operator-v1.0.0.yaml
بررسی کنید که Operator Pods آماده و در حال اجرا باشد:

بیایید بررسی کنیم که آیا پادهای اپراتور آماده و در حال اجرا هستند.

“ bash kubectl دریافت staticroutes -o wide -n staticroutes

The output looks similar to the below:
```bash
[secondary_label Output]
NAME AGE DESTINATIONS GATEWAY
static-route-ifconfig.me 119s ["XX.XX.XX.XX"] XX.XX.XX.XX
static-route-ipinfo.io 111s ["XX.XX.XX.XX"] XX.XX.XX.XX

حال بیایید گزارش های اپراتور را بررسی کنیم و هیچ استثنایی نباید گزارش شود:

kubectl logs -f ds/k8s-staticroute-operator -n static-routes

باید خروجی زیر را رعایت کنید:

Output
Found 2 pods, using pod/k8s-staticroute-operator-498vv
[2023-05-15 14:12:32,282] kopf._core.reactor.r [DEBUG ] Starting Kopf 1.35.6.
[2023-05-15 14:12:32,282] kopf._core.engines.a [INFO ] Initial authentication has been initiated.
[2023-05-15 14:12:32,283] kopf.activities.auth [DEBUG ] Activity 'login_via_pykube' is invoked.
[2023-05-15 14:12:32,285] kopf.activities.auth [DEBUG ] Pykube is configured in cluster with service account.
[2023-05-15 14:12:32,286] kopf.activities.auth [INFO ] Activity 'login_via_pykube' succeeded.
[2023-05-15 14:12:32,286] kopf.activities.auth [DEBUG ] Activity 'login_via_client' is invoked.
[2023-05-15 14:12:32,287] kopf.activities.auth [DEBUG ] Client is configured in cluster with service account.
[2023-05-15 14:12:32,288] kopf.activities.auth [INFO ] Activity 'login_via_client' succeeded.
[2023-05-15 14:12:32,288] kopf._core.engines.a [INFO ] Initial authentication has finished.
[2023-05-15 14:12:32,328] kopf._cogs.clients.w [DEBUG ] Starting the watch-stream for customresourcedefinitions.v1.apiextensions.k8s.io cluster-wide.
[2023-05-15 14:12:32,330] kopf._cogs.clients.w [DEBUG ] Starting the watch-stream for staticroutes.v1.networking.digitalocean.com cluster-wide.

برای کاهش تأثیر خرابی دروازه، توصیه می شود که یک قطره دروازه آماده به کار را برای خرابی در صورت لزوم آماده کنید. اگرچه دسترسی واقعی بالا (HA) توسط اپراتور در حال حاضر پشتیبانی نمی شود، انجام failover کمک می کند تا مدت زمان اختلال در سرویس به حداقل برسد.

فرض کنید شما یک آدرس IP مقصد تعیین شده دارید، 34.160.111.145، که نشان دهنده دروازه فعال یا اصلی، با آدرس IP 10.116.0.4، مسئول انتقال ترافیک است. این در فایل primar.yaml ذخیره می شود.

apiVersion: networking.digitalocean.com/v1
kind: StaticRoute
metadata:
name: primary
spec:
destinations: 
- "34.160.111.145"
gateway: "10.116.0.4"

علاوه بر این، یک دروازه آماده به کار یا ثانویه با آدرس IP 10.116.0.12 خواهید داشت که آماده رسیدگی به ترافیک همان آدرس IP مقصد است. تعریف StaticRoute در secondary.yaml با تعریف اولیه یکسان است، به جز آدرس IP دروازه (و نام شی). این در فایل secondary.yaml ذخیره می شود.

apiVersion: networking.digitalocean.com/v1
kind: StaticRoute
metadata:
name: secondary
spec:
destinations: 
- "34.160.111.145"
gateway: "10.116.0.12"

سپس روند واقعی شکست شامل مراحل زیر است:

  • شناسایی اینکه دروازه فعال با آدرس IP 10.116.0.5 خراب است.
  • StaticRoute فعال فعلی را حذف کنید.
  • StaticRoute آماده به کار را اعمال کنید.

Active StaticRoute را حذف کنید

حال اجازه دهید StaticRoute فعال فعلی را حذف کنیم.

kubectl delete -f primary.yaml

30 تا 60 ثانیه صبر کنید تا به هر نمونه اپراتور زمان کافی برای پردازش حذف شی داده شود. یعنی با حذف مسیر از تمام گره ها پاسخ دهید.

Standby StaticRoute را اعمال کنید

اجازه دهید StaticRoute ثانویه را فعال کنیم.

 kubectl apply -f secondary.yaml

اپراتور باید StaticRoute آماده به کار جدید را انتخاب کند و ورودی های جدول مسیریابی مربوطه را وارد کند. پس از آن، failover کامل می شود.

تست Setup

هر نمونه CRD یک مسیر ثابت به دو وب‌سایت ایجاد می‌کند که IP عمومی شما را گزارش می‌کنند – ifconfig.me/ip و ipinfo.io/ip. یک تعریف مسیر ثابت معمولی به شکل زیر است:

apiVersion: networking.digitalocean.com/v1
kind: StaticRoute
metadata:
name: static-route-ifconfig.me
spec:
destinations: 
- "34.160.111.145"
gateway: "10.116.0.5"

برای آزمایش تنظیمات، یک مانیفست نمونه را از مکان مثال دانلود کنید:

مثال برای ifconfig.me و ipinfo.io-

curl -O https://raw.githubusercontent.com/digitalocean/k8s-staticroute-operator/main/examples/static-route-ifconfig.me.yaml
curl -O https://raw.githubusercontent.com/digitalocean/k8s-staticroute-operator/main/examples/static-route-ipinfo.io.yaml

پس از دانلود مانیفست ها، هر فایل مانیفست <> را جایگزین کنید. سپس، هر مانیفست را با استفاده از kubectl اعمال کنید:

kubectl apply -f static-route-ifconfig.me.yaml
kubectl apply -f static-route-ipinfo.io.yaml

در نهایت، بررسی کنید که آیا غلاف تست curl-test به IP عمومی NAT Gateway شما برای هر مسیر پاسخ می‌دهد یا خیر:

kubectl exec -it curl-test -- curl ifconfig.me/ip
kubectl exec -it curl-test -- curl ipinfo.io/ip

شما باید از همان تست در طول تست شکست استفاده کنید. در طول شکست قطره دروازه اولیه، نتیجه باید به NAT GW IP عمومی قطره اولیه و در طول دروازه ثانویه Droplet/failover بدهد. نتیجه باید IP عمومی NAT Gateway قطره ثانویه را بدهد.

عیب یابی

باید شی StaticRoute را بررسی کنید: اگر خطایی رخ داد، ابتدا به دنبال خطا در رویداد مسیر ثابت برای هر گره ای که قانون در آن اعمال می شود، بگردید.

kubectl get StaticRoute <static-route-name> -o yaml

بررسی گزارش‌ها: برای حفاری عمیق‌تر، می‌توانید خطاهای گزارش‌های استاتیک اپراتور مسیر را بررسی کنید.

kubectl logs -f ds/k8s-staticroute-operator -n static-routes

پاک کردن

برای حذف اپراتور و منابع مرتبط، لطفاً دستور kubectl زیر را اجرا کنید (مطمئن شوید که از همان نسخه انتشاری که در مرحله نصب استفاده می کنید) استفاده کنید:

kubectl delete -f deploy https://raw.githubusercontent.com/digitalocean/k8s-staticroute-operator/main/releases/v1/k8s-staticroute-operator-v1.0.0.yaml

خروجی شبیه به:

customresourcedefinition.apiextensions.k8s.io "staticroutes.networking.digitalocean.com" deleted
serviceaccount "k8s-staticroute-operator" deleted
clusterrole.rbac.authorization.k8s.io "k8s-staticroute-operator" deleted
clusterrolebinding.rbac.authorization.k8s.io "k8s-staticroute-operator" deleted
daemonset.apps "k8s-staticroute-operator" deleted

حال، اگر همان دستور curl را آزمایش کنید، IP گره کارگر را به عنوان خروجی دریافت خواهید کرد:

kubectl exec -it curl-test -- curl ifconfig.me/ip
kubectl exec -it curl-test -- curl ipinfo.io/ip 

اکنون IP عمومی گره کارگر را بررسی کنید:

kubectl get nodes -o wide

نتیجه

پیاده‌سازی قابلیت‌های failover، حتی اگر دسترسی واقعی بالا (HA) به طور کامل پشتیبانی نشود، یک رویکرد توصیه‌شده برای به حداقل رساندن تأثیر خرابی‌های دروازه است.

سازمان ها می توانند با داشتن یک دروازه آماده به کار برای خرابی در صورت نیاز، مدت زمان اختلالات سرویس را به میزان قابل توجهی کاهش دهند.

مهم است که یک قطره دروازه آماده به کار تهیه کنید و در هنگام خرابی از انتقال صاف اطمینان حاصل کنید. در حالی که پیاده‌سازی ممکن است بسته به نیازهای خاص متفاوت باشد، اولویت‌بندی آمادگی شکست می‌تواند به حفظ ارائه خدمات قابل اعتماد و بدون وقفه کمک کند.

[تعداد: 1   میانگین: 5/5]
دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

شاید دوست داشته باشید