Questu articulu finisce a serie di note tradutte nantu à OpenWhisk da l'autore Priti Desai. Oghje fighjemu u prucessu di implementà OpenWhisk nantu à Kubernetes cù cumandamenti curretti per travaglià cù e versioni attuali di l'applicazioni. Hè ancu copre u prucessu di eseguisce e funzioni OpenWhisk cù Knative è TektonCD in Kubernetes cù u runtime Nodejs.
Implementazione di OpenWhisk in Kubernetes
In u corsu di uni pochi di ghjorni, aghju sperimentatu cù l'implementazione di OpenWhisk à Kubernetes per creà un terrenu di teste simplice è veloce. E postu chì sò novu à Kubernetes, crede chì un ghjornu è mezu hè statu passatu per implementà successu. IN questu I repositori anu struzzioni assai chjaru per implementà OpenWhisk in Kubernetes. Eccu l'istruzzioni di implementazione fatta per Mac (Faraghju ancu tuttu in Linux perchè preferite Linux. - ca. traduttore).
Installazione di u gestore di pacchetti asdf, dopu chì correggemu automaticamente ~/.bash_profile o u so equivalente cum'è questu:
[Di novu, salta stu passu in Linux. - ca. traduttore]
Installa minikube è 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
[versioni specifiche sò installate, ma aghju verificatu tuttu nantu à l'ultime versioni dispunibili per Linux; Sospettate chì pudete installà in modu sicuru l'ultime. - ca. traduttore]
In Linux, stu passu hè fattu qualcosa cusì (tuttu hè messu in ~/bin, chì hè listatu in u mo PATH, nota di u traduttore):
$ 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
[In Linux cù l'ultime versioni (v3.0.1 era dispunibule) serà un pocu sfarente. - ca. traduttore]
$ wsk property set --apihost 192.168.99.100:31001
$ wsk property set --auth 23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP
Verificate:
$ wsk -i list
Entities in namespace: default
packages
actions
triggers
rules
I prublemi è e so suluzione
getsockopt: cunnessione rifiutata
$ 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
Verificate chì i cuntenituri sò in u namespace openwhisk in statu Running, perchè certe volte si scontra cù errori CreateContainerConfigError.
L'invocatore hè sempre inizializatu - Init:1/2
U prucessu di scaricà diversi ambienti runtime pò piglià assai tempu. Per accelerà e cose, pudete specificà una lista minima abbreviata in u schedariu mycluster.yaml:
whisk:
runtimes: "runtimes-minimal-travis.json"
Container cù nome -installà-pacchetti- crashes à Errore
Basta aumentà i timeout per i testi di vita.
Installazione di OpenWhisk sopra Knative
Priti Desai hà realizatu a stallazione nantu à un cluster in u cloud IBM, è ancu nantu à un minikube regulare, utilizendu Knative Build è BuildTemplates. Stallaraghju ancu nantu à minukube, basatu annantu à cumu hè statu discrittu in u nostru blog prima - utilizendu l'ultime versioni di software. Siccomu Knative Build è BuildTemplates sò stati ufficialmente obsoleti, aghju aduprà a sustituzione cunsigliata in a forma di Tekton Pipelines. U restu di l'articulu hè statu scrittu dopu avè lettu a documentazione per Tekton Pipelines, ma hè basatu annantu à l'idee di Priti. Per travaglià, avete bisognu di accessu à qualchì Docker Registry - I, cum'è l'autore originale, aduprà DockerHub.
$ sed 's/${DOCKER_USERNAME}/'"$DOCKER_USERNAME"'/' -i taskrun.yaml
Applicamu:
$ 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
A verificazione di u travagliu hè di ottene u nome di u pod è vede u so statutu. Pudete ancu vede u logu di esecuzione di ogni passu, per esempiu:
$ 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"}
Dopu l'esekzione, averemu una maghjina in u Registru chì pò esse implementata cù l'utilità kn, pensata per travaglià cù servizii Knative, per esempiu:
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
Se utilizate Gloo, pudete verificà a so funziunalità cusì: