Dieser Artikel beendet die Reihe übersetzter Notizen des Autors zu OpenWhisk Priti Desai. Heute schauen wir uns den Prozess der Bereitstellung von OpenWhisk über Kubernetes mit korrigierten Befehlen an, um mit aktuellen Anwendungsversionen zu arbeiten. Außerdem wird der Prozess der Ausführung von OpenWhisk-Funktionen mit Knative und TektonCD auf Kubernetes unter Verwendung der Nodejs-Laufzeitumgebung behandelt.
Bereitstellung von OpenWhisk auf Kubernetes
Im Laufe einiger Tage experimentierte ich mit der Bereitstellung von OpenWhisk auf Kubernetes, um ein einfaches und schnelles Testgelände zu schaffen. Und da ich neu bei Kubernetes bin, glaube ich, dass eineinhalb Tage für die erfolgreiche Bereitstellung aufgewendet wurden. IN Dies Die Repositorys enthalten sehr klare Anweisungen für die Bereitstellung von OpenWhisk auf Kubernetes. Hier sind die Bereitstellungsanweisungen für Mac (Ich werde auch alles unter Linux machen, weil ich Linux bevorzuge. — ca. Übersetzer).
Installieren des Paketmanagers asdf, danach korrigieren wir automatisch ~/.bash_profile oder sein Äquivalent wie folgt:
[Auch hier können Sie diesen Schritt unter Linux überspringen. — ca. Übersetzer]
Minikube und Kubelet installieren:
$ asdf install kubectl 1.9.0
$ asdf global kubectl 1.9.0
$ asdf install minikube 0.25.2
$ asdf global minikube 0.25.2
[Es sind bestimmte Versionen installiert, aber ich habe alles auf die neuesten verfügbaren Versionen für Linux überprüft. Ich vermute, dass Sie die neueste Version sicher installieren können. — ca. Übersetzer]
Unter Linux wird dieser Schritt etwa so durchgeführt (alles wird in ~/bin abgelegt, was in meinem PATH aufgeführt ist, Anmerkung des Übersetzers):
Installieren Sie Helm und stellen Sie es damit bereit:
$ 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
[Unter Linux mit den neuesten Versionen (v3.0.1 war verfügbar) wird es etwas anders sein. — ca. Übersetzer]
$ wsk property set --apihost 192.168.99.100:31001
$ wsk property set --auth 23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP
Wir prüfen:
$ wsk -i list
Entities in namespace: default
packages
actions
triggers
rules
Probleme und Lösungen
getsockopt: Verbindung abgelehnt
$ 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
Überprüfen, ob sich die Container im Namespace befinden openwhisk im Zustand Running, Weil Manchmal stürzt es mit Fehlern ab CreateContainerConfigError.
Der Aufrufer wird noch initialisiert – Init:1/2
Der Download verschiedener Laufzeitumgebungen kann lange dauern. Um die Arbeit zu beschleunigen, können Sie in der Datei eine verkürzte Mindestliste angeben mycluster.yaml:
whisk:
runtimes: "runtimes-minimal-travis.json"
Behälter mit Namen -Pakete installieren- stürzt mit Fehler ab
Erhöhen Sie einfach die Zeitüberschreitungen für Lebendigkeitstests.
OpenWhisk über Knative installieren
Priti Desai führte die Installation auf einem Cluster in der IBM Cloud sowie auf einem regulären Minikube mithilfe von Knative Build und BuildTemplates durch. Ich werde auch auf Minukube installieren, je nachdem, wie es wurde beschrieben in unserem Blog früher - mit den neuesten Softwareversionen. Da Knative Build und BuildTemplates offiziell veraltet sind, werde ich den empfohlenen Ersatz in Form von Tekton Pipelines verwenden. Der Rest des Artikels wurde nach der Lektüre der Dokumentation zu Tekton Pipelines geschrieben, basiert aber auf den Ideen von Priti. Um zu funktionieren, benötigen Sie Zugriff auf eine Docker-Registrierung – ich werde, wie der ursprüngliche Autor, DockerHub verwenden.
Wir verwenden die aktuellen Daten für diese Datei:
$ sed 's/${DOCKER_USERNAME}/'"$DOCKER_USERNAME"'/' -i taskrun.yaml
Wir bewerben uns:
$ 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
Die Überprüfung der Arbeit besteht darin, den Namen des Pods abzurufen und seinen Status anzuzeigen. Sie können auch das Ausführungsprotokoll jedes Schritts anzeigen, zum Beispiel:
$ 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"}
Nach der Ausführung verfügen wir über ein Image in der Registry, das mit dem kn-Dienstprogramm bereitgestellt werden kann und für die Zusammenarbeit mit Knative-Diensten konzipiert ist, zum Beispiel:
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
Wenn Sie Gloo verwenden, können Sie die Funktionalität wie folgt überprüfen: