ProHoster > Blog > Uprava > Brezstrežniško računalništvo z OpenWhisk, 4. del
Brezstrežniško računalništvo z OpenWhisk, 4. del
Ta članek zaključuje serijo avtorjevih prevedenih opomb o OpenWhisku Priti Desai. Danes si bomo ogledali postopek uvajanja OpenWhisk prek Kubernetesa s popravljenimi ukazi za delo s trenutnimi različicami aplikacij. Zajel bo tudi postopek izvajanja funkcij OpenWhisk z uporabo Knative in TektonCD na Kubernetesu z uporabo izvajalnega okolja Nodejs.
Uvajanje OpenWhisk v Kubernetes
V nekaj dneh sem eksperimentiral z uvajanjem OpenWhiska v Kubernetes, da bi ustvaril preprosto in hitro poligon. In ker sem nov v Kubernetesu, verjamem, da je bil dan in pol porabljen za uspešno uvajanje. IN to Repozitoriji imajo zelo jasna navodila za uvajanje OpenWhisk v Kubernetes. Tukaj so navodila za uvajanje za Mac (Tudi jaz bom delal vse na Linuxu, ker imam raje Linux. — pribl. prevajalec).
Namestitev upravitelja paketov asdf, po katerem samodejno popravimo ~/.bash_profile ali enakovreden kot je ta:
[Še enkrat, preskočite ta korak v sistemu Linux. — pribl. prevajalec]
Namestite minikube in 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
[nameščene so določene različice, vendar sem vse preveril na zadnjih razpoložljivih različicah za Linux; Sumim, da lahko varno namestite najnovejšo. — pribl. prevajalec]
V Linuxu se ta korak izvede približno takole (vse je dano v ~/bin, ki je naveden v moji PATH, opomba prevajalca):
$ 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 z zadnjimi različicami (na voljo je bila v3.0.1) bo malo drugače. — pribl. prevajalec]
$ wsk property set --apihost 192.168.99.100:31001
$ wsk property set --auth 23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP
Preverjamo:
$ wsk -i list
Entities in namespace: default
packages
actions
triggers
rules
Problemi in rešitve
getsockopt: povezava zavrnjena
$ 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
Preverjanje, ali so vsebniki v imenskem prostoru openwhisk v statusu Running, Ker včasih se zruši z napakami CreateContainerConfigError.
Invoker se še inicializira — Init:1/2
Postopek prenosa različnih izvajalnih okolij lahko traja dolgo. Če želite stvari pospešiti, lahko v datoteki določite skrajšan minimalni seznam mycluster.yaml:
whisk:
runtimes: "runtimes-minimal-travis.json"
Posoda z imenom -namestitveni-paketi- zruši na Error
Samo povečajte časovne omejitve za preizkuse vzdržljivosti.
Namestitev OpenWhisk preko Knative
Priti Desai je namestitev izvedla na vrhu gruče v IBM-ovem oblaku, pa tudi na običajnem minikubu, z uporabo Knative Build in BuildTemplates. Namestil bom tudi na vrh minukube, glede na to, kako je bilo opisano v našem blogu prej - z uporabo najnovejših različic programske opreme. Ker sta bili Knative Build in BuildTemplates uradno opuščeni, bom uporabil priporočeno zamenjavo v obliki Tekton Pipelines. Preostali del članka je bil napisan po branju dokumentacije za Tekton Pipelines, vendar temelji na idejah Pritija. Za delo boste potrebovali dostop do nekega registra Docker Registry - jaz bom, tako kot prvotni avtor, uporabljal DockerHub.
$ sed 's/${DOCKER_USERNAME}/'"$DOCKER_USERNAME"'/' -i taskrun.yaml
Uporabljamo:
$ 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
Preverjanje dela vključuje pridobitev imena sklopa in ogled njegovega stanja. Ogledate si lahko tudi dnevnik izvajanja vsakega koraka, na primer:
$ 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"}
Po izvedbi bomo imeli v registru sliko, ki jo je mogoče namestiti s pripomočkom kn, zasnovanim za delo s storitvami Knative, na primer:
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
Če uporabljate Gloo, lahko njegovo delovanje preverite takole: