برنامه نویسی
اقدامات 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]bool → map[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 را حذف می کند و به شما اجازه می دهد تا آن را دوباره بازآفرینی کند
- این به دست می آید خود درمانی نزدیک به کاملاً مدیریت شده
- با این حال ، خطر اعدام شغل در اثر وقفه های نقطه ای مختل می شود هنوز هم باقی مانده است ، بنابراین هنگام استفاده از نمونه های نقطه ای احتیاط لازم است