
Ez a cikk zárja a Priti Desai által írt OpenWhisk fordítási jegyzetek ciklusát. . Ma az OpenWhisk Kubernetes alá telepítési folyamatát nézzük meg, javított parancsokkal a legfrissebb alkalmazásokkal való működéshez. Azt is leírjuk, hogyan lehet OpenWhisk funkciókat indítani Knative és TektonCD használatával Kubernetesben Nodejs végrehajtási környezetben.
OpenWhisk telepítése Kubernetesre
Néhány nap alatt kísérletet tettem az OpenWhisk Kubernetesbe való telepítésére, hogy egyszerű és gyors próbapályát hozzak létre a feladatok gyakorlásához. Mivel újonc vagyok a Kubernetesben, azt hiszem, másfél napot töltöttem a sikeres telepítéssel. A repóban nagyon világos útmutatók találhatók az OpenWhisk Kubernetesre való telepítéséhez. Itt lesznek útmutatók a telepítésekhez, amelyeket Mac-re készítettek (én mindent Linuxon fogok csinálni, mert a Linuxot részesítem előnyben. — a fordító megjegyzése).
- Telepítjük a csomagkezelőt
asdf, majd automatikusan javítsuk~/.bash_profilevagy annak megfelelőjét így:
$ brew install asdf
$ [ -s "/usr/local/opt/asdf/asdf.sh" ] && . /usr/local/opt/asdf/asdf.sh
$ source ~/.bash_profile[Linuxon erre a lépésre nincs szükség, bár a brew elérhető. — fordító megjegyzése]
- Pluginok hozzáadása
minikubeéskubelet:
$ asdf plugin-add kubectl
$ asdf plugin-add minikube[Újra kihagyjuk ezt a lépést Linuxon. — fordító megjegyzése]
- Installáljuk a minikube-ot és a kubelet-et:
$ asdf install kubectl 1.9.0
$ asdf global kubectl 1.9.0
$ asdf install minikube 0.25.2
$ asdf global minikube 0.25.2[a konkrét verziók telepítése, de mindent a legfrissebb elérhető verziókkal ellenőriztem Linuxra; gyanítom, hogy nyugodtan telepíthető a legújabb. — fordító megjegyzése]
Linuxon a lépés így néz ki (mindent a ~/bin könyvtárba telepítünk, amelyet PATH-ban megadtam, a fordító megjegyzése):
$ curl -L0 minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube && mv minikube ~/bin/
$ curl -L0 https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x kubectl && mv kubectl ~/bin/- Virtuális gép létrehozása minikube-val (a VirtualBoxnak telepítve kell lennie):
$ minikube start --cpus 2 --memory 4096 --kubernetes-version=v1.9.0 --extra-config=apiserver.Authorization.Mode=RBAC[Minden működik a parancssal minikube start , paraméterek nélkül, alapértelmezett értékekkel. — fordító megjegyzése]
$ minikube start
minikube v1.5.2 Debian 8.11-en
Automatikusan a 'virtualbox' meghajtót választotta
VM indító kép letöltése ...
> minikube-v1.5.1.iso.sha256: 65 B / 65 B [--------------] 100.00% ? p/s 0s
> minikube-v1.5.1.iso: 143.76 MiB / 143.76 MiB [-] 100.00% 5.63 MiB p/s 26s
Virtualbox VM létrehozása (CPU=2, Memória=4096MB, Lemez=20000MB) ...
Kubernetes v1.16.2 előkészítése a 'Docker 18.09.9'-en ...
kubelet v1.16.2 letöltése
kubeadm v1.16.2 letöltése
Képek lehúzása ...
Kubernetes indítása ... Várakozás: apiserver
Kész! A kubectl most a "minikube"-ot használja- A Docker hálózatot átkapcsoljuk promiszkusz módra:
$ minikube ssh -- sudo ip link set docker0 promisc on- Namespace-t hozunk létre és címkézzük a munkacsomópontot:
$ kubectl create namespace openwhisk
$ kubectl label nodes --all openwhisk-role=invoker- Megkapjuk a tároló tartalmát, és felülírjuk az ingress típust a mycluster.yaml fájlban:
$ git clone https://github.com/apache/incubator-openwhisk-deploy-kube.git
$ cd incubator-openwhisk-deploy-kube/
$ cat < mycluster.yaml
whisk:
ingress:
type: NodePort
api_host_name: 192.168.99.100
api_host_port: 31001
nginx:
httpsNodePort: 31001
EOF- Helm telepítése és telepítés végrehajtása vele:
$ brew install kubernetes-helm
$ helm init # helm Tiller inicializálása, nem szükséges a Helm v3+ esetén
$ kubectl get pods -n kube-system # ellenőrizd, hogy a tiller-deploy futó állapotban van, nem szükséges helm v3+ esetén
$ kubectl create clusterrolebinding tiller-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default
$ helm install ./openwhisk/helm/ --namespace=openwhisk -f mycluster.yaml[Linuxon a legfrissebb verziókkal (elérhető volt a v3.0.1) kicsit másképp fog kinézni. — fordító megjegyzése]
$ curl -L0 https://get.helm.sh/helm-v3.0.1-linux-amd64.tar.gz | tar -xzvf - linux-amd64/helm --strip-components=1; sudo mv helm /usr/local/bin
$ kubectl create clusterrolebinding tiller-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default
$ helm install ./openwhisk/helm/ --namespace=openwhisk --generate-name -f mycluster.yaml- Ellenőrizzük, hogy minden működik (STATUS = Running vagy Completed):
$ kubectl get pods -n openwhisk
NAME READY STATUS RESTARTS AGE
openwhisk-1576070780-alarmprovider-6868dc694-plvpf 1/1 Running 1 1d5h
openwhisk-1576070780-apigateway-8d56f4979-825hf 1/1 Running 1 1d5h
openwhisk-1576070780-cloudantprovider-544bb46596-9scph 1/1 Running 1 1d5h
openwhisk-1576070780-controller-0 1/1 Running 2 1d5h
openwhisk-1576070780-couchdb-7fd7f6c7cc-42tw6 1/1 Running 1 1d5h
openwhisk-1576070780-gen-certs-z9nsb 0/1 Completed 0 1d5h
openwhisk-1576070780-init-couchdb-r2vmt 0/1 Completed 0 1d5h
openwhisk-1576070780-install-packages-27dtr 0/1 Completed 0 1d4h
openwhisk-1576070780-invoker-0 1/1 Running 1 1d5h
openwhisk-1576070780-kafka-0 1/1 Running 1 1d5h
openwhisk-1576070780-kafkaprovider-f8b4cf4fc-7z4gt 1/1 Running 1 1d5h
openwhisk-1576070780-nginx-6dbdbf69bc-5x76n 1/1 Running 1 1d5h
openwhisk-1576070780-redis-cfd8756f4-hkrt6 1/1 Running 1 1d5h
openwhisk-1576070780-wskadmin 1/1 Running 1 1d5h
openwhisk-1576070780-zookeeper-0 1/1 Running 1 1d5h
wskopenwhisk-1576070780-invoker-00-1-prewarm-nodejs10 1/1 Running 0 61s
wskopenwhisk-1576070780-invoker-00-2-prewarm-nodejs10 1/1 Running 0 61s
wskopenwhisk-1576070780-invoker-00-3-whisksystem-invokerhealtht 1/1 Running 0 59s- A wsk működésének beállítása:
$ wsk property set --apihost 192.168.99.100:31001
$ wsk property set --auth 23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwPEllenőrizzük:
$ wsk -i list
Entities in namespace: default
packages
actions
triggers
rulesProblémák és megoldásaik
getsockopt: kapcsolat elutasítva
$ 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: kapcsolat elutasítvaEllenőrizzük, hogy a konténerek a névtérben openwhisk státuszban vannak Futásban, mivel néha hibákkal leállhat CreateContainerConfigError.
Invoker még mindig inicializálódik — Init:1/2
A különböző futtatási környezetek letöltése hosszú időt vehet igénybe. A folyamat felgyorsítása érdekében érdemes megadni egy csökkentett minimális listát a fájlban mycluster.yaml:
whisk:
runtimes: "runtimes-minimal-travis.json"A konténer neve -install-packages- hibaüzenetet dob
Egyszerűen növelje a liveness tesztidőket.
OpenWhisk telepítése Knative fölé
Priti Desai telepítette az IBM felhőjére és a sima minikube-ra, Knative Build és BuildTemplates használatával. Én is a minikube-ra fogom telepíteni, az alábbiak szerint a leírás alapján Blogunkban korábban a legújabb szoftververziók használatával foglalkoztunk. Mivel a Knative Build és a BuildTemplates hivatalosan elavultnak számítanak, az ajánlott alternatívát, a Tekton Pipelines-t fogom használni. A cikk további része a Tekton Pipelines dokumentációjának áttekintése után készült, de Priti ötletein alapul. A működéshez hozzáférés szükséges egy Docker Registry-hez — én, akárcsak az eredeti szerző, a DockerHub-ot fogom használni.
$ curl -L0 https://github.com/solo-io/gloo/releases/download/v1.2.10/glooctl-linux-amd64; chmod +x glooctl-linux-amd64; mv glooctl-linux-amd64 ~/bin
$ glooctl install knative
$ kubectl get pods -n knative-serving
NAME READY STATUS RESTARTS AGE
activator-77fc555665-rvrst 1/1 Running 0 2m23s
autoscaler-5c98b7c9b6-x8hh4 1/1 Running 0 2m21s
autoscaler-hpa-5cfd4f6845-w87kq 1/1 Running 0 2m22s
controller-7fd74c8f67-tprm8 1/1 Running 0 2m19s
webhook-74847bb77c-txr2g 1/1 Running 0 2m17s
$ kubectl get pods -n gloo-system
NAME READY STATUS RESTARTS AGE
discovery-859d7fbc9c-8xhvh 1/1 Running 0 51s
gloo-545886d9c6-85mwt 1/1 Running 0 51s
ingress-67d4996d75-lkkmw 1/1 Running 0 50s
knative-external-proxy-767dfd656c-wwv2z 1/1 Running 0 50s
knative-internal-proxy-6fdddcc6b5-7vqd8 1/1 Running 0 51s
OpenWhisk építése és működése Knative fölött
- A tartalom megszerzése :
$ git clone https://github.com/tektoncd/catalog/
$ cd catalog/openwhisk- Környezetváltozóként megadva beállítjuk a Registry eléréséhez szükséges adatokat, és titkosként mentjük el őket a Kubernetesben:
$ export DOCKER_USERNAME=
$ export DOCKER_PASSWORD=
$ sed -e 's/${DOCKER_USERNAME}/'"$DOCKER_USERNAME"'/' -e 's/${DOCKER_PASSWORD}/'"$DOCKER_PASSWORD"'/' docker-secret.yaml.tmpl > docker-secret.yaml
$ kubectl apply -f docker-secret.yamlEllenőrizzük:
$ kubectl get secret
NAME TYPE DATA AGE
dockerhub-user-pass kubernetes.io/basic-auth 2 21s- Fiók létrehozása a környezetek építéséhez:
$ kubectl apply -f service-account.yamlEllenőrizzük:
$ kubectl get serviceaccount/openwhisk-runtime-builder
NAME SECRETS AGE
openwhisk-runtime-builder 2 31m- Feladat létrehozása az OpenWhisk képének építéséhez
$ kubectl apply -f openwhisk.yaml
task.tekton.dev/openwhisk created- Feladat indítása a kép építéséhez (NodeJS példa alapján):
taskrun.yaml fájl létrehozása a következő tartalommal:
# Git Pipeline Resource for OpenWhisk NodeJS Runtime
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
name: openwhisk-nodejs-runtime-git
spec:
type: git
params:
- name: revision
value: master
- name: url
value: https://github.com/apache/openwhisk-runtime-nodejs.git
---
# Image Pipeline Resource for OpenWhisk NodeJS Sample Application
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
name: openwhisk-nodejs-helloworld-image
spec:
type: image
params:
- name: url
value: docker.io/${DOCKER_USERNAME}/openwhisk-nodejs-helloworld
---
# Task Run to build NodeJS image with the action source
apiVersion: tekton.dev/v1alpha1
kind: TaskRun
metadata:
name: openwhisk-nodejs-helloworld
spec:
serviceAccountName: openwhisk-runtime-builder
taskRef:
name: openwhisk
inputs:
resources:
- name: runtime-git
resourceRef:
name: openwhisk-nodejs-runtime-git
params:
- name: DOCKERFILE
value: "./runtime-git/core/nodejs10Action/knative/Dockerfile"
- name: OW_ACTION_NAME
value: "nodejs-helloworld"
- name: OW_ACTION_CODE
value: "function main() {return {payload: 'Hello World!'};}"
- name: OW_PROJECT_URL
value: ""
outputs:
resources:
- name: runtime-image
resourceRef:
name: openwhisk-nodejs-helloworld-image
---A fájl aktuális adatainak alkalmazása:
$ sed 's/${DOCKER_USERNAME}/'"$DOCKER_USERNAME"'/' -i taskrun.yamlAlkalmazás:
$ 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 createdA működés ellenőrzése a pod neve, állapotának megtekintésével történik. Emellett megnézhetjük minden lépés naplózását is, például:
$ kubectl get taskrun
NÉV SIKERES OK KEZDÉSI IDŐ BEFEJEZÉSI IDŐ
openwhisk-nodejs-helloworld Igen Sikerült 5m15s 44s
$ kubectl get pod openwhisk-nodejs-helloworld-pod-4640d3
NÉV KÉSZ ÁLLAPOT ÚJRATÖLTÉSEK KOR
openwhisk-nodejs-helloworld-pod-4640d3 0/6 Befejeződött 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":"GitHub commit ID megszerzése a kodata-ból meghiúsult: open /var/run/ko/refs/heads/master: nem létezik ilyen fájl vagy könyvtár"}
{"level":"info","ts":1576532936.538926,"logger":"fallback-logger","caller":"git/git.go:81","msg":"Sikeresen klónozva https://github.com/apache/openwhisk-runtime-nodejs.git @ master az útvonalon /workspace/runtime-git"}
{"level":"warn","ts":1576532936.5395331,"logger":"fallback-logger","caller":"git/git.go:128","msg":"Váratlan hiba: szimbolikus link létrehozása: symlink /tekton/home/.ssh /root/.ssh: a fájl létezik"}
{"level":"info","ts":1576532936.8202565,"logger":"fallback-logger","caller":"git/git.go:109","msg":"Sikeresen inicializálták és frissítették a szubrendszereket az útvonalon /workspace/runtime-git"}A végrehajtást követően a Registry-ben megjelenik egy képfájl, amely a Knative szolgáltatások kezelésére szolgáló kn segédprogram segítségével telepíthető, például:
kn service create nodejs-helloworld --image docker.io/${DOCKER_USERNAME}/openwhisk-nodejs-helloworld
A 'nodejs-helloworld' szolgáltatás sikeresen létrehozva a 'default' névtérben.
Várakozás a 'nodejs-helloworld' szolgáltatás készenlétbe lépésére ... OK
Szolgáltatás URL:
http://nodejs-helloworld.default.example.comGloo használata esetén a működést így ellenőrizhetjük:
$ curl -H "Host: nodejs-helloworld.default.example.com" -X POST $(glooctl proxy url --name knative-external-proxy)
{"OK":true}
$ curl -H "Host: nodejs-helloworld.default.example.com" -X POST $(glooctl proxy url --name knative-external-proxy)
{"payload":"Helló Világ!"}További ciklus cikkek
Forrás: habr.com
