قراردادهای کوبرنتیز
این قراردادها سلیقهای نیستند. هر کدام از یک حادثهی واقعی بیرون آمدهاند.
برچسبها
هر شیء باید چهار برچسب استاندارد داشته باشد. سیاستهای شبکه، داشبوردها و مسیریابی هشدار همگی روی همینها Select میکنند.
metadata:
labels:
app.kubernetes.io/name: payments-api
app.kubernetes.io/part-of: payments
app.kubernetes.io/version: "2.14.0"
mizban.io/oncall-rotation: payments-primaryمنابع
هر کانتینر باید requests داشته باشد. limits برای حافظه اجباری و برای CPU اختیاری است.
چرا limit روی CPU نمیگذاریم
محدودیت CPU باعث Throttling میشود، حتی وقتی گره بیکار است. نتیجه، تأخیر صدک ۹۹ است که هیچکس نمیتواند توضیحش دهد. حافظه فرق دارد: بدون limit، یک نشتی حافظه گره را میکشد و همسایهها را با خود میبرد.
resources:
requests:
cpu: 250m
memory: 256Mi
limits:
memory: 512Miکاوشگرها
سه کاوشگر، سه معنای متفاوت:
| کاوشگر | پرسش | اثر شکست |
|---|---|---|
| startup | هنوز در حال بالا آمدن است؟ | کاوشگرهای دیگر معلق میمانند |
| readiness | آمادهی دریافت ترافیک است؟ | از Endpoint حذف میشود |
| liveness | زنده است یا قفل شده؟ | کانتینر Restart میشود |
رایجترین اشتباهی که میبینیم این است که
livenessProbeبه یک وابستگی بیرونی مثل پایگاهداده وصل شده باشد. وقتی پایگاهداده کند شود، کوبرنتیز تمام Podها را همزمان ریاستارت میکند و یک کندی را به یک قطعی کامل تبدیل میکند.
زیرساخت خوشه
خوشهها با Terraform ساخته میشوند و هیچ تغییری خارج از State پذیرفته نیست.
module "production" {
source = "mizban/kubernetes/cloud"
version = "3.2.1"
name = "production"
region = "ir-tehran-1"
control_plane_ha = true
node_pools = {
general = { size = "c4.xlarge", min = 3, max = 12 }
memory = { size = "r4.2xlarge", min = 2, max = 6 }
}
}