Knative - پلت فرم به عنوان سرویس مبتنی بر k8s با پشتیبانی بدون سرور

Knative - پلت فرم به عنوان سرویس مبتنی بر k8s با پشتیبانی بدون سرور

Kubernetes بدون شک به پلتفرم غالب برای استقرار کانتینر تبدیل شده است. این توانایی کنترل تقریباً هر چیزی را با استفاده از APIها و کنترلرهای سفارشی که APIهای آن را با منابع سفارشی گسترش می دهند، فراهم می کند.

با این حال، کاربر هنوز باید تصمیمات دقیقی در مورد نحوه استقرار، پیکربندی، مدیریت و مقیاس‌بندی برنامه‌ها بگیرد. مسائل مربوط به مقیاس بندی برنامه، حفاظت و جریان ترافیک در اختیار کاربر باقی می ماند. این امر Kubernetes را از سیستم عامل های معمولی به عنوان یک سرویس (PaaS) مانند Cloud Foundry و Heroku متمایز می کند.

این پلتفرم ها رابط کاربری ساده ای دارند و برای توسعه دهندگان برنامه که اغلب در راه اندازی برنامه های کاربردی مشارکت دارند، هدف قرار می گیرند. مسیریابی، استقرار و معیارها به طور شفاف توسط سیستم PaaS زیربنایی برای کاربر مدیریت می شوند.

گردش کار منبع به ارسال توسط PaaS با ایجاد یک تصویر کانتینر سفارشی، استقرار آن، راه‌اندازی یک مسیر جدید و زیر دامنه DNS برای ترافیک ورودی مدیریت می‌شود. همه اینها به دستور راه اندازی می شود git push.

Kubernetes (عمداً) فقط بلوک‌های اصلی را برای چنین پلتفرم‌هایی فراهم می‌کند و جامعه را آزاد می‌گذارد که خودشان کار را انجام دهند. چگونه کلسی هایتاور گفت:

Kubernetes یک پلتفرم برای ساخت پلتفرم است. بهترین موقعیت برای شروع، اما نه اتمام.

در نتیجه، ما شاهد مجموعه‌ای از ساخت‌های Kubernetes و همچنین میزبانی شرکت‌هایی هستیم که در تلاش برای ایجاد PaaS برای Kubernetes هستند، مانند OpenShift و Rancher. در میان بازار رو به رشد Kube-PaaS، Knative که در ژوئیه 2018 توسط گوگل و Pivotal تاسیس شد، وارد رینگ می شود.

Knative همکاری گوگل و Pivotal با کمک کمی از شرکت های دیگر مانند IBM، RedHat و Solo.im بود. چیزهای مشابه PaaS را به Kubernetes با پشتیبانی درجه یک برای برنامه های کاربردی مبتنی بر محاسبات بدون سرور ارائه می دهد. برخلاف بیلدهای Kubernetes، Knative به عنوان یک افزونه بر روی هر خوشه Kubernetes سازگار نصب می شود و از طریق منابع کاربر پیکربندی می شود.

Knative چیست؟

Knative به عنوان یک پلت فرم مبتنی بر Kubernetes برای ارائه و مدیریت بارهای کاری با استفاده از محاسبات مدرن بدون سرور توصیف شده است. Knative، در حالی که خود را به عنوان چنین پلتفرمی اعلام می کند، به طور فعال کانتینرها را متناسب با درخواست های HTTP همزمان، مقیاس خودکار می کند. سرویس‌های استفاده نشده در نهایت به صفر می‌رسند و مقیاس‌بندی درخواستی به سبک بدون سرور ارائه می‌کنند.

Knative از مجموعه ای از کنترلرها تشکیل شده است که در هر خوشه Kubernetes نصب می شوند و قابلیت های زیر را ارائه می دهند:

  • ساختن برنامه های کانتینری از کد منبع (ارائه شده توسط مؤلفه ساختن),
  • ارائه دسترسی به ترافیک ورودی به برنامه ها (ارائه شده توسط مؤلفه خدمات),
  • تحویل و مقیاس بندی خودکار برنامه های کاربردی در صورت تقاضا (همچنین توسط مؤلفه ارائه می شود خدمات),
  • شناسایی منابع رویدادهایی که منجر به راه اندازی برنامه می شود (ارائه شده توسط مؤلفه رویداد).

یکی از مؤلفه‌های کلیدی «سرویس» است که تأمین، مقیاس‌بندی خودکار و مدیریت ترافیک را برای برنامه‌های مدیریت‌شده فراهم می‌کند. پس از نصب Knative، شما همچنان به API Kubernetes دسترسی کامل دارید و به کاربران اجازه می دهد برنامه ها را مدیریت کنند. معمولی way، و همچنین برای اشکال زدایی سرویس های Knative، با همان API های اولیه ای که این سرویس ها استفاده می کنند (ماژول ها، سرویس ها و غیره) کار می کند.

با کمک سرویس، مسیریابی ترافیک سبز-آبی نیز به صورت خودکار انجام می شود و هنگام تحویل کاربر نسخه به روز شده برنامه، جداسازی ترافیک بین نسخه های جدید و قدیمی برنامه را تضمین می کند.

Knative خود به نصب یک کنترل کننده ورودی سازگار بستگی دارد. در زمان نوشتن این مقاله پشتیبانی می شود Gloo API Gateway и مش ایستیو سرویس. ورودی موجود را برای هدایت ترافیک به برنامه‌های مدیریت‌شده Knative پیکربندی می‌کند.

Istio Service Mesh می تواند وابستگی بزرگی برای کاربران Knative باشد که می خواهند بدون نصب کنترل پنل Istio آن را امتحان کنند، زیرا Knative فقط به دروازه بستگی دارد.

به همین دلیل، اکثر کاربران Gloo را به عنوان دروازه ای به Knative ترجیح می دهند و مجموعه ای از قابلیت های مشابه ایستیو (به منظور استفاده فقط از Knative) را ارائه می دهند، در حالی که از منابع کمتر و هزینه های عملیاتی کمتری نیز استفاده می کنند.

بیایید Knative را در عمل روی جایگاه آزمایش کنیم. من از یک کلاستر تازه نصب شده در GKE استفاده خواهم کرد:

kubectl get namespace
NAME          STATUS   AGE
default       Active   21h
kube-public   Active   21h
kube-system   Active   21h

بیایید نصب Knative و Gloo را شروع کنیم. این را می توان به هر ترتیبی انجام داد:

# ставим Knative-Serving
kubectl apply -f 
 https://github.com/knative/serving/releases/download/v0.8.0/serving-core.yaml
namespace/knative-serving created
# ...
# ставим Gloo
kubectl apply -f 
  https://github.com/solo-io/gloo/releases/download/v0.18.22/gloo-knative.yaml
namespace/gloo-system created
# ...

ما بررسی می کنیم که همه پادها در وضعیت "در حال اجرا" باشند:

kubectl get pod -n knative-serving
NAME                              READY   STATUS    RESTARTS   AGE
activator-5dd55958cc-fkp7r        1/1     Running   0          7m32s
autoscaler-fd66459b7-7d5s2        1/1     Running   0          7m31s
autoscaler-hpa-85b5667df4-mdjch   1/1     Running   0          7m32s
controller-85c8bb7ffd-nj9cs       1/1     Running   0          7m29s
webhook-5bd79b5c8b-7czrm          1/1     Running   0          7m29s
kubectl get pod -n gloo-system
NAME                                      READY   STATUS    RESTARTS   AGE
discovery-69548c8475-fvh7q                1/1     Running   0          44s
gloo-5b6954d7c7-7rfk9                     1/1     Running   0          45s
ingress-6c46cdf6f6-jwj7m                  1/1     Running   0          44s
knative-external-proxy-7dd7665869-x9xkg   1/1     Running   0          44s
knative-internal-proxy-7775476875-9xvdg   1/1     Running   0          44s

Gloo برای مسیریابی آماده است، بیایید یک سرویس Knative با مقیاس خودکار ایجاد کنیم (بیایید آن را kservice بنامیم) و ترافیک را به آن هدایت کنیم.

خدمات Knative نسبت به مدل مرسوم Deployment+Service+Ingress مسیر آسان تری را برای ارائه برنامه ها به Kubernetes ارائه می دهند. ما با این مثال کار خواهیم کرد:

apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
 name: helloworld-go
 namespace: default
spec:
 template:
   spec:
     containers:
       - image: gcr.io/knative-samples/helloworld-go
         env:
           - name: TARGET
             Value: Knative user

من این را در یک فایل کپی کردم، سپس آن را به این ترتیب در خوشه Kubernetes اعمال کردم:

kubectl apply -f ksvc.yaml -n default

ما می توانیم منابع ایجاد شده توسط Knative را در خوشه پس از ارائه "helloworld-go" خود مشاهده کنیم. kservice:

kubectl get pod -n default
NAME                                              READY   STATUS    RESTARTS   AGE
helloworld-go-fjp75-deployment-678b965ccb-sfpn8   2/2     Running   0          68s

غلاف با تصویر "helloworld-go" ما هنگام استقرار kservice راه اندازی می شود. در صورت عدم وجود ترافیک، تعداد پادها به صفر می رسد. و بالعکس، اگر تعداد درخواست‌های همزمان از یک آستانه قابل تنظیم فراتر رود، تعداد پادها افزایش می‌یابد.

kubectl get ingresses.networking.internal.knative.dev -n default
NAME            READY   REASON
helloworld-go   True

Knative ورودی خود را با استفاده از یک منبع 'ingress' ویژه در Knative API داخلی پیکربندی می کند. Gloo از این API به عنوان پیکربندی خود برای ارائه ویژگی‌های PaaS مانند استفاده می‌کند، از جمله یک مدل استقرار سبز-آبی، اجرای خودکار TLS، زمان‌بندی و سایر ویژگی‌های مسیریابی پیشرفته.

پس از مدتی، می بینیم که غلاف های ما ناپدید شده اند (به دلیل اینکه ترافیک ورودی وجود ندارد):

kubectl get pod -n default

No resources found.
kubectl get deployment -n default
NAME                             DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
helloworld-go-fjp75-deployment   0         0         0            0           9m46s

در نهایت سعی خواهیم کرد به آنها برسیم. شما به راحتی و به راحتی می توانید URL مربوط به Knative Proxy را با استفاده از آن دریافت کنید glooctl:

glooctl proxy url --name knative-external-proxy
http://35.190.151.188:80

بدون نصب glooctl می توانید آدرس و پورت را در سرویس kube مشاهده کنید:

kubectl get svc -n gloo-system knative-external-proxy
NAME                     TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)                      AGE
knative-external-proxy   LoadBalancer   10.16.11.157   35.190.151.188   80:32168/TCP,443:30729/TCP   77m

بیایید برخی از داده ها را با استفاده از cURL اجرا کنیم:

curl -H "Host: helloworld-go.default.example.com" http://35.190.151.188
Hello Knative user!

Knative با استفاده از دروازه API با کارایی بالا و تمام پشته Gloo یک PaaS تقریباً برای توسعه دهندگان در بالای Kubernetes های خارج از جعبه ارائه می دهد. این پست فقط سطح گزینه های سفارشی سازی گسترده Knative و ویژگی های اضافی را خراشیده است. گلو هم همینطور!

با وجود اینکه Knative هنوز یک پروژه جوان است، تیم آن هر شش هفته یک بار نسخه های جدید را منتشر می کند و اجرای ویژگی های پیشرفته مانند استقرار خودکار TLS، مقیاس بندی خودکار کنترل پنل آغاز شده است. شانس خوبی وجود دارد که در نتیجه همکاری بین چندین شرکت ابری، و به عنوان مبنای ارائه جدید Google Cloud Run، Knative بتواند به گزینه اصلی برای محاسبات بدون سرور و PaaS در Kubernetes تبدیل شود. اخبار را دنبال کنید!

از ویراستاران SouthBridge
نظرات خوانندگان برای ما مهم است، بنابراین از شما می خواهیم در یک نظرسنجی کوتاه مرتبط با مقالات آینده در مورد Knative، Kubernetes، محاسبات بدون سرور شرکت کنید:

فقط کاربران ثبت نام شده می توانند در نظرسنجی شرکت کنند. ورود، لطفا.

آیا باید به نوشتن مقالات و راهنماهای مربوط به محاسبات Knative و بدون سرور ادامه دهم؟

  • بله لطفا.

  • نه ممنون.

28 کاربر رای دادند. 4 کاربر رای ممتنع دادند.

منبع: www.habr.com

اضافه کردن نظر