Serverivaba andmetöötlus OpenWhiskiga, 4. osa

Serverivaba andmetöötlus OpenWhiskiga, 4. osa

See artikkel lõpetab autori tõlgitud märkmete sarja OpenWhiski kohta Priti Desai. Täna vaatleme OpenWhiski juurutamise protsessi Kubernetesi kaudu parandatud käskudega, et töötada rakenduste praeguste versioonidega. See hõlmab ka OpenWhiski funktsioonide käitamise protsessi Kubernetesis Knative'i ja TektonCD abil, kasutades Nodejs'i käitusaega.

OpenWhiski juurutamine Kubernetesis

Mõne päeva jooksul katsetasin OpenWhiski juurutamist Kubernetesesse, et luua lihtne ja kiire testimiskeskkond. Ja kuna olen Kubernetes uus, usun, et poolteist päeva kulus edukale kasutuselevõtule. IN see Hoidlates on väga selged juhised OpenWhiski juurutamiseks Kubernetes. Siin on Maci jaoks tehtud juurutusjuhised (Teen kõike ka Linuxis, sest eelistan Linuxit. — ca. tõlkija).

  1. Paketihalduri installimine asdf, mille järel parandame automaatselt ~/.bash_profile või selle ekvivalent selline:

$ brew install asdf
$ [ -s "/usr/local/opt/asdf/asdf.sh" ] && . /usr/local/opt/asdf/asdf.sh
$ source ~/.bash_profile

[Linuxis pole seda sammu vaja, kuigi pruulimine on saadaval. — ca. tõlkija]

  1. Pluginate lisamine minikube и kubelet:

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

[Jällegi jätke see samm Linuxis vahele. — ca. tõlkija]

  1. Installige minikube ja 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

[konkreetsed versioonid on installitud, kuid ma kontrollisin kõike Linuxi uusimate saadaolevate versioonide puhul; Ma kahtlustan, et saate uusima turvaliselt installida. — ca. tõlkija]

Linuxis tehakse see samm umbes nii (kõik asetatakse kausta ~/bin, mis on loetletud minu PATH-is, tõlkija märkus):

$ 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. Looge minikube virtuaalmasin (VirtualBox peab olema eelinstallitud):

$ minikube start --cpus 2 --memory 4096 --kubernetes-version=v1.9.0 --extra-config=apiserver.Authorization.Mode=RBAC

[Minu jaoks meeskonnaga kõik toimib minikube start , ilma parameetriteta ja vaikeväärtustega. — ca. tõlkija]

$ minikube start
  minikube v1.5.2 on Debian 8.11
  Automatically selected the 'virtualbox' driver
  Downloading VM boot image ...
    > 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
  Creating virtualbox VM (CPUs=2, Memory=4096MB, Disk=20000MB) ...
  Preparing Kubernetes v1.16.2 on Docker '18.09.9' ...
  Downloading kubelet v1.16.2
  Downloading kubeadm v1.16.2
  Pulling images ...
  Launching Kubernetes ...  Waiting for: apiserver
  Done! kubectl is now configured to use "minikube"

  1. Võrgu lülitamine Dockeris promiscuous-režiimi:

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

  1. Looge nimeruum ja märkige töötaja sõlm:

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

  1. Hangime hoidla sisu ja alistame faili mycluster.yaml sisenemise tüübi:

$ git clone https://github.com/apache/incubator-openwhisk-deploy-kube.git
$ cd incubator-openwhisk-deploy-kube/
$ cat << "EOF" > mycluster.yaml
whisk:
    ingress:
        type: NodePort
            api_host_name: 192.168.99.100
            api_host_port: 31001
nginx:
    httpsNodePort: 31001
EOF

  1. Installige Helm ja juurutage see selle abil:

$ 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

[Uusimate versioonidega Linuxis (v3.0.1 oli saadaval) on see veidi erinev. — ca. tõlkija]

$ 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. Kontrollime, kas kõik on tõusnud (OLEK = töötab või lõpetatud):

$ 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. Wsk seadistamine tööle:

$ wsk property set --apihost 192.168.99.100:31001
$ wsk property set --auth 23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP

Kontrollime:

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

Probleemid ja lahendused

getsockopt: ühendamisest keelduti

$ 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

Kontrollige, kas konteinerid on nimeruumis openwhisk olekus Running, sest mõnikord jookseb see vigadega kokku CreateContainerConfigError.

Invoker initsialiseerub endiselt — Init:1/2

Erinevate käituskeskkondade allalaadimine võib võtta kaua aega. Asjade kiirendamiseks saate failis määrata lühendatud miinimumloendi mycluster.yaml:

whisk:
  runtimes: "runtimes-minimal-travis.json"

Nimega konteiner -installi-paketid- jookseb kokku veaga

Lihtsalt suurendage elujõulisuse testide ajalõpu.

OpenWhiski installimine üle Knative'i

Priti Desai teostas installimise nii IBMi pilve klastri peale kui ka tavalisele minikube, kasutades Knative Build ja BuildTemplates. Paigaldan ka minukube peale, kuidas seda kirjeldati meie ajaveebis varem - kasutades uusimaid tarkvaraversioone. Kuna Knative Build ja BuildTemplates on ametlikult aegunud, kasutan soovitatud asendust Tektoni torujuhtmete kujul. Ülejäänud artikkel on kirjutatud pärast Tekton Pipelinesi dokumentatsiooni lugemist, kuid põhineb Priti ideedel. Töötamiseks vajate juurdepääsu mõnele Dockeri registrile – mina, nagu algne autor, kasutan DockerHubi.

$ 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

Serverivaba andmetöötlus OpenWhiskiga, 4. osa
OpenWhiski loomine ja käitamine Knative'i peal

  1. Sisu hankimine see hoidla:

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

  1. Määrame registrile juurdepääsu andmed keskkonnamuutujatena ja salvestame need Kubernetese saladusena:

$ export DOCKER_USERNAME=<your docker hub username>
$ export DOCKER_PASSWORD=<your docker hub 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

Kontrollime:

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

  1. Looge ehituskeskkondade jaoks konto:

$ kubectl apply -f service-account.yaml

Kontrollime:

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

  1. Looge OpenWhiski jaoks pildi loomiseks ülesanne

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

  1. Käivitame pildi koostamise ülesande (kasutades näiteks NodeJS-i):

Looge fail taskrun.yaml, mille sisu on:

# 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
---

Rakendame selle faili jaoks praeguseid andmeid:

$ sed 's/${DOCKER_USERNAME}/'"$DOCKER_USERNAME"'/' -i taskrun.yaml

Rakendame:

$ 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

Töö kontrollimine seisneb kauna nime hankimises ja selle oleku vaatamises. Samuti saate vaadata iga sammu täitmislogi, näiteks:

$ 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"}

Pärast täitmist on meil registris pilt, mida saab juurutada utiliidi kn abil, mis on loodud töötama näiteks Knative'i teenustega:

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

Kui kasutate Glood, saate selle funktsionaalsust kontrollida järgmiselt:

$ 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":"Hello World!"}

Sarja teised artiklid

Serverivaba andmetöötlus OpenWhiskiga, 1. osa
Serverivaba andmetöötlus OpenWhiskiga, 2. osa
Serverivaba andmetöötlus OpenWhiskiga, 3. osa
Serverivaba andmetöötlus OpenWhiskiga, 4. osa

Allikas: www.habr.com

Lisa kommentaar