Llogaritja pa server me OpenWhisk, Pjesa 4

Llogaritja pa server me OpenWhisk, Pjesa 4

Ky artikull përfundon serinë e shënimeve të përkthyera rreth OpenWhisk nga autori Priti Desai. Sot do të shikojmë procesin e vendosjes së OpenWhisk mbi Kubernetes me komanda të korrigjuara për të punuar me versionet aktuale të aplikacioneve. Ai gjithashtu do të mbulojë procesin e ekzekutimit të funksioneve OpenWhisk duke përdorur Knative dhe TektonCD në Kubernetes duke përdorur kohën e funksionimit Nodejs.

Vendosja e OpenWhisk në Kubernetes

Gjatë disa ditëve, unë eksperimentova me vendosjen e OpenWhisk në Kubernetes për të krijuar një terren të thjeshtë dhe të shpejtë testimi. Dhe meqenëse jam i ri në Kubernetes, besoj se u shpenzua një ditë e gjysmë për vendosjen e suksesshme. NË kjo Depot kanë udhëzime shumë të qarta për vendosjen e OpenWhisk në Kubernetes. Këtu janë udhëzimet e vendosjes të bëra për Mac (Unë gjithashtu do të bëj gjithçka Linux, sepse unë preferoj Linux. - përafërsisht. përkthyes).

  1. Instalimi i menaxherit të paketave asdf, pas së cilës korrigjojmë automatikisht ~/.bash_profile ose ekuivalenti i tij si ky:

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

[Mbi Linux Ky hap nuk është i nevojshëm, megjithëse ka përgatitje birre. - përafërsisht. përkthyes]

  1. Shtimi i shtojcave minikube и kubelet:

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

[Përsëri, ne e kalojmë këtë hap Linux. - përafërsisht. përkthyes]

  1. Instaloni minikube dhe 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

[versione specifike janë instaluar, por unë kontrollova gjithçka në versionet më të fundit të disponueshme për Linux; Dyshoj se mund ta instaloni në mënyrë të sigurt versionin më të fundit. - përafërsisht. përkthyes]

Mbi Linux Ky hap bëhet diçka e tillë (gjithçka instalohet në ~/bin, që është në PATH-in tim, shënim i përkthyesit):

$ 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. Krijoni një makinë virtuale minikube (VirtualBox duhet të jetë i instaluar paraprakisht):

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

[Gjithçka funksionon për mua me ekipin minikube start , pa parametra dhe me vlera të paracaktuara. - përafërsisht. përkthyes]

$ 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. Kalimi i rrjetit në Docker në modalitetin promiscuous:

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

  1. Krijoni një hapësirë ​​emri dhe shënoni nyjen e punës:

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

  1. Ne marrim përmbajtjen e depove dhe anashkalojmë llojin për hyrje në skedarin mycluster.yaml:

$ 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. Instaloni Helm dhe vendoseni duke përdorur atë:

$ 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

[Mbi Linux Me versionet më të fundit (v3.0.1 ishte në dispozicion) do të jetë pak më ndryshe. - përafërsisht. përkthyes]

$ 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. Ne kontrollojmë që gjithçka të jetë ngritur (STATUS = Në ekzekutim ose përfunduar):

$ 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. Konfigurimi i wsk për të punuar:

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

kontrolloni:

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

Problemet dhe zgjidhjet e tyre

getsockopt: lidhja e refuzuar

$ 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

Kontrollimi që kontejnerët janë në hapësirën e emrave openwhisk në status Running, sepse ndonjëherë përplaset me gabime CreateContainerConfigError.

Invokeri ende po inicializohet — Init:1/2

Procesi i shkarkimit të mjediseve të ndryshme të funksionimit mund të zgjasë shumë. Për të shpejtuar gjërat, mund të specifikoni një listë minimale të shkurtuar në skedar mycluster.yaml:

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

Enë me emër -instaloni-paketat- përplaset në Gabim

Thjesht rrisni afatet për testet e gjallërisë.

Instalimi i OpenWhisk mbi Knative

Priti Desai e kreu instalimin në krye të një grupi në renë IBM, si dhe në një minikube të rregullt, duke përdorur Knative Build dhe BuildTemplates. Unë gjithashtu do të instaloj në krye të minukube, bazuar në mënyrën se si ishte përshkruar në blogun tonë më parë - duke përdorur versionet më të fundit të softuerit. Meqenëse Knative Build dhe BuildTemplates janë zhvlerësuar zyrtarisht, unë do të përdor zëvendësimin e rekomanduar në formën e Tekton Pipelines. Pjesa tjetër e shkrimit është shkruar pas leximit të dokumentacionit për gazsjellësin Tekton, por bazohet në idetë e Pritit. Për të punuar, do t'ju duhet qasje në një Regjistr Docker - unë, si autori origjinal, do të përdor 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

Llogaritja pa server me OpenWhisk, Pjesa 4
Ndërtimi dhe ekzekutimi i OpenWhisk në krye të Knative

  1. Marrja e përmbajtjes këtë depo:

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

  1. Ne vendosim të dhënat për hyrjen në Regjistrin si variabla mjedisore dhe i ruajmë ato si një sekret Kubernetes:

$ 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

kontrolloni:

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

  1. Krijoni një llogari për mjediset e ndërtimit:

$ kubectl apply -f service-account.yaml

kontrolloni:

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

  1. Krijo një detyrë për të ndërtuar një imazh për OpenWhisk

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

  1. Ne ekzekutojmë detyrën për të ndërtuar imazhin (duke përdorur NodeJS si shembull):

Krijoni një skedar taskrun.yaml me përmbajtjen:

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

Ne aplikojmë të dhënat aktuale për këtë skedar:

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

Ne aplikojmë:

$ 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

Kontrollimi i punës konsiston në marrjen e emrit të podit dhe shikimin e statusit të tij. Ju gjithashtu mund të shikoni regjistrin e ekzekutimit të secilit hap, për shembull:

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

Pas ekzekutimit, ne do të kemi një imazh në Regjistrin që mund të vendoset duke përdorur mjetin kn, i krijuar për të punuar me shërbimet Knative, për shembull:

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

Nëse përdorni Gloo, mund të kontrolloni funksionalitetin e tij si kjo:

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

Artikuj të tjerë në seri

Llogaritja pa server me OpenWhisk, Pjesa 1
Llogaritja pa server me OpenWhisk, Pjesa 2
Llogaritja pa server me OpenWhisk, Pjesa 3
Llogaritja pa server me OpenWhisk, Pjesa 4

Burimi: www.habr.com

Bleni një host të besueshëm për faqet me mbrojtje DDoS, serverë VPS VDS 🔥 Bleni hosting të besueshëm të faqeve të internetit me mbrojtje DDoS, servera VPS VDS | ProHoster