Kompiuteris be serverio su „OpenWhisk“, 4 dalis

Kompiuteris be serverio su „OpenWhisk“, 4 dalis

Šis straipsnis užbaigia išverstų autoriaus pastabų apie OpenWhisk seriją Priti Desai. Šiandien apžvelgsime „OpenWhisk“ diegimą per „Kubernetes“ su pataisytomis komandomis, kad būtų galima dirbti su dabartinėmis programų versijomis. Ji taip pat apims „OpenWhisk“ funkcijų vykdymo procesą naudojant „Knative“ ir „TektonCD“ „Kubernetes“, naudojant „Nodejs“ vykdymo laiką.

„OpenWhisk“ diegimas „Kubernetes“.

Per kelias dienas eksperimentavau su „OpenWhisk“ diegimu „Kubernetes“, kad sukurčiau paprastą ir greitą testavimo aikštelę. Ir kadangi esu naujokas Kubernetes, manau, kad pusantros dienos buvo praleista sėkmingam diegimui. IN tai Saugyklose yra labai aiškios instrukcijos, kaip įdiegti „OpenWhisk“ „Kubernetes“. Čia yra diegimo instrukcijos, skirtos „Mac“ (Aš taip pat viską darysiu Linux, nes aš labiau mėgstu Linux. — apytiksliai vertėjas).

  1. Paketų tvarkyklės įdiegimas asdf, po kurio automatiškai pataisome ~/.bash_profile arba jo atitikmuo:

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

[Apie Linux Šis žingsnis nebūtinas, nors galima užvirinti. - apytiksliai vertėjas]

  1. Papildinių pridėjimas minikube и kubelet:

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

[Vėlgi, praleidžiame šį žingsnį Linux. - apytiksliai vertėjas]

  1. Įdiekite minikube ir 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

[įdiegtos konkrečios versijos, bet viską patikrinau naujausiose prieinamose versijose LinuxĮtariu, kad galite saugiai įdiegti naujausią versiją. - apytiksliai vertėjas]

Apie Linux Šis žingsnis atliekamas maždaug taip (viskas įdiegiama aplanke ~/bin, kuris yra mano PATH aplanke, vertėjo pastaba):

$ 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. Sukurkite minikube virtualią mašiną (VirtualBox turi būti iš anksto įdiegtas):

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

[Su komanda man viskas veikia minikube start , be parametrų ir su numatytosiomis reikšmėmis. - apytiksliai vertėjas]

$ 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. Tinklo perjungimas programoje „Docker“ į „promiscuous“ režimą:

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

  1. Sukurkite vardų erdvę ir pažymėkite darbuotojo mazgą:

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

  1. Gauname saugyklos turinį ir nepaisome įėjimo į failą mycluster.yaml tipą:

$ 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. Įdiekite „Helm“ ir įdiekite jį naudodami:

$ 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

[Apie Linux Su naujausiomis versijomis (buvo prieinama v3.0.1) bus šiek tiek kitaip. - apytiksliai vertėjas]

$ 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. Mes patikriname, ar viskas pakilo (STATUSAS = veikia arba baigta):

$ 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 konfigūravimas veikti:

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

Mes patikriname:

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

Problemos ir sprendimai

getsockopt: ryšys atmestas

$ 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

Tikrinama, ar konteineriai yra vardų erdvėje openwhisk statuse Running, nes kartais sugenda su klaidomis CreateContainerConfigError.

Invoker vis dar inicijuojamas – Init:1/2

Įvairių vykdymo aplinkų atsisiuntimo procesas gali užtrukti ilgai. Norėdami pagreitinti darbą, faile galite nurodyti sutrumpintą minimalų sąrašą mycluster.yaml:

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

Konteineris su pavadinimu -diegimo paketai- sugenda į Error

Tiesiog padidinkite gyvumo testų skirtąjį laiką.

„OpenWhisk“ diegimas per „Knative“.

„Priti Desai“ įdiegtas IBM debesyje esančios klasterio viršuje, taip pat įprastame minikube, naudojant „Knative Build“ ir „BuildTemplates“. Taip pat įdiegsiu ant minukube, pagal tai, kaip tai buvo aprašyta mūsų tinklaraštyje anksčiau – naudojant naujausias programinės įrangos versijas. Kadangi „Knative Build“ ir „BuildTemplates“ oficialiai nebenaudojami, naudosiu rekomenduojamą pakaitalą „Tekton Pipelines“ forma. Likusi straipsnio dalis buvo parašyta perskaičius „Tekton Pipelines“ dokumentaciją, tačiau yra pagrįsta „Priti“ idėjomis. Norėdami dirbti, jums reikės prieigos prie „Docker“ registro – aš, kaip ir originalus autorius, naudosiu „DockerHub“.

$ 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

Kompiuteris be serverio su „OpenWhisk“, 4 dalis
„OpenWhisk“ kūrimas ir paleidimas „Knative“ viršuje

  1. Turinio gavimas šią saugyklą:

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

  1. Registro prieigos duomenis nustatome kaip aplinkos kintamuosius ir išsaugome juos kaip „Kubernetes“ paslaptį:

$ 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

Mes patikriname:

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

  1. Sukurkite paskyrą pastatų aplinkai:

$ kubectl apply -f service-account.yaml

Mes patikriname:

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

  1. Sukurkite užduotį, kad sukurtumėte „OpenWhisk“ vaizdą

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

  1. Vykdome užduotį sukurti vaizdą (pavyzdžiui, naudojant NodeJS):

Sukurkite failą taskrun.yaml su turiniu:

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

Šiam failui taikome dabartinius duomenis:

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

Mes taikome:

$ 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

Darbo patikrinimas susideda iš ankšties pavadinimo ir jo būsenos peržiūros. Taip pat galite peržiūrėti kiekvieno veiksmo vykdymo žurnalą, pavyzdžiui:

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

Po vykdymo registre turėsime vaizdą, kurį galima įdiegti naudojant kn įrankį, skirtą dirbti su Knative paslaugomis, pavyzdžiui:

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

Jei naudojate Gloo, galite patikrinti jo funkcionalumą taip:

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

Kiti serijos straipsniai

Kompiuteris be serverio su „OpenWhisk“, 1 dalis
Kompiuteris be serverio su „OpenWhisk“, 2 dalis
Kompiuteris be serverio su „OpenWhisk“, 3 dalis
Kompiuteris be serverio su „OpenWhisk“, 4 dalis

Šaltinis: www.habr.com

Pirkite patikimą prieglobą svetainėms su DDoS apsauga, VPS VDS serveriais 🔥 Įsigykite patikimą svetainių talpinimą su DDoS apsauga, VPS VDS serveriais | ProHoster