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 و مفهوم K8s | Service سطح بالاتر |
| Scale-to-zero روی HTTP | سخت / add-on شکننده | Built-in Serving |
| Canary / blue-green | دستی یا mesh پیچیده | Revision + traffic split |
| رویداد ناهمگام | صفهای پراکنده | Eventing + CloudEvents |
| Lock-in | Lambda / Cloud Run proprietary | هر Kubernetes |
| DX توابع | Dockerfile + pipeline | func CLI |
نقل معروف Kelsey Hightower روی سایت: اگر میخواهید FaaS بسازید، میتوانید روی Knative بسازید — Serving برای اسکیل on-demand درخواست.
Knative چیست؟ سه جزء
طبق Technical Overview:
| جزء | نقش | نصب در کلاستر؟ |
|---|---|---|
| Serving | runtime اسکیلشوندهٔ HTTP برای کانتینرهای stateless | بله |
| Eventing | مسیریابی ناهمگام CloudEvents روی HTTP | بله (مستقل) |
| Functions | فریمورک DX برای توابع → کانتینر استاندارد | خیر — ابزار کلاینت func |
Serving و Eventing را میتوان جدا نصب کرد و تدریجی adopt کرد. Functions روی Serving (و در صورت نیاز Eventing) سوار میشود.
مشکلاتی که حل میکند
- پیچیدگی deploy — بهجای ترکیب دستی Pod/Service/Ingress
- عملیات serverless — اسکیل ۰ تا هزاران، routing هوشمند
- معماری event-driven — استاندارد با CloudEvents
- Developer Experience — بدون اجبار Dockerfile در روز اول
- 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 |
| Configuration | desired state؛ جداسازی کد از config (Twelve-Factor)؛ هر تغییر → Revision جدید |
| Revision | snapshot غیرقابلتغییر کد+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-Proxy | sidecar؛ محدودیت 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: canaryGPU و 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 | مصرفکننده |
| Channel | primitive سطح پایینتر 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 |
| Trigger | HTTP یا CloudEvents |
| اجرا | هرجا کانتینر HTTP اجرا میشود؛ روی Serving اسکیل serverless میگیرید |
جریان: init → git محلی → تست با Docker محلی → registry → Serving.
نصب
طبق Installing Knative:
| روش | هدف | سختافزار تقریبی |
|---|---|---|
| Quickstart | یادگیری روی kind/Minikube | ~۳ CPU، ۳ GB RAM |
| YAML | production / GitOps دقیق | تکنود ~۶ CPU/۶ GB؛ یا چند نود |
| Knative Operator | production با CR و جداسازی customize | مشابه YAML |
# ایدهٔ quickstart (پس از نصب kn CLI و پلاگین)
kn quickstart kindServing و Eventing مستقلاند. Functions فقط CLI است.
Networking plugins
| پلاگین | نقش |
|---|---|
| net-kourier | پیشفرض سبک HTTP |
| Istio | mesh کامل — ببینید Istio |
| Contour | Ingress مبتنی بر Envoy — Contour |
| Gateway API | مسیر آیندهٔ استاندارد K8s |
| Higress | third-party (خارج از مدیریت جامعهٔ Knative) |
Messaging plugins (Eventing)
| پلاگین | ویژگی |
|---|---|
| In-memory | پیشفرض سبک |
| Kafka | throughput بالا |
| RabbitMQ | تعادل پیچیدگی/ترتیب |
| NATS | سادگی نسبی |
TLS با cert-manager. Observability با OpenTelemetry → Prometheus / Grafana / Jaeger.
YAML در برابر Operator: YAML شفافیت کامل؛ Operator جداسازی customize از base و ارتقای آسانتر.
Knative در برابر گزینههای نزدیک
| معیار | Knative | KEDA | Cloud Run / Lambda | Dapr |
|---|---|---|---|---|
| مدل | serverless platform روی K8s | event autoscaler برای workload موجود | managed FaaS | runtime building blocks |
| Scale-to-zero HTTP | قوی (Serving) | HTTP Add-on (محتاط) | بله | نه تمرکز اصلی |
| Revision / canary | درون Serving | خیر | وابسته به vendor | خیر |
| CloudEvents mesh | Eventing | trigger به اسکیل | محدود | 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 APIs | HTTP-first Serving |
| Event-driven microservices | Eventing + CloudEvents |
| Inference / LLM | GPU Pod + scale-to-zero؛ یا KServe |
| Dev/staging خاموششو | هزینه کمتر با صفر |
| Edge | توابع سبک نزدیک داده — روی K3s هم قابل ارزیابی |
| Integration legacy ↔ Kafka/CI | Eventing بهعنوان پل |
Case studyهای سایت به IBM، PNC و تیمهای ML با Eventing اشاره میکنند.
عملیات و نکات
| موضوع | نکته |
|---|---|
| Cold start | Activator بافر میکند؛ برای latency سخت، min-scale ≥ 1 |
| Concurrency | annotation روی Revision / Queue-Proxy |
| دامنه و TLS | DNS + cert-manager |
| امنیت پیشفرض | roadmap: safer container defaults |
| متریک/تریس | مهاجرت جامعه به OpenTelemetry |
| GitOps | YAML Serving/Eventing با Flux / Argo |
| Multi-cluster | Karmada برای propagate منابع |
kn service list
kn service describe hello
kubectl get ksvc,revision,route -A
kubectl get broker,trigger -Aیکپارچگی با استک P30Light
| لایه | مقاله |
|---|---|
| رویداد | CloudEvents |
| Autoscaling مکمل | KEDA |
| App runtime | Dapr |
| Mesh / Ingress | Istio · Envoy · Contour |
| TLS | cert-manager |
| Observability | Jaeger |
| کلاستر سبک/سازمانی | 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 |
| Serving | HTTP autoscaling، Revision، Activator، scale-to-zero |
| Eventing | Broker/Trigger/Source با CloudEvents |
| Functions | func → کانتینر → Serving |
| قفل | خیر — هر کلاستر |
| مکمل | KEDA، Dapr، KServe، Istio/Contour |
قدم بعدی
- Quickstart روی kind را نصب کنید و یک
helloworldServing بسازید. - Service را به صفر ببرید (
min-scale: 0) و cold start را با یک درخواست ببینید. - ترافیک ۱۰٪ به Revision جدید برای canary اعمال کنید.
- Eventing in-memory + یک Trigger به همان Service وصل کنید.
- با
func initیک تابع Python/Go بسازید و deploy کنید. - برای production، Operator یا YAML + networking (Kourier یا Istio) و Observability OTel را قفل کنید.
منابع
- Knative — خانه
- Technical Overview
- Installing Knative
- CNCF — Knative project
- CNCF — Graduation announcement
- Serving scaling architecture
- CloudEvents
منتشر شده در P30Light — بخش زیرساخت و سرور