برنامه نویسی

اقدامات Kubernetes Actions Controller: توضیح کاملی در مورد PR #4059 امکان بهبودی برای خود درمانی

1. پیشینه – چرا این روابط عمومی لازم بود؟

نشان اجرای قبلی
نمونه های نقطه ای هنگامی که زمان آنها تمام شد ، خاتمه دهید و زودگذر به اشتباه این را به عنوان یک شکست قضاوت می کند. خرابی های جمع شده در زودگذر status.failures یکی یکیبشر
هنگام استفاده از نمونه های نقطه ای minRunners ≥ 1، شما به ناچار با وقفه های نمونه نقطه ای روبرو می شوید. پس از 5 خرابی (وقفه) ، Runner CR باقی مانده است با Phase=Failedبشر
از طرف گردش کار ، مشاغل در حالت “دونده پیدا نشده” ایستاده اند. حدود 2 سال پیش در شماره شماره 2721 گزارش شده است

ترتیب محدودیت ها و چالش های قبلی

  • در حد شکست 5 بار ثابت وجود داشت پیش از
  • پس از رسیدن به حد مجاز ، فقط فاز را با تغییر داد markAsFailed()، بنابراین:
    • EphemeralRunnerSet “مورد نظر = 1 را تعیین می کند اما شیء در حال حاضر وجود دارد”
    • من نمی تواند یک زودگذر جدید تولید کند و “زامبی” شد

3. چه چیزی با PR #4059 تغییر کرده است؟

تغییر نقش
نوع تغییر برای status.failures
map[string]boolmap[string]metav1.Time
زمان شکست را به ثبت می رساند آخرین خرابی ها را به صورت زمانی پیگیری کنید
معرفی failedRunnerBackoff مجموعه برگه برگشتی: 0 S → 5 S → 10 S → 20 S → 40 S → 80 S (GitHub)
اضافه شده LastFailure() یاور بازیابی اخیر زمان شکست از وضعیت (github)
کنترل برای عدم موفقیت N ≤ 5 ، فرآیند معادل آن RequeueAfter(backoff[n]) (گیتوب)
تغییر بیش از حد محدودیت به جای مرحله تغییر، بلافاصله Delete() EphemeralRunner Cr.
EphemeralRunnerSet می تواند یک مورد جدید را بازسازی کند (GitHub)

💡 نقطه
ثابت محدودیت 5 بار خودش تغییر نکرده است.
“چه اتفاقی می افتد پس از رسیدن به حد” تغییر یافته از فاز = شکست خورده → حذف شیءوت
خود داری از زودگذر امکان پذیر شد


4. رفتار واقعی در سناریوی spot × minrunners

sequenceDiagram
    autonumber
    participant ARC as ARC Controller
    participant ER as EphemeralRunner CR
    participant Set as EphemeralRunnerSet
    participant Node as Spot Node

    Node-->>ER: Interruption warning (2 minutes in advance)
    Node--x ER: Pod Terminated
    ARC->>ER: failures+=1 / RequeueAfter(backoff[1])
    loop ~Repeats up to 5 times~
        Node--x ER: Terminated again
        ARC->>ER: failures+=1 / Backoff
    end
    ARC->>ER: failures=6 (>5)\nDelete(ER)
    Set->>ARC: Desired=1 but no CR
    Set-->>ARC: **Create new EphemeralRunner**
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

شرح تصویر

  • در بار ششم ، آن CR → بازسازی ها را حذف می کند، بنابراین “زامبی ها” باقی نمی مانند

5 توضیحات کد

1. زمینه وضعیت برای ضبط خرابی

type EphemeralRunnerStatus struct {
    // ...existing fields
    Failures map[string]metav1.Time `json:"failures,omitempty"`
}

func (s *EphemeralRunnerStatus) LastFailure() *metav1.Time {
    // Helper that scans the map and returns the latest timestamp
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • کلید: Pod’s .metadata.uid
  • ارزش: زمانی که شکست رخ داده است

ترتیب.

var failedRunnerBackoff = []time.Duration{
    0, 5 * time.Second, 10 * time.Second,
    20 * time.Second, 40 * time.Second, 80 * time.Second,
}
const maxFailures = 5
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

if len(er.Status.Failures) <= maxFailures {
    delay := failedRunnerBackoff[len(er.Status.Failures)]
    return ctrl.Result{RequeueAfter: delay}, nil
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • دوباره با 0 ثانیه → 5 ثانیه → 10 ثانیه …
  • در تلاش ششم (len > maxFailures) ، به بخش بعدی ادامه می یابد

3. حذف فوری در بار ششم → بازآفرینی مجدد

// Final phase
if len(er.Status.Failures) > maxFailures {
    log.Info("Maximum failures reached – deleting EphemeralRunner")
    if err := r.Delete(ctx, er); err != nil { ... }
    return ctrl.Result{}, nil
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • از آنجا که خود شیء را حذف می کند، آزمایش مجدد کنترل کننده به پایان می رسد
  • منبع والدین عرفانی یک زودگذر جدید برای دیدار

خلاصه جریان عمل

graph TD
    A[Pod Failed] --> B{Failures <= 5?}
    B -- Yes --> C[Record failure & requeue after backoff]
    B -- No --> D[Delete EphemeralRunner CR]
    D --> E[EphemeralRunnerSet creates new EphemeralRunner]
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

شرح تصویر


6. نتیجه گیری

PR #4059 مسئله دیرینه (شماره شماره 2721) را حل می کند “گیر شدن پس از 5 وقفه” این امر به ویژه در محیط های Minrunners Spot under مکرر است.

  • مدیریت ناکامی ها را به صورت زمانی مدیریت می کند و با عقب نشینی نمایی مجدداً قیام می کند
  • با استفاده از حد مجاز ، زودگذر CR را حذف می کند و به شما اجازه می دهد تا آن را دوباره بازآفرینی کند
  • این به دست می آید خود درمانی نزدیک به کاملاً مدیریت شده
  • با این حال ، خطر اعدام شغل در اثر وقفه های نقطه ای مختل می شود هنوز هم باقی مانده است ، بنابراین هنگام استفاده از نمونه های نقطه ای احتیاط لازم است

نوشته های مشابه

دیدگاهتان را بنویسید

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

دکمه بازگشت به بالا