ProHoster > بلوق > إدارة > الحوسبة بدون خادم باستخدام OpenWhisk، الجزء 4
الحوسبة بدون خادم باستخدام OpenWhisk، الجزء 4
تنهي هذه المقالة سلسلة الملاحظات المترجمة حول OpenWhisk من المؤلف بريتي ديساي. سنلقي نظرة اليوم على عملية نشر OpenWhisk عبر Kubernetes باستخدام الأوامر المصححة للعمل مع الإصدارات الحالية من التطبيقات. وسيغطي أيضًا عملية تشغيل وظائف OpenWhisk باستخدام Knative وTektonCD على Kubernetes باستخدام وقت تشغيل Nodejs.
نشر OpenWhisk على Kubernetes
على مدار بضعة أيام، قمت بتجربة نشر OpenWhisk في Kubernetes لإنشاء ساحة اختبار بسيطة وسريعة. وبما أنني جديد على Kubernetes، أعتقد أنه تم قضاء يوم ونصف في النشر الناجح. في هذا تحتوي المستودعات على تعليمات واضحة جدًا لنشر OpenWhisk على Kubernetes. فيما يلي تعليمات النشر المعدة لنظام التشغيل Mac (سأفعل أيضًا كل شيء على Linux لأنني أفضل Linux. - تقريبا. مترجم).
تثبيت مدير الحزم asdf، وبعد ذلك نقوم بالتصحيح تلقائيًا ~/.bash_profile أو ما يعادلها هكذا:
$ brew install kubernetes-helm
$ helm init # init Helm Tiller, не нужно на Helm v3+
$ kubectl get pods -n kube-system # verify that tiller-deploy is in the running state, не нужно на helm v3+
$ kubectl create clusterrolebinding tiller-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default
$ helm install ./openwhisk/helm/ --namespace=openwhisk -f mycluster.yaml
[في نظام التشغيل Linux بأحدث الإصدارات (كان الإصدار 3.0.1 متاحًا) سيكون الأمر مختلفًا بعض الشيء. - تقريبا. مترجم]
$ wsk property set --apihost 192.168.99.100:31001
$ wsk property set --auth 23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP
نتحقق من:
$ wsk -i list
Entities in namespace: default
packages
actions
triggers
rules
المشاكل والحلول
getockopt: تم رفض الاتصال
$ wsk -i list
error: Unable to obtain the list of entities for namespace 'default': Get http://192.168.99.100:31001/api/v1/namespaces/_/actions?limit=0&skip=0: dial tcp 192.168.99.100:31001: getsockopt: connection refused
التحقق من وجود الحاويات في مساحة الاسم openwhisk في الوضع Running، لأن في بعض الأحيان يتعطل مع الأخطاء CreateContainerConfigError.
لا يزال المستدعي قيد التهيئة - Init:1/2
يمكن أن تستغرق عملية تنزيل بيئات التشغيل المختلفة وقتًا طويلاً. لتسريع الأمور، يمكنك تحديد قائمة مختصرة بالحد الأدنى في الملف mycluster.yaml:
whisk:
runtimes: "runtimes-minimal-travis.json"
حاوية بالاسم -تثبيت-الحزم- تعطل إلى خطأ
ما عليك سوى زيادة المهلات الخاصة باختبارات الحيوية.
تثبيت OpenWhisk على Knative
نفذت Priti Desai عملية التثبيت أعلى مجموعة في سحابة IBM، وكذلك على minikube عادي، باستخدام Knative Build وBuildTemplates. سأقوم أيضًا بالتثبيت فوق minukube، بناءً على كيفية القيام بذلك تم وصفه في مدونتنا سابقًا - باستخدام أحدث إصدارات البرامج. نظرًا لإهمال Knative Build وBuildTemplates رسميًا، سأستخدم البديل الموصى به في شكل Tekton Pipelines. تمت كتابة بقية المقالة بعد قراءة الوثائق الخاصة بخطوط أنابيب Tekton، ولكنها مبنية على أفكار بريتي. للعمل، ستحتاج إلى الوصول إلى بعض سجلات Docker - أنا، مثل المؤلف الأصلي، سأستخدم DockerHub.
$ sed 's/${DOCKER_USERNAME}/'"$DOCKER_USERNAME"'/' -i taskrun.yaml
نطبق:
$ kubectl apply -f taskrun.yaml
pipelineresource.tekton.dev/openwhisk-nodejs-runtime-git created
pipelineresource.tekton.dev/openwhisk-nodejs-helloworld-image created
taskrun.tekton.dev/openwhisk-nodejs-helloworld created
يتكون فحص العمل من الحصول على اسم الكبسولة وعرض حالتها. يمكنك أيضًا عرض سجل التنفيذ لكل خطوة، على سبيل المثال:
$ kubectl get taskrun
NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME
openwhisk-nodejs-helloworld True Succeeded 5m15s 44s
$ kubectl get pod openwhisk-nodejs-helloworld-pod-4640d3
NAME READY STATUS RESTARTS AGE
openwhisk-nodejs-helloworld-pod-4640d3 0/6 Completed 0 5m20s
$ kubectl logs openwhisk-nodejs-helloworld-pod-4640d3 -c step-git-source-openwhisk-nodejs-runtime-git-r8vhr
{"level":"info","ts":1576532931.5880227,"logger":"fallback-logger","caller":"logging/config.go:69","msg":"Fetch GitHub commit ID from kodata failed: open /var/run/ko/refs/heads/master: no such file or directory"}
{"level":"info","ts":1576532936.538926,"logger":"fallback-logger","caller":"git/git.go:81","msg":"Successfully cloned https://github.com/apache/openwhisk-runtime-nodejs.git @ master in path /workspace/runtime-git"}
{"level":"warn","ts":1576532936.5395331,"logger":"fallback-logger","caller":"git/git.go:128","msg":"Unexpected error: creating symlink: symlink /tekton/home/.ssh /root/.ssh: file exists"}
{"level":"info","ts":1576532936.8202565,"logger":"fallback-logger","caller":"git/git.go:109","msg":"Successfully initialized and updated submodules in path /workspace/runtime-git"}
بعد التنفيذ، سيكون لدينا صورة في السجل يمكن نشرها باستخدام الأداة المساعدة kn، المصممة للعمل مع خدمات Knative، على سبيل المثال:
kn service create nodejs-helloworld --image docker.io/${DOCKER_USERNAME}/openwhisk-nodejs-helloworld
Service 'nodejs-helloworld' successfully created in namespace 'default'.
Waiting for service 'nodejs-helloworld' to become ready ... OK
Service URL:
http://nodejs-helloworld.default.example.com
إذا كنت تستخدم Gloo، فيمكنك التحقق من وظائفه مثل هذا: