Dit artikel beëindigt de reeks vertaalde opmerkingen over OpenWhisk van de auteur Priti Desai. Vandaag kijken we naar het proces van het implementeren van OpenWhisk via Kubernetes met gecorrigeerde opdrachten om met de huidige versies van applicaties te werken. Het behandelt ook het proces van het uitvoeren van OpenWhisk-functies met behulp van Knative en TektonCD op Kubernetes met behulp van de Nodejs-runtime.
OpenWhisk implementeren op Kubernetes
In de loop van een paar dagen heb ik geëxperimenteerd met de implementatie van OpenWhisk in Kubernetes om een eenvoudige en snelle proeftuin te creëren. En aangezien ik nieuw ben bij Kubernetes, geloof ik dat er anderhalve dag aan een succesvolle implementatie is besteed. IN deze De repositories hebben zeer duidelijke instructies voor het implementeren van OpenWhisk op Kubernetes. Hier zijn de implementatie-instructies gemaakt voor Mac (Ik zal ook alles op Linux doen omdat ik de voorkeur geef aan Linux. — ca. vertaler).
De pakketbeheerder installeren asdf, waarna we automatisch corrigeren ~/.bash_profile of het equivalent hiervan, zoals dit:
[Nogmaals, sla deze stap over op Linux. — ca. vertaler]
Installeer minikube en 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
[specifieke versies zijn geïnstalleerd, maar ik heb alles gecontroleerd op de nieuwste beschikbare versies voor Linux; Ik vermoed dat je de nieuwste versie veilig kunt installeren. — ca. vertaler]
Op Linux wordt deze stap ongeveer als volgt uitgevoerd (alles wordt in ~/bin geplaatst, wat vermeld staat in mijn PATH, de opmerking van de vertaler):
Installeer Helm en implementeer het met behulp van:
$ 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
[Op Linux met de nieuwste versies (v3.0.1 was beschikbaar) zal het een beetje anders zijn. — ca. vertaler]
$ wsk property set --apihost 192.168.99.100:31001
$ wsk property set --auth 23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP
controleren:
$ wsk -i list
Entities in namespace: default
packages
actions
triggers
rules
Problemen en oplossingen
getockopt: verbinding geweigerd
$ 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
Controleren of de containers zich in de naamruimte bevinden openwhisk in status Running, omdat soms crasht het met fouten CreateContainerConfigError.
Invoker is nog steeds aan het initialiseren - Init:1/2
Het downloaden van verschillende runtime-omgevingen kan lang duren. Om de zaken te versnellen, kunt u een verkorte minimumlijst in het bestand opgeven mycluster.yaml:
whisk:
runtimes: "runtimes-minimal-travis.json"
Houder met naam -installatiepakketten- crasht naar Error
Vergroot gewoon de time-outs voor liveness-tests.
OpenWhisk installeren via Knative
Priti Desai voerde de installatie uit bovenop een cluster in de IBM-cloud, maar ook op een reguliere minikube, met behulp van Knative Build en BuildTemplates. Ik zal ook bovenop minukube installeren, op basis van hoe het werd beschreven in onze blog eerder - met behulp van de nieuwste softwareversies. Omdat Knative Build en BuildTemplates officieel verouderd zijn, zal ik de aanbevolen vervanging gebruiken in de vorm van Tekton Pipelines. De rest van het artikel is geschreven na het lezen van de documentatie voor Tekton Pipelines, maar is gebaseerd op de ideeën van Priti. Om te werken heb je toegang nodig tot een Docker-register. Ik zal, net als de oorspronkelijke auteur, DockerHub gebruiken.
Voor dit bestand hanteren wij de actuele gegevens:
$ sed 's/${DOCKER_USERNAME}/'"$DOCKER_USERNAME"'/' -i taskrun.yaml
Wij passen toe:
$ 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
Het controleren van het werk bestaat uit het ophalen van de naam van de pod en het bekijken van de status ervan. U kunt ook het uitvoeringslogboek van elke stap bekijken, bijvoorbeeld:
$ 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"}
Na uitvoering hebben we een afbeelding in het register die kan worden geïmplementeerd met behulp van het kn-hulpprogramma, ontworpen om te werken met Knative-services, bijvoorbeeld:
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
Als u Gloo gebruikt, kunt u de functionaliteit als volgt controleren: