Bedienerlose rekenaars met OpenWhisk, Deel 4

Bedienerlose rekenaars met OpenWhisk, Deel 4

Hierdie artikel eindig die reeks vertaalde notas oor OpenWhisk van die skrywer Priti Desai. Vandag sal ons kyk na die proses om OpenWhisk oor Kubernetes te ontplooi met gekorrigeerde opdragte om met huidige weergawes van toepassings te werk. Dit sal ook die proses dek om OpenWhisk-funksies uit te voer deur Knative en TektonCD op Kubernetes te gebruik deur die Nodejs-looptyd te gebruik.

Ontplooi OpenWhisk op Kubernetes

In die loop van 'n paar dae het ek geëksperimenteer met die implementering van OpenWhisk na Kubernetes om 'n eenvoudige en vinnige toetsgrond te skep. En aangesien ek nuut by Kubernetes is, glo ek dat 'n dag en 'n half aan suksesvolle ontplooiing bestee is. IN hierdie Die bewaarplekke het baie duidelike instruksies vir die implementering van OpenWhisk op Kubernetes. Hier is die ontplooiingsinstruksies gemaak vir Mac (Ek sal ook alles op Linux doen, want ek verkies Linux. — ongeveer. vertaler).

  1. Installeer die pakketbestuurder asdf, waarna ons outomaties regstel ~/.bash_profile of sy ekwivalent soos volg:

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

[Op Linux is hierdie stap nie nodig nie, hoewel brou beskikbaar is. — ongeveer. vertaler]

  1. Voeg plugins by minikube и kubelet:

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

[Slaan weer hierdie stap op Linux oor. — ongeveer. vertaler]

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

[spesifieke weergawes is geïnstalleer, maar ek het alles nagegaan oor die nuutste beskikbare weergawes vir Linux; Ek vermoed dat u die nuutste veilig kan installeer. — ongeveer. vertaler]

Op Linux word hierdie stap so iets gedoen (alles word in ~/bin geplaas, wat in my PATH gelys is, vertaler se nota):

$ 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. Skep 'n minikube virtuele masjien (VirtualBox moet vooraf geïnstalleer word):

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

[Alles werk vir my met die span minikube start , sonder parameters en met verstekwaardes. — ongeveer. vertaler]

$ 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. Skakel die netwerk in Docker na promiskue modus:

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

  1. Skep 'n naamruimte en merk die werkernodus:

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

  1. Ons kry die inhoud van die bewaarplek en ignoreer die tipe vir ingang in die mycluster.yaml-lêer:

$ 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. Installeer Helm en ontplooi dit deur dit te gebruik:

$ 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 die nuutste weergawes (v3.0.1 was beskikbaar) sal dit 'n bietjie anders wees. — ongeveer. vertaler]

$ 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. Ons kyk of alles gestyg het (STATUS = Loop of Voltooi):

$ 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. Stel wsk op om te werk:

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

Ons kyk na:

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

Probleme en hul oplossings

getsockopt: verbinding geweier

$ 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

Kontroleer dat die houers in die naamruimte is openwhisk in status Running, omdat soms crash dit met foute CreateContainerConfigError.

Invoker initialiseer steeds — Init:1/2

Die proses om verskeie looptydomgewings af te laai, kan lank neem. Om dinge te bespoedig, kan jy 'n verkorte minimum lys in die lêer spesifiseer mycluster.yaml:

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

Houer met naam -installeer-pakkette- omval na Fout

Verhoog net die tydsduur vir lewendheidstoetse.

Installeer OpenWhisk oor Knative

Priti Desai het die installasie bo-op 'n groepering in die IBM-wolk uitgevoer, sowel as op 'n gewone minikube, met behulp van Knative Build en BuildTemplates. Ek sal ook bo-op minukube installeer, gebaseer op hoe dit is beskryf in ons blog vroeër - met behulp van die nuutste sagteware weergawes. Aangesien Knative Build and Build Templates amptelik afgekeur is, sal ek die aanbevole vervanging in die vorm van Tekton Pipelines gebruik. Die res van die artikel is geskryf nadat die dokumentasie vir Tekton Pipelines gelees is, maar is gebaseer op die idees van Priti. Om te werk, sal jy toegang tot een of ander Docker Registry nodig hê - ek, soos die oorspronklike skrywer, sal DockerHub gebruik.

$ 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

Bedienerlose rekenaars met OpenWhisk, Deel 4
Bou en hardloop OpenWhisk bo-op Knative

  1. Kry die inhoud hierdie bewaarplek:

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

  1. Ons stel die data vir toegang tot die register as omgewingsveranderlikes en stoor dit as 'n Kubernetes-geheim:

$ 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

Ons kyk na:

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

  1. Skep 'n rekening vir bou-omgewings:

$ kubectl apply -f service-account.yaml

Ons kyk na:

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

  1. Skep 'n taak om 'n prent vir OpenWhisk te bou

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

  1. Ons voer die taak uit om die beeld te bou (met NodeJS as voorbeeld):

Skep 'n taskrun.yaml-lêer met die inhoud:

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

Ons pas die huidige data vir hierdie lêer toe:

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

Ons pas 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

Om die werk na te gaan, bestaan ​​uit die kry van die peul se naam en kyk na sy status. U kan ook die uitvoeringslogboek van elke stap sien, byvoorbeeld:

$ 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 sal ons 'n prent in die register hê wat ontplooi kan word met die kn-hulpprogram, wat ontwerp is om met Knative-dienste te werk, byvoorbeeld:

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

As jy Gloo gebruik, kan jy die funksionaliteit daarvan soos volg nagaan:

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

Ander artikels in die reeks

Bedienerlose rekenaars met OpenWhisk, Deel 1
Bedienerlose rekenaars met OpenWhisk, Deel 2
Bedienerlose rekenaars met OpenWhisk, Deel 3
Bedienerlose rekenaars met OpenWhisk, Deel 4

Bron: will.com

Voeg 'n opmerking