Den här artikeln avslutar serien med översatta anteckningar om OpenWhisk från författaren Priti Desai. Idag ska vi titta på processen att distribuera OpenWhisk över Kubernetes med korrigerade kommandon för att fungera med aktuella versioner av applikationer. Det kommer också att täcka processen att köra OpenWhisk-funktioner med Knative och TektonCD på Kubernetes med Nodejs runtime.
Distribuera OpenWhisk på Kubernetes
Under loppet av några dagar experimenterade jag med att distribuera OpenWhisk till Kubernetes för att skapa en enkel och snabb testplats. Och eftersom jag är ny på Kubernetes tror jag att en och en halv dag gick åt till framgångsrik implementering. I detta Lagren har mycket tydliga instruktioner för att distribuera OpenWhisk på Kubernetes. Här är installationsinstruktionerna gjorda för Mac (Jag kommer också att göra allt på Linux eftersom jag föredrar Linux. - cirka. översättare).
Installerar pakethanteraren asdf, varefter vi korrigerar automatiskt ~/.bash_profile eller motsvarande så här:
[Återigen, hoppa över det här steget på Linux. - cirka. översättare]
Installera minikube och 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
[specifika versioner är installerade, men jag kollade allt på de senaste tillgängliga versionerna för Linux; Jag misstänker att du säkert kan installera senaste. - cirka. översättare]
På Linux görs det här steget ungefär så här (allt läggs i ~/bin, som listas i min PATH, översättarens anteckning):
$ 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
[På Linux med de senaste versionerna (v3.0.1 var tillgänglig) blir det lite annorlunda. - cirka. översättare]
$ wsk property set --apihost 192.168.99.100:31001
$ wsk property set --auth 23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP
Vi kontrollerar:
$ wsk -i list
Entities in namespace: default
packages
actions
triggers
rules
Problem och lösningar
getsockopt: anslutning nekad
$ 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
Kontrollera att behållarna finns i namnområdet openwhisk i status Running, därför att ibland kraschar det med fel CreateContainerConfigError.
Invoker initierar fortfarande — Init:1/2
Processen att ladda ner olika runtime-miljöer kan ta lång tid. För att påskynda saker och ting kan du ange en förkortad minimilista i filen mycluster.yaml:
whisk:
runtimes: "runtimes-minimal-travis.json"
Behållare med namn -installera-paket- kraschar till Error
Öka bara timeouts för livlighetstester.
Installera OpenWhisk över Knative
Priti Desai utförde installationen ovanpå ett kluster i IBM-molnet, såväl som på en vanlig minikube, med hjälp av Knative Build och BuildTemplates. Jag kommer också att installera ovanpå minukube, baserat på hur det beskrevs i vår blogg tidigare - med de senaste mjukvaruversionerna. Eftersom Knative Build and BuildTemplates officiellt har fasats ut kommer jag att använda den rekommenderade ersättningen i form av Tekton Pipelines. Resten av artikeln skrevs efter att ha läst dokumentationen för Tekton Pipelines, men är baserad på Pritis idéer. För att fungera behöver du tillgång till något Docker Registry - jag, precis som den ursprungliga författaren, kommer att använda DockerHub.
$ sed 's/${DOCKER_USERNAME}/'"$DOCKER_USERNAME"'/' -i taskrun.yaml
Vi tillämpar:
$ 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
Att kontrollera arbetet består av att få poddens namn och se dess status. Du kan också se exekveringsloggen för varje steg, till exempel:
$ 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"}
Efter exekvering kommer vi att ha en bild i registret som kan distribueras med hjälp av kn-verktyget, designat för att fungera med Knative-tjänster, till exempel:
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
Om du använder Gloo kan du kontrollera dess funktion så här: