پرش به محتوای اصلی

قراردادهای کوبرنتیز

این قراردادها سلیقه‌ای نیستند. هر کدام از یک حادثه‌ی واقعی بیرون آمده‌اند.

برچسب‌ها

هر شیء باید چهار برچسب استاندارد داشته باشد. سیاست‌های شبکه، داشبوردها و مسیریابی هشدار همگی روی همین‌ها 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 }
  }
}