Szerver nélküli számítástechnika OpenWhisk segítségével, 4. rész

Szerver nélküli számítástechnika OpenWhisk segítségével, 4. rész

Ez a cikk befejezi a szerző OpenWhiskről szóló lefordított megjegyzéseinek sorozatát Priti Desai. Ma megvizsgáljuk az OpenWhisk Kubernetes feletti telepítésének folyamatát javított parancsokkal, hogy az alkalmazások jelenlegi verzióival működjön együtt. Leírja továbbá az OpenWhisk függvények Knative és TektonCD használatával történő futtatását Kubernetesen a Nodejs futtatókörnyezet használatával.

OpenWhisk telepítése Kubernetesen

Néhány nap leforgása alatt kísérleteztem az OpenWhisk Kubernetes rendszerbe való telepítésével, hogy egyszerű és gyors tesztelési teret hozzak létre. És mivel új vagyok a Kubernetesben, úgy gondolom, hogy másfél napot töltöttem a sikeres telepítéssel. BAN BEN ezt A tárolók nagyon világos utasításokat tartalmaznak az OpenWhisk Kubernetesen történő telepítéséhez. Íme a Mac-hez készült telepítési utasítások (Én is mindent Linuxon fogok csinálni, mert jobban szeretem a Linuxot. — kb. fordító).

  1. A csomagkezelő telepítése asdf, ami után automatikusan kijavítjuk ~/.bash_profile vagy ennek megfelelője:

$ 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ő. — kb. fordító]

  1. Bővítmények hozzáadása minikube и kubelet:

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

[Ismét hagyja ki ezt a lépést Linuxon. — kb. fordító]

  1. A minikube és a kubelet telepítése:

$ asdf install kubectl 1.9.0
$ asdf global kubectl 1.9.0
$ asdf install minikube 0.25.2
$ asdf global minikube 0.25.2

[bizonyos verziók telepítve vannak, de mindent ellenőriztem a Linuxhoz elérhető legújabb verziókon; Gyanítom, hogy nyugodtan telepítheti a legújabbat. — kb. fordító]

Linuxon ez a lépés valahogy így történik (minden a ~/bin mappába kerül, ami a PATH-ban van felsorolva, 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. Hozzon létre egy minikube virtuális gépet (a VirtualBoxot előre telepíteni kell):

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

[Nekem minden működik a csapattal minikube start , paraméterek nélkül és alapértelmezett értékekkel. — kb. fordító]

$ 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. A hálózat váltása a Dockerben promiszkuális módba:

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

  1. Hozzon létre egy névteret, és jelölje meg a dolgozó csomópontját:

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

  1. Megkapjuk a tár tartalmát, és felülírjuk a belépés típusát a mycluster.yaml fájlban:

$ 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. Telepítse a Helmet és telepítse a segítségével:

$ 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

[A legújabb verziójú Linuxon (elérhető volt a v3.0.1) ez egy kicsit más lesz. — kb. fordító]

$ 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 emelkedett-e (ÁLLAPOT = Fut vagy Befejezett):

$ 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 beállítása, hogy működjön:

$ 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ások

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: connection refused

Annak ellenőrzése, hogy a tárolók a névtérben vannak-e openwhisk állapotában Running, mert néha hibákkal összeomlik CreateContainerConfigError.

A hívó még mindig inicializálva – Init:1/2

A különféle futtatókörnyezetek letöltésének folyamata sokáig tarthat. A folyamat felgyorsítása érdekében megadhat egy rövidített minimumlistát a fájlban mycluster.yaml:

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

Konténer névvel -telepítési csomagok- összeomlik a hiba miatt

Csak növelje az életképességi tesztek időtúllépését.

Az OpenWhisk telepítése a Knative felett

A Priti Desai a telepítést az IBM felhő egy fürtjének tetejére, valamint egy normál minikube-ra hajtotta végre, a Knative Build és BuildTemplates segítségével. A minukube tetejére is telepítem, a hogyan alapján le volt írva blogunkban korábban - a szoftverek legújabb verzióival. Mivel a Knative Build és BuildTemplates hivatalosan elavulttá vált, az ajánlott cserét fogom használni a Tekton Pipelines formájában. A cikk többi része a Tekton Pipelines dokumentációjának elolvasása után készült, de Priti ötletein alapul. A munkához hozzá kell férnie néhány Docker Registry-hez – az eredeti szerzőhöz hasonlóan én is 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ástechnika OpenWhisk segítségével, 4. rész
OpenWhisk felépítése és futtatása a Knative tetején

  1. A tartalom megszerzése ezt az adattárat:

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

  1. A Registry eléréséhez szükséges adatokat környezeti változóként állítjuk be, és Kubernetes titkosként mentjük el:

$ 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

Ellenőrizzük:

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

  1. Hozzon létre fiókot építési környezetekhez:

$ kubectl apply -f service-account.yaml

Ellenőrizzük:

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

  1. Hozzon létre egy feladatot az OpenWhisk képének létrehozásához

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

  1. Futtatjuk a feladatot a kép elkészítéséhez (példaként a NodeJS használatával):

Hozzon létre egy taskrun.yaml fájlt 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
---

Ehhez a fájlhoz az aktuális adatokat alkalmazzuk:

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

Jelentkezünk:

$ 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 munka ellenőrzése a pod nevének beszerzéséből és állapotának megtekintéséből áll. Megtekintheti az egyes lépések végrehajtási naplóját is, például:

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

A végrehajtás után a rendszerleíró adatbázisban lesz egy képünk, amely a kn segédprogrammal telepíthető, és amely a Knative szolgáltatásokkal való együttműködésre lett kialakítva, például:

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

Ha Gloo-t használ, a következőképpen ellenőrizheti a működését:

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

A sorozat további cikkei

Szerver nélküli számítástechnika OpenWhisk segítségével, 1. rész
Szerver nélküli számítástechnika OpenWhisk segítségével, 2. rész
Szerver nélküli számítástechnika OpenWhisk segítségével, 3. rész
Szerver nélküli számítástechnika OpenWhisk segítségével, 4. rész

Forrás: will.com

Hozzászólás