Tento článek končí sérii přeložených poznámek o OpenWhisk od autora Priti Desai. Dnes se podíváme na proces nasazení OpenWhisk přes Kubernetes s opravenými příkazy pro práci s aktuálními verzemi aplikací. Bude také pokrývat proces spouštění funkcí OpenWhisk pomocí Knative a TektonCD na Kubernetes pomocí runtime Nodejs.
Nasazení OpenWhisk na Kubernetes
Během několika dní jsem experimentoval s nasazením OpenWhisk do Kubernetes, abych vytvořil jednoduché a rychlé testovací prostředí. A protože jsem v Kubernetes nový, věřím, že na úspěšné nasazení byl vynaložen den a půl. V tohle Úložiště mají velmi jasné pokyny pro nasazení OpenWhisk na Kubernetes. Zde jsou pokyny k nasazení vytvořené pro Mac (Také budu dělat vše na Linuxu, protože preferuji Linux. - Cca. překladatel).
Instalace správce balíčků asdf, po kterém automaticky opravíme ~/.bash_profile nebo jeho ekvivalent takto:
[V Linuxu tento krok opět přeskočte. - Cca. překladatel]
Nainstalujte minikube a 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
[jsou nainstalovány konkrétní verze, ale vše jsem zkontroloval na nejnovějších dostupných verzích pro Linux; Mám podezření, že můžete bezpečně nainstalovat nejnovější. - Cca. překladatel]
V Linuxu se tento krok provádí nějak takto (vše je vloženo do ~/bin, který je uveden v mé PATH, poznámka překladatele):
$ 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 nejnovějšími verzemi (k dispozici byla v3.0.1) to bude trochu jiné. - Cca. překladatel]
$ wsk property set --apihost 192.168.99.100:31001
$ wsk property set --auth 23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP
Zkontrolujeme:
$ wsk -i list
Entities in namespace: default
packages
actions
triggers
rules
Problémy a řešení
getockopt: připojení odmítnuto
$ 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
Kontrola, zda jsou kontejnery ve jmenném prostoru openwhisk ve stavu Running, protože někdy spadne s chybami CreateContainerConfigError.
Invoker se stále inicializuje — Init:1/2
Proces stahování různých běhových prostředí může trvat dlouho. Pro urychlení můžete v souboru zadat zkrácený minimální seznam mycluster.yaml:
whisk:
runtimes: "runtimes-minimal-travis.json"
Kontejner s názvem -install-packages- havaruje na Error
Stačí prodloužit časové limity pro testy živosti.
Instalace OpenWhisk přes Knative
Priti Desai provedla instalaci na vrchol clusteru v cloudu IBM a také na běžný minikube pomocí Knative Build a BuildTemplates. Nainstaluji také na vrchol minukube, podle toho, jak bylo to popsáno v našem blogu dříve – pomocí nejnovějších verzí softwaru. Vzhledem k tomu, že Knative Build a BuildTemplates byly oficiálně ukončeny, použiji doporučenou náhradu v podobě Tekton Pipelines. Zbytek článku byl napsán po přečtení dokumentace pro Tekton Pipelines, ale je založen na myšlenkách Priti. K práci budete potřebovat přístup k nějakému registru Docker – já, stejně jako původní autor, budu používat DockerHub.
$ sed 's/${DOCKER_USERNAME}/'"$DOCKER_USERNAME"'/' -i taskrun.yaml
Aplikujeme:
$ 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
Kontrola práce spočívá v získání názvu modulu a zobrazení jeho stavu. Můžete si také prohlédnout protokol provedení každého kroku, například:
$ 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 spuštění budeme mít v registru obraz, který lze nasadit pomocí nástroje kn určeného pro práci se službami Knative, například:
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
Pokud používáte Gloo, můžete zkontrolovat jeho funkčnost takto: