Ovaj članak završava seriju prevedenih bilješki o OpenWhisk-u od autora Priti Desai. Danas ćemo pogledati proces implementacije OpenWhisk-a preko Kubernetesa sa ispravljenim komandama za rad sa trenutnim verzijama aplikacija. Takođe će pokriti proces pokretanja OpenWhisk funkcija koristeći Knative i TektonCD na Kubernetes koristeći Nodejs runtime.
Postavljanje OpenWhisk-a na Kubernetes
Tokom nekoliko dana, eksperimentisao sam sa implementacijom OpenWhisk-a u Kubernetes kako bih napravio jednostavan i brz teren za testiranje. A pošto sam nov u Kubernetesu, vjerujem da je dan i po potrošeno na uspješnu implementaciju. IN ovo Spremišta imaju vrlo jasne upute za postavljanje OpenWhisk-a na Kubernetes. Ovdje su upute za implementaciju napravljene za Mac (Sve ću raditi i na Linuxu jer više volim Linux. — pribl. prevodilac).
Instaliranje menadžera paketa asdf, nakon čega automatski ispravljamo ~/.bash_profile ili njegov ekvivalent ovako:
[Opet, preskočite ovaj korak na Linuxu. — pribl. prevodilac]
Instalirajte minikube i 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
[određene verzije su instalirane, ali sam provjerio sve na najnovijim dostupnim verzijama za Linux; Pretpostavljam da možete bezbedno instalirati najnovije. — pribl. prevodilac]
Na Linuxu se ovaj korak radi otprilike ovako (sve se stavlja u ~/bin, koji je naveden u mom PATH, napomena prevodioca):
Instalirajte Helm i implementirajte ga koristeći ga:
$ 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
[Na Linuxu s najnovijim verzijama (v3.0.1 je bio dostupan) bit će malo drugačije. — pribl. prevodilac]
$ wsk property set --apihost 192.168.99.100:31001
$ wsk property set --auth 23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP
Provjeravamo:
$ wsk -i list
Entities in namespace: default
packages
actions
triggers
rules
Problemi i njihova rješenja
getsockopt: veza odbijena
$ 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
Provjera da su spremnici u imenskom prostoru openwhisk u statusu Running, jer ponekad se ruši sa greškama CreateContainerConfigError.
Invoker se još uvijek inicijalizira — Init:1/2
Proces preuzimanja različitih runtime okruženja može potrajati dugo. Da biste ubrzali stvari, možete odrediti skraćenu minimalnu listu u datoteci mycluster.yaml:
whisk:
runtimes: "runtimes-minimal-travis.json"
Kontejner sa imenom -install-packages- ruši na grešku
Samo povećajte vremensko ograničenje za testove živosti.
Instaliranje OpenWhisk-a preko Knative-a
Priti Desai je izvršio instalaciju na vrhu klastera u IBM oblaku, kao i na običnom minikubeu, koristeći Knative Build i BuildTemplates. Takođe ću instalirati na minukube, na osnovu toga kako opisano je na našem blogu ranije - koristeći najnovije verzije softvera. Budući da su Knative Build i BuildTemplates službeno zastarjeli, koristit ću preporučenu zamjenu u obliku Tekton Pipelines-a. Ostatak članka je napisan nakon čitanja dokumentacije za Tekton Pipelines, ali je zasnovan na Pritijevim idejama. Da biste radili, trebat će vam pristup nekom Docker registru - ja ću, kao i originalni autor, koristiti DockerHub.
$ sed 's/${DOCKER_USERNAME}/'"$DOCKER_USERNAME"'/' -i taskrun.yaml
Primjenjujemo:
$ 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
Provjera rada sastoji se od dobivanja imena pod i pregleda njegovog statusa. Također možete vidjeti zapisnik izvršenja svakog koraka, na primjer:
$ 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"}
Nakon izvršenja, imat ćemo sliku u Registry koja se može postaviti pomoću kn uslužnog programa, dizajniranog za rad s Knative servisima, na primjer:
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
Ako koristite Gloo, možete provjeriti njegovu funkcionalnost na sljedeći način: