Bài viết này kết thúc loạt bài dịch về OpenWhisk của tác giả Priti Desai. Hôm nay chúng ta sẽ xem xét quá trình triển khai OpenWhisk trên Kubernetes bằng các lệnh được sửa để hoạt động với các phiên bản ứng dụng hiện tại. Nó cũng sẽ đề cập đến quá trình chạy các hàm OpenWhisk bằng Knative và TektonCD trên Kubernetes bằng thời gian chạy Nodejs.
Triển khai OpenWhisk trên Kubernetes
Trong vài ngày, tôi đã thử nghiệm triển khai OpenWhisk cho Kubernetes để tạo nền tảng thử nghiệm đơn giản và nhanh chóng. Và vì tôi mới làm quen với Kubernetes nên tôi tin rằng tôi đã dành một ngày rưỡi để triển khai thành công. TRONG Điều này Các kho lưu trữ có hướng dẫn rất rõ ràng để triển khai OpenWhisk trên Kubernetes. Dưới đây là hướng dẫn triển khai được tạo cho Mac (Tôi cũng sẽ làm mọi thứ trên Linux vì tôi thích Linux hơn. - khoảng. người dịch).
Cài đặt trình quản lý gói asdf, sau đó chúng tôi tự động sửa ~/.bash_profile hoặc tương đương như thế này:
[Một lần nữa, bỏ qua bước này trên Linux. - khoảng. người dịch]
Cài đặt minikube và 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
[các phiên bản cụ thể đã được cài đặt, nhưng tôi đã kiểm tra mọi thứ trên các phiên bản mới nhất hiện có dành cho Linux; Tôi nghi ngờ rằng bạn có thể cài đặt phiên bản mới nhất một cách an toàn. - khoảng. người dịch]
Trên Linux, bước này được thực hiện giống như thế này (mọi thứ được đặt trong ~/bin, được liệt kê trong PATH của tôi, ghi chú của người dịch):
Cài đặt Helm và triển khai nó bằng cách sử dụng nó:
$ 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
[Trên Linux với các phiên bản mới nhất (đã có v3.0.1) thì sẽ khác một chút. - khoảng. người dịch]
$ wsk property set --apihost 192.168.99.100:31001
$ wsk property set --auth 23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP
Chúng tôi kiểm tra:
$ wsk -i list
Entities in namespace: default
packages
actions
triggers
rules
Các vấn đề và giải pháp
getockopt: kết nối bị từ chối
$ 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
Kiểm tra xem các thùng chứa có trong không gian tên không openwhisk trong trạng thái Running, bởi vì đôi khi nó bị treo và có lỗi CreateContainerConfigError.
Invoker vẫn đang khởi tạo — Init:1/2
Quá trình tải xuống các môi trường thời gian chạy khác nhau có thể mất nhiều thời gian. Để tăng tốc mọi thứ, bạn có thể chỉ định danh sách tối thiểu rút gọn trong tệp mycluster.yaml:
whisk:
runtimes: "runtimes-minimal-travis.json"
Vùng chứa có tên -cài đặt-gói- gặp lỗi
Chỉ cần tăng thời gian chờ cho các bài kiểm tra độ sống.
Cài đặt OpenWhisk qua Knative
Priti Desai đã tiến hành cài đặt trên một cụm trong đám mây IBM, cũng như trên một minikube thông thường, sử dụng Knative Build và BuildTemplates. Tôi cũng sẽ cài đặt trên minukube, dựa trên cách nó đã được mô tả trong blog của chúng tôi trước đó - sử dụng các phiên bản phần mềm mới nhất. Vì Knative Build và BuildTemplates đã chính thức không được dùng nữa nên tôi sẽ sử dụng giải pháp thay thế được đề xuất dưới dạng Tekton Pipelines. Phần còn lại của bài viết được viết sau khi đọc tài liệu về Tekton Pipelines nhưng dựa trên ý tưởng của Priti. Để làm việc, bạn sẽ cần quyền truy cập vào một số Docker Đăng ký - Tôi, giống như tác giả ban đầu, sẽ sử dụng DockerHub.
$ sed 's/${DOCKER_USERNAME}/'"$DOCKER_USERNAME"'/' -i taskrun.yaml
Chúng tôi áp dụng:
$ 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
Kiểm tra công việc bao gồm lấy tên của nhóm và xem trạng thái của nó. Bạn cũng có thể xem nhật ký thực hiện của từng bước, ví dụ:
$ 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"}
Sau khi thực thi, chúng ta sẽ có một image trong Sổ đăng ký có thể được triển khai bằng tiện ích kn, được thiết kế để hoạt động với các dịch vụ Knative, ví dụ:
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
Nếu sử dụng Gloo, bạn có thể kiểm tra chức năng của nó như sau: