Szerver nélküli számítások az OpenWhisk alapjain, 4. rész

Szerver nélküli számítások az OpenWhisk alapjain, 4. rész

Ez a cikk zárja a Priti Desai által írt OpenWhisk fordítási jegyzetek ciklusát. Priti Desai. 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 mellékelt 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).

  1. Telepítjük a csomagkezelőt asdf, majd automatikusan javítsuk ~/.bash_profile vagy 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]

  1. Pluginok hozzáadása minikube és kubelet:

$ asdf plugin-add kubectl
$ asdf plugin-add minikube

[Újra kihagyjuk ezt a lépést Linuxon. — fordító megjegyzése]

  1. 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/

  1. 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

  1. A Docker hálózatot átkapcsoljuk promiszkusz módra:

$ minikube ssh -- sudo ip link set docker0 promisc on

  1. Namespace-t hozunk létre és címkézzük a munkacsomópontot:

$ kubectl create namespace openwhisk
$ kubectl label nodes --all openwhisk-role=invoker

  1. 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

  1. 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

  1. 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

  1. 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:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP

Ellenőrizzük:

$ wsk -i list
Entities in namespace: default
packages
actions
triggers
rules

Problé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ítva

Ellenő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 ahogyan az le volt írva 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

Szerver nélküli számítások az OpenWhisk alapjain, 4. rész
OpenWhisk építése és működése Knative fölött

  1. A tartalom megszerzése a tárolóból:

$ git clone https://github.com/tektoncd/catalog/
$ cd catalog/openwhisk

  1. 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.yaml

Ellenőrizzük:

$ kubectl get secret
NAME                    TYPE                                  DATA      AGE
dockerhub-user-pass     kubernetes.io/basic-auth              2         21s

  1. Fiók létrehozása a környezetek építéséhez:

$ kubectl apply -f service-account.yaml

Ellenőrizzük:

$ kubectl get serviceaccount/openwhisk-runtime-builder
NAME                        SECRETS   AGE
openwhisk-runtime-builder   2         31m

  1. Feladat létrehozása az OpenWhisk képének építéséhez

$ kubectl apply -f openwhisk.yaml
task.tekton.dev/openwhisk created

  1. 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.yaml

Alkalmazá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 created

A 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.com

Gloo 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

Felesleges számítások OpenWhisk alapjain, 1. rész
Felesleges számítások OpenWhisk alapjain, 2. rész
Felesleges számítások OpenWhisk alapjain, 3. rész
Szerver nélküli számítások az OpenWhisk alapjain, 4. rész

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster