نسخه آنلاین در حال بارگذاری زمان... تهران: ۲۶°C
۲۸ کاربر آنلاین

PNo.30Light

نشریه تخصصی هوش مصنوعی، سیستم‌های سرور و مهندسی داده

تازه ترین‌ها
زیرساخت و سرور
زمان مطالعه: ۲۸ دقیقه ۰ بازدید

Knative: Serverless روی Kubernetes — Serving، Eventing و Functions

نویسنده: تحریریه فنی P30Light
Knative: Serverless روی Kubernetes — Serving، Eventing و Functions
✦ خلاصه نکات کلیدی مقاله
  • Knative = لایهٔ serverless بومی Kubernetes — Serving (HTTP autoscaling) + Eventing (CloudEvents) + Functions (func CLI).
  • Serving: Service/Route/Configuration/Revision؛ Activator برای 0→1؛ Queue-Proxy برای concurrency؛ scale-to-zero واقعی.
  • CNCF Graduated (سپتامبر ۲۰۲۵)؛ بدون vendor lock-in؛ مکمل KEDA نه جایگزین مطلق.

Kubernetes قدرت می‌دهد، اما برای هر API ساده اغلب باید Deployment، Service، Ingress، HPA و سیاست ترافیک را دستی بچینید. تیم‌ها می‌خواهند بگویند «این کانتینر را سرو کن، با تقاضا اسکیل کن، وقتی بیکار است خاموش شود» — بدون قفل به یک cloud خاص.

Knative برای همین ساخته شد:

The easiest way to build and run serverless workloads on Kubernetes — building blocks for modern, cloud-based applications.

یعنی middleware روی Kubernetes برای deploy، اسکیل و مدیریت workloadهای serverless — HTTP-first، event-based، و قابل حمل بین هر کلاستر.

CNCF Graduated (اعلام اکتبر ۲۰۲۵ / graduation سپتامبر ۲۰۲۵؛ Incubating از مارس ۲۰۲۲). سایت: knative.dev · Docs: docs · لایسنس: Apache-2.0


مشکل: serverless بدون قفل vendor

دردبدون Knativeبا Knative
Deploy سادهچند YAML و مفهوم K8sService سطح بالاتر
Scale-to-zero روی HTTPسخت / add-on شکنندهBuilt-in Serving
Canary / blue-greenدستی یا mesh پیچیدهRevision + traffic split
رویداد ناهمگامصف‌های پراکندهEventing + CloudEvents
Lock-inLambda / Cloud Run proprietaryهر Kubernetes
DX توابعDockerfile + pipelinefunc CLI

نقل معروف Kelsey Hightower روی سایت: اگر می‌خواهید FaaS بسازید، می‌توانید روی Knative بسازید — Serving برای اسکیل on-demand درخواست.


Knative چیست؟ سه جزء

طبق Technical Overview:

جزءنقشنصب در کلاستر؟
Servingruntime اسکیل‌شوندهٔ HTTP برای کانتینرهای statelessبله
Eventingمسیریابی ناهمگام CloudEvents روی HTTPبله (مستقل)
Functionsفریم‌ورک DX برای توابع → کانتینر استانداردخیر — ابزار کلاینت func

Serving و Eventing را می‌توان جدا نصب کرد و تدریجی adopt کرد. Functions روی Serving (و در صورت نیاز Eventing) سوار می‌شود.

مشکلاتی که حل می‌کند

  1. پیچیدگی deploy — به‌جای ترکیب دستی Pod/Service/Ingress
  2. عملیات serverless — اسکیل ۰ تا هزاران، routing هوشمند
  3. معماری event-driven — استاندارد با CloudEvents
  4. Developer Experience — بدون اجبار Dockerfile در روز اول
  5. Platform lock-in — portable روی هر کلاستر (on-prem / multi-cloud)

Knative Serving

Serving مجموعه‌ای از CRDهاست که چرخهٔ عمر workload serverless را مدیریت می‌کند.

منابع اصلی

CRDمعنی
Service (serving.knative.dev)مدیریت کل lifecycle؛ Route + Configuration + Revision برای هر به‌روزرسانی
Routeنگاشت endpoint شبکه به یک یا چند Revision؛ ترافیک کسری و named routes
Configurationdesired state؛ جداسازی کد از config (Twelve-Factor)؛ هر تغییر → Revision جدید
Revisionsnapshot غیرقابل‌تغییر کد+config؛ اسکیل خودکار بر اساس ترافیک
knative Service
    ├─ Configuration ──► Revision v1, v2, v3 …
    └─ Route ── traffic % ──► Revisions

قابلیت‌های کلیدی Serving

  • Automatic scaling از صفر تا N و برگشت به صفر
  • Traffic management: blue-green، canary، split بین Revisionها
  • Networking: Ingress خودکار؛ دامنهٔ سفارشی؛ TLS؛ یکپارچگی با service mesh
  • Kubernetes-native: همان Pod — ServiceAccount، GPU، sandbox
  • Configuration management تمیز بین app و config

جریان درخواست (Request Flow)

Client


Ingress (Kourier / Istio / Contour / Gateway API)

  ├─ اگر Pod آماده است ──► Queue-Proxy ──► App container

  └─ اگر scale-to-zero ──► Activator (صف درخواست)
                              │ poke

                         Autoscaler ──► ایجاد Pod


                         Queue-Proxy ──► App
جزءنقش
Activatorدر مسیر داده هنگام صفر (یا burst)؛ بافر درخواست؛ سیگنال به Autoscaler
Autoscalerمتریک از Queue-Proxy و Activator → تعداد desired pods
Queue-Proxysidecar؛ محدودیت concurrency؛ جمع‌آوری متریک

target-burst-capacity تعیین می‌کند Activator همیشه در مسیر باشد یا فقط هنگام scale-from-zero. جزئیات: serving scaling docs.

نمونهٔ Knative Service

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: hello
  namespace: default
spec:
  template:
    metadata:
      annotations:
        autoscaling.knative.dev/target: "10"
        autoscaling.knative.dev/min-scale: "0"
        autoscaling.knative.dev/max-scale: "50"
    spec:
      containers:
        - image: ghcr.io/knative/helloworld-go:latest
          ports:
            - containerPort: 8080
          env:
            - name: TARGET
              value: "P30Light"

ترافیک canary مفهومی:

# بخشی از spec.traffic روی Service / Route
traffic:
  - revisionName: hello-00001
    percent: 90
  - revisionName: hello-00002
    percent: 10
    tag: canary

GPU و LLM Inference

چون Serving روی Pod است، می‌توانید GPU بخواهید و از scale-to-zero برای خاموش کردن سخت‌افزار گران استفاده کنید. برای production مدل: KServe روی Knative Serving — پروتکل inference، multi-framework، batching و observability مدل.


Knative Eventing

لایهٔ مسیریابی ناهمگام CloudEvents روی HTTP — producers و consumers شل‌کوپل.

Event Source ──HTTP POST (CloudEvent)──► Broker

                                      Trigger (filter)


                                         Sink
                              (Knative Service / K8s Service / URL)
مفهومنقش
Sourceتولید رویداد از سیستم خارجی (DB، صف، cloud API، …)
Brokerروتر رویداد؛ دریافت و توزیع بر اساس attributeها
Triggerفیلتر + مقصد consumer
Sinkمصرف‌کننده
Channelprimitive سطح پایین‌تر point-to-point

ویژگی مهم: producer می‌تواند قبل از وجود consumer رویداد بفرستد و برعکس — loose coupling واقعی. Eventing می‌تواند به Kubernetes Service معمولی هم تحویل دهد، نه فقط Serving.

موارد استفاده: pipeline داده، integration، orchestration workflow، analytics نزدیک real-time.

برای استاندارد رویداد: CloudEvents. برای اسکیل consumer صف‌محور کنار Deployment معمولی: KEDA.


Knative Functions

مدل برنامه‌نویسی ساده بدون اجبار دانش عمیق K8s/Dockerfile:

func init          # قالب زبان
# توسعه و تست محلی
func push          # OCI image به registry
func deploy        # به‌عنوان Knative Service (+ triggers)

یا پلاگین: kn func …

موضوعجزئیات
زبان‌هاNode.js، Python، Go، Java (Spring/Quarkus)، TypeScript؛ language pack سفارشی
ساختOCI خودکار؛ به‌روزرسانی با هر deploy
TriggerHTTP یا CloudEvents
اجراهرجا کانتینر HTTP اجرا می‌شود؛ روی Serving اسکیل serverless می‌گیرید

جریان: init → git محلی → تست با Docker محلی → registry → Serving.


نصب

طبق Installing Knative:

روشهدفسخت‌افزار تقریبی
Quickstartیادگیری روی kind/Minikube~۳ CPU، ۳ GB RAM
YAMLproduction / GitOps دقیقتک‌نود ~۶ CPU/۶ GB؛ یا چند نود
Knative Operatorproduction با CR و جداسازی customizeمشابه YAML
# ایدهٔ quickstart (پس از نصب kn CLI و پلاگین)
kn quickstart kind

Serving و Eventing مستقل‌اند. Functions فقط CLI است.

Networking plugins

پلاگیننقش
net-kourierپیش‌فرض سبک HTTP
Istiomesh کامل — ببینید Istio
ContourIngress مبتنی بر Envoy — Contour
Gateway APIمسیر آیندهٔ استاندارد K8s
Higressthird-party (خارج از مدیریت جامعهٔ Knative)

Messaging plugins (Eventing)

پلاگینویژگی
In-memoryپیش‌فرض سبک
Kafkathroughput بالا
RabbitMQتعادل پیچیدگی/ترتیب
NATSسادگی نسبی

TLS با cert-manager. Observability با OpenTelemetry → Prometheus / Grafana / Jaeger.

YAML در برابر Operator: YAML شفافیت کامل؛ Operator جداسازی customize از base و ارتقای آسان‌تر.


Knative در برابر گزینه‌های نزدیک

معیارKnativeKEDACloud Run / LambdaDapr
مدلserverless platform روی K8sevent autoscaler برای workload موجودmanaged FaaSruntime building blocks
Scale-to-zero HTTPقوی (Serving)HTTP Add-on (محتاط)بلهنه تمرکز اصلی
Revision / canaryدرون Servingخیروابسته به vendorخیر
CloudEvents meshEventingtrigger به اسکیلمحدودpub/sub building block
Portabilityهر کلاسترهر کلاسترقفل cloudهر کلاستر
چه وقتFaaS/API serverless بومی K8sاسکیل Deployment/Job موجودبدون مدیریت کلاسترsidecar برای state/pubsub/…

جمع‌بندی:

  • می‌خواهید Service serverless با Revision و صفر واقعیKnative Serving
  • می‌خواهید همان Deployment فعلی با متریک صف اسکیل شود → KEDA
  • می‌خواهید primitives اپ (state، pubsub، binding) → Dapr
  • اغلب در یک پلتفرم همزیستی دارند، نه حذف یکدیگر

Cold-start زیر ~۱۰۰ms یا process طولانی stateful با دیسک پایدار — معیار docs برای در نظر گرفتن جایگزین/مکمل.


موارد استفاده ایده‌آل

Use caseچرا Knative
REST / gRPC / HTTP/2 / MCP APIsHTTP-first Serving
Event-driven microservicesEventing + CloudEvents
Inference / LLMGPU Pod + scale-to-zero؛ یا KServe
Dev/staging خاموش‌شوهزینه کمتر با صفر
Edgeتوابع سبک نزدیک داده — روی K3s هم قابل ارزیابی
Integration legacy ↔ Kafka/CIEventing به‌عنوان پل

Case studyهای سایت به IBM، PNC و تیم‌های ML با Eventing اشاره می‌کنند.


عملیات و نکات

موضوعنکته
Cold startActivator بافر می‌کند؛ برای latency سخت، min-scale ≥ 1
Concurrencyannotation روی Revision / Queue-Proxy
دامنه و TLSDNS + cert-manager
امنیت پیش‌فرضroadmap: safer container defaults
متریک/تریسمهاجرت جامعه به OpenTelemetry
GitOpsYAML Serving/Eventing با Flux / Argo
Multi-clusterKarmada برای propagate منابع
kn service list
kn service describe hello
kubectl get ksvc,revision,route -A
kubectl get broker,trigger -A

یکپارچگی با استک P30Light

لایهمقاله
رویدادCloudEvents
Autoscaling مکملKEDA
App runtimeDapr
Mesh / IngressIstio · Envoy · Contour
TLScert-manager
ObservabilityJaeger
کلاستر سبک/سازمانیK3s · RKE2
func / CI ──OCI──► Knative Serving (scale 0↔N, Revisions)
Event Sources ──CloudEvents──► Broker/Trigger ──► Serving یا K8s Service
KEDA ──► اسکیل Deployment/Job غیر Knative (در صورت نیاز)

خلاصه

موضوعجمع‌بندی
چیستپلتفرم serverless بومی Kubernetes
وضعیتCNCF Graduated
ServingHTTP autoscaling، Revision، Activator، scale-to-zero
EventingBroker/Trigger/Source با CloudEvents
Functionsfunc → کانتینر → Serving
قفلخیر — هر کلاستر
مکملKEDA، Dapr، KServe، Istio/Contour

قدم بعدی

  1. Quickstart روی kind را نصب کنید و یک helloworld Serving بسازید.
  2. Service را به صفر ببرید (min-scale: 0) و cold start را با یک درخواست ببینید.
  3. ترافیک ۱۰٪ به Revision جدید برای canary اعمال کنید.
  4. Eventing in-memory + یک Trigger به همان Service وصل کنید.
  5. با func init یک تابع Python/Go بسازید و deploy کنید.
  6. برای production، Operator یا YAML + networking (Kourier یا Istio) و Observability OTel را قفل کنید.

منابع

منتشر شده در P30Light — بخش زیرساخت و سرور

لینک گزارش با موفقیت کپی گردید!