اپراتور K8s – شرایط – انجمن DEV

پس از اینکه دیدیم چگونه می توان وضعیت منابع خود را مدیریت کرد، امروز یک قدم فراتر رفته و به تعریف می رویم شرایط.
این چیه؟
با نگاهی به منابع Kubernetes، احتمالاً قبلاً این شرایط را دیده اید، بدون اینکه لزوماً به آنها توجه کنید. با این حال، این عنصر بسیار مهم است!
شرایط مجموعه ای از اعتبار سنجی است که بر روی یک منبع انجام می شود تا اطمینان حاصل شود که در حالت است آماده.
چرا آنها را اجرا کنید؟
اگر پیاده سازی آنها مهم است، می توانند اطلاعات مفید زیادی برای اشکال زدایی به شما بدهند.
اگر مثال خود را در نظر بگیریم، MyProxy می تواند به عنوان یک شرط باشد “Pods با موفقیت شروع شد”. بنابراین فقط با نگاه کردن به وضعیت منبع خود، میتوانیم بفهمیم که آیا همه چیز خوب پیش میرود یا خیر.
نکته دیگری که شرایط می تواند بسیار مفید باشد، دانستن این است که آیا همه پیش نیازها موجود است برای اینکه بتوانید منبعی ایجاد کنید یا عملی را انجام دهید.
نحوه اجرای آن
درست مانند وضعیت، شما باید تعریف وضعیت را در آن تغییر دهید api/../xxx_types.go
و به سراغ آپدیت وضعیت منبع در متد بروید وفق دادن از کنترل کننده
به روز رسانی تعریف وضعیت
بنابراین در وضعیت، یک متغیر جدید اضافه می کنیم Conditions
type MyProxyStatus struct {
Conditions []metav1.Condition `json:"conditions"`
PodNames []string `json:"pod_names"`
}
روش آشتی به روز شده
درست مانند بقیه وضعیت ها، می توانید مقدار محتوای آن را تغییر دهید Conditions
و به روز رسانی کنید
myProxy.Status.Conditions = conditions
err = r.Status().Update(ctx, myProxy)
if err != nil {
log.Error(err, "Failed to update MyProxy status")
return ctrl.Result{}, err
}
ایجاد شرایط
شرایط اشیاء بسیار ساده ای هستند. آنها از 4 فیلد تشکیل شده اند
-
وضعیت : که شامل وضعیت شرط خواهد بود. فقط سه مقدار را می پذیرد
-
metav1.ConditionTrue
: در صورت رفع حالت -
metav1.ConditionFalse
: در صورت رفع نشدن شرط -
metav1.ConditionUnknown
: در صورت مفقود بودن اطلاعات بدانیم که آیا مشکل حل شده است یا خیر
-
- تایپ کنید : نام شرط (مثلاً: وجود غلاف ها را بررسی کنید)
- دلیل : خلاصه وضعیت کیست (مثلاً: غلاف موجود)
- پیام : پیامی است که جزئیاتی را در مورد دلیل این وضعیت اضافه می کند. (عمدتا برای درج پیامی که جزئیات خطای احتمالی رخ داده است استفاده می شود)
بنابراین از آنجا می توانید متدهای خود را ایجاد کنید که شرایط شما را ایجاد می کند و متغیر را پر می کند conditions
از مثال قبلی
مثال
func checkPodExistance(podNames []string) metav1.Condition {
if len(podNames) == 2 {
return metav1.Condition{
Status: metav1.ConditionTrue,
Reason: "Pods found",
Message: "Both pods were found",
Type: "Check existance of pods",
}
} else {
return metav1.Condition{
Status: metav1.ConditionFalse,
Reason: "Pods not found",
Message: "The list of pod names doesn't contains the correct number of pods",
Type: "Check existance of pods",
}
}
}
به طور خلاصه، شرایط ابزار قدرتمندی هستند و وقتی آنها را امتحان کردید نمی توانید بدون آنها کار کنید!
در قسمت بعدی این مجموعه به حاشیه هایی که می توانیم در اپراتور خود اضافه کنیم می پردازیم!
امیدوارم این کمک کند و اگر سوالی دارید (هرگز سوال احمقانه ای وجود ندارد!) یا نکاتی که برای شما واضح نیست، در نظرات پیام بگذارید یا مستقیماً در لینکدین با من تماس بگیرید (حتی برای صحبت در مورد موضوعات دیگر!).