Artikel ini mengakhiri rangkaian terjemahan catatan tentang OpenWhisk dari penulis Priti Desai. Hari ini kita akan melihat proses penerapan OpenWhisk melalui Kubernetes dengan perintah yang diperbaiki agar dapat bekerja dengan versi aplikasi saat ini. Ini juga akan mencakup proses menjalankan fungsi OpenWhisk menggunakan Knative dan TektonCD di Kubernetes menggunakan runtime Nodejs.
Menerapkan OpenWhisk di Kubernetes
Selama beberapa hari, saya bereksperimen dengan menerapkan OpenWhisk ke Kubernetes untuk menciptakan tempat pengujian yang sederhana dan cepat. Dan karena saya baru mengenal Kubernetes, saya yakin satu setengah hari telah dihabiskan untuk penerapan yang berhasil. DI DALAM ini Repositori memiliki instruksi yang sangat jelas untuk menerapkan OpenWhisk di Kubernetes. Berikut adalah instruksi penerapan yang dibuat untuk Mac (Saya juga akan melakukan semuanya di Linux karena saya lebih suka Linux. — kira-kira. Penerjemah).
Menginstal manajer paket asdf, setelah itu kami otomatis memperbaikinya ~/.bash_profile atau padanannya seperti ini:
[Sekali lagi, lewati langkah ini di Linux. — kira-kira. Penerjemah]
Instal minikube dan kubelet:
$ asdf install kubectl 1.9.0
$ asdf global kubectl 1.9.0
$ asdf install minikube 0.25.2
$ asdf global minikube 0.25.2
[versi tertentu telah diinstal, tetapi saya memeriksa semuanya pada versi terbaru yang tersedia untuk Linux; Saya menduga Anda dapat menginstal yang terbaru dengan aman. — kira-kira. Penerjemah]
Di Linux, langkah ini dilakukan seperti ini (semuanya dimasukkan ke dalam ~/bin, yang tercantum di PATH saya, catatan penerjemah):
$ 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
[Di Linux dengan versi terbaru (tersedia v3.0.1) akan sedikit berbeda. — kira-kira. Penerjemah]
$ wsk property set --apihost 192.168.99.100:31001
$ wsk property set --auth 23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP
Kami memeriksa:
$ wsk -i list
Entities in namespace: default
packages
actions
triggers
rules
Masalah dan solusi
getockopt: koneksi ditolak
$ 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
Memeriksa apakah kontainer berada di namespace openwhisk dalam status Running, Karena terkadang crash karena kesalahan CreateContainerConfigError.
Invoker masih melakukan inisialisasi — Init:1/2
Proses pengunduhan berbagai lingkungan runtime bisa memakan waktu lama. Untuk mempercepat, Anda dapat menentukan daftar minimum yang dipersingkat di file mycluster.yaml:
whisk:
runtimes: "runtimes-minimal-travis.json"
Wadah dengan nama -instal-paket- mogok karena Kesalahan
Tingkatkan saja batas waktu untuk tes keaktifan.
Menginstal OpenWhisk melalui Knative
Priti Desai melakukan instalasi di atas cluster di cloud IBM, serta di minikube biasa, menggunakan Knative Build dan BuildTemplates. Saya juga akan menginstal di atas minukube, berdasarkan caranya itu dijelaskan di blog kita tadi - menggunakan software versi terbaru. Karena Knative Build dan BuildTemplates sudah tidak digunakan lagi secara resmi, saya akan menggunakan pengganti yang direkomendasikan dalam bentuk Tekton Pipelines. Artikel selanjutnya ditulis setelah membaca dokumentasi Tekton Pipelines, namun didasarkan pada ide Priti. Agar berfungsi, Anda memerlukan akses ke beberapa Docker Registry - Saya, seperti penulis aslinya, akan menggunakan DockerHub.
$ sed 's/${DOCKER_USERNAME}/'"$DOCKER_USERNAME"'/' -i taskrun.yaml
Kami melamar:
$ 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
Pengecekan pekerjaan terdiri dari mendapatkan nama pod dan melihat statusnya. Anda juga dapat melihat log eksekusi setiap langkah, misalnya:
$ 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"}
Setelah eksekusi, kita akan memiliki gambar di Registry yang dapat digunakan menggunakan utilitas kn, yang dirancang untuk bekerja dengan layanan Knative, misalnya:
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
Jika Anda menggunakan Gloo, Anda dapat memeriksa fungsinya seperti ini: