Përdorimi i llogarive pa server në bazë të OpenWhisk, pjesa 4

Përdorimi i llogarive pa server në bazë të OpenWhisk, pjesa 4

Kyă“ăźèš˜äș‹ç”šă«ă‚”ボっどいるCollectk - ProHosterは、OpenWhiskăźçż»èšłăƒĄăƒąă‚”ă‚€ă‚Żăƒ«ă‚’ćźŒäș†ă•ă›ăŸă™ă€‚äœœè€…ăŻ Priti Desai. Sot sot ngjam lirĂ« por nĂ« Kubernetes me komanda tĂ« riparuara pĂ«r tĂ« funksionuar me versionet aktuale tĂ« aplikacioneve. Do tĂ« pĂ«rshkruajmĂ« gjithashtu procesin e aktivizimit tĂ« funksioneve OpenWhisk duke pĂ«rdorur Knative dhe TektonCD nĂ« Kubernetes me mjedisin e ekzekutimit Nodejs.

Zhvillimi i OpenWhisk në Kubernetes

GjatĂ« disa ditĂ«ve kam zhvilluar njĂ« eksperiment pĂ«r tĂ« zhvilluar OpenWhisk nĂ« Kubernetes pĂ«r tĂ« krijuar njĂ« platformĂ« tĂ« thjeshtĂ« dhe tĂ« shpejtĂ« pĂ«r tĂ« provuar detyrat. Duke qenĂ« se jam njĂ« fillestar nĂ« Kubernetes, besoj se njĂ« ditĂ« e gjysmĂ« ishte e mjaftueshme pĂ«r njĂ« zhvillim tĂ« suksesshĂ«m. NĂ« kĂ«tĂ« repo ka instrukcione shumĂ« tĂ« qarta pĂ«r zhvillimin e OpenWhisk nĂ« Kubernetes. KĂ«tu do tĂ« jenĂ« udhĂ«zimet pĂ«r zhvillimin, tĂ« bĂ«ra pĂ«r Mac (do tĂ« bĂ«j gjithçka edhe nĂ« Linux, pasi preferoj Linux. — shĂ«nim i pĂ«rkthyesit).

  1. Instaloni menaxherin e paketave asdf, pastaj korrigjojmë automatikisht ~/.bash_profile ose ekuivalentin e tij si më poshtë:

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

[NĂ« Linux ky hap nuk Ă«shtĂ« i nevojshĂ«m, ndonĂ«se brew Ă«shtĂ« i pranishĂ«m. — shĂ«nim i pĂ«rkthyesit]

  1. Shtojmë pluginet minikube dhe kubelet:

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

[PĂ«rsĂ«ri e kalojmĂ« kĂ«tĂ« hap nĂ« Linux. — shĂ«nim i pĂ«rkthyesit]

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

[instalohen versionet e caktuara, por unĂ« e kontrollova gjithçka nĂ« versionet mĂ« tĂ« fundit tĂ« disponueshme pĂ«r Linux; dyshoj se mund tĂ« instaloni me besim latest. — shĂ«nim i pĂ«rkthyesit]

Në Linux ky hap bëhet kështu (gjithçka instalohet në ~/bin, i cili është i përfshirë në PATH, 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. Krijojmë një makinë virtuale minikube (duhet të jetë instaluar më parë VirtualBox):

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

[MĂ« funksionon me komandĂ«n minikube start , pa parametra dhe me vlera nĂ« parazgjedhje. — shĂ«nim i pĂ«rkthyesit]

$ minikube start
  minikube v1.5.2 mbi Debian 8.11
  Ktheu drejtuesin 'virtualbox' automatikisht
  Po shkarko imazhin e boot-it të VM ...
    > 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
  Po krijohet VM virtualbox (CPUs=2, Memories=4096MB, Disku=20000MB) ...
  Po përgatitet Kubernetes v1.16.2 në Docker '18.09.9' ...
  Po shkarkohet kubelet v1.16.2
  Po shkarkohet kubeadm v1.16.2
  Po tërhiqen imazhet ...
  Po nxitet Kubernetes ...  Po presim për: apiserver
  Kryer! kubectl tani është konfiguruar për të përdorur "minikube"

  1. Kalim në rrjetin Docker në modin e papërdorshëm:

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

  1. Krijojmë namespace dhe etiketojmë nodin e punës:

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

  1. Merrni përmbajtjen e depoit dhe r redefinoni llojin për ingress në skedarin mycluster.yaml:

$ git clone https://github.com/apache/incubator-openwhisk-deploy-kube.git
$ cd incubator-openwhisk-deploy-kube/
$ cat < 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 realizoni shpërndarjen me të:

$ brew install kubernetes-helm
$ helm init # filloni Helm Tiller, nuk është e nevojshme në Helm v3+
$ kubectl get pods -n kube-system # verifikoni që tiller-deploy është në gjendjen e funksionimit, nuk është e nevojshme në helm v3+
$ kubectl create clusterrolebinding tiller-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default
$ helm install ./openwhisk/helm/ --namespace=openwhisk -f mycluster.yaml

[NĂ« Linux me versionet mĂ« tĂ« fundit (ishte e disponueshme v3.0.1) do tĂ« jetĂ« pak ndryshe. — shĂ«nim i pĂ«rkthyesit]

$ 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. Kontrolloni që gjithçka është ngritur (STATUS = Running ose Completed):

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

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

Po kontrollojmë:

$ wsk -i list
Entitetet në hapësirën: default
paketash
veprime
ngacmime
rregulla

Problemet dhe solucionet

getsockopt: lidhja u refuzua

$ wsk -i list
error: Nuk mund të marr listën e entiteteve për hapësirën 'default': Get http://192.168.99.100:31001/api/v1/namespaces/_/actions?limit=0&skip=0: dial tcp 192.168.99.100:31001: getsockopt: lidhja u refuzua

Kontrollojmë se kontejnerët në hapësirën openwhisk janë në status Running, sepse ndonjëherë ndodhin rëniet me gabime CreateContainerConfigError.

Invoker ende nĂ« procesin e inicializimit — Init:1/2

Procesi i shkarkimit të të gjitha mjediseve të ekzekutimit mund të marrë shumë kohë. Për të përshpejtuar, mund të specifikoni një listë minimale të shkurtuar në skedarin mycluster.yaml:

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

Kontejneri me emrin -install-packages- pësohet me Error

Thjesht rrisni kohët e pritjes për testet e vërtetësisë.

Instalimi i OpenWhisk mbi Knative

Priti Desai realizoi instalimin mbi klastri nĂ« IBM Cloud, si dhe nĂ« minikube tĂ« zakonshĂ«m, duke pĂ«rdorur Knative Build dhe BuildTemplates. Edhe unĂ« do tĂ« instaloj mbi minikube, duke u bazuar nĂ« mĂ«nyrĂ«n se si Ă«shtĂ« pĂ«rshkruar nĂ« blogun tonĂ« mĂ« parĂ« — duke pĂ«rdorur versionet mĂ« tĂ« fundit tĂ« softuerit. Pasi Knative Build dhe BuildTemplates janĂ« shpallur zyrtarisht tĂ« degraduara, do tĂ« pĂ«rdor zĂ«vendĂ«simin e rekomanduar nĂ« formĂ«n e Tekton Pipelines. Pjesa e mbetur e artikullit Ă«shtĂ« shkruar pas leximit tĂ« dokumentacionit pĂ«r Tekton Pipelines, por Ă«shtĂ« e bazuar nĂ« idetĂ« e Priti. Do tĂ« nevojitet qasje nĂ« njĂ« regjistrim Docker — unĂ«, ashtu 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
EMRI                              GATI   STATUS    RIMARRJES   MOSHA
activator-77fc555665-rvrst        1/1     Duke funksionuar   0          2m23s
autoscaler-5c98b7c9b6-x8hh4       1/1     Duke funksionuar   0          2m21s
autoscaler-hpa-5cfd4f6845-w87kq   1/1     Duke funksionuar   0          2m22s
controller-7fd74c8f67-tprm8       1/1     Duke funksionuar   0          2m19s
webhook-74847bb77c-txr2g          1/1     Duke funksionuar   0          2m17s
$ kubectl get pods -n gloo-system
EMRI                                      GATI   STATUS    RIMARRJES   MOSHA
discovery-859d7fbc9c-8xhvh                1/1     Duke funksionuar   0          51s
gloo-545886d9c6-85mwt                     1/1     Duke funksionuar   0          51s
ingress-67d4996d75-lkkmw                  1/1     Duke funksionuar   0          50s
knative-external-proxy-767dfd656c-wwv2z   1/1     Duke funksionuar   0          50s
knative-internal-proxy-6fdddcc6b5-7vqd8   1/1     Duke funksionuar   0          51s

Përdorimi i llogarive pa server në bazë të OpenWhisk, pjesa 4
Ndërtimi dhe funksionimi i OpenWhisk mbi Knative

  1. Merrni përmbajtjen e këtij repozitori:

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

  1. Vendosim si variabla mjedisi të dhënat për qasje në Registry dhe i ruajmë ato si një sekret Kubernetes:

$ export DOCKER_USERNAME=
$ export DOCKER_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

Po kontrollojmë:

$ kubectl get secret
EMRI                    LLOJI                                  TË DHËNAT      MOSHA
dockerhub-user-pass     kubernetes.io/basic-auth              2         21s

  1. Krijojmë një llogari për ndërtimin e mjediseve:

$ kubectl apply -f service-account.yaml

Po kontrollojmë:

$ kubectl get serviceaccount/openwhisk-runtime-builder
EMRI                        SEKRETET   MOSHA
openwhisk-runtime-builder   2         31m

  1. Krijojmë një detyrë për ndërtimin e imazhit për OpenWhisk

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

  1. Nisim detyrën për ndërtimin e imazhit (në shembullin e NodeJS):

Krijojmë një skedë 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
---

Zbatoni të dhënat aktuale për këtë skedë:

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

Zbatoni:

$ 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

Kontrolli i funksionimit përfshin marrjen e emrit të pod-it, shikimin e statusit të tij. Gjithashtu mund të shikoni ditarin e ekzekutimit të çdo hapi, 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 pasjes bashkëngjitet në Registry një imazh që mund të shfaqet me përdorimin e utilitarit kn, i cili është i destinuar për të punuar me shërbimet Knative, për shembull:

kn service create nodejs-helloworld --image docker.io/${DOCKER_USERNAME}/openwhisk-nodejs-helloworld
Shërbimi 'nodejs-helloworld' u krijua me sukses në hapësirën e emrave 'default'.
Duke pritur që shërbimi 'nodejs-helloworld' të bëhet i gatshëm ... OK

URL e shërbimit:
http://nodejs-helloworld.default.example.com

Në rastin e përdorimit të Gloo, mund ta kontrolloni funksionalitetin kështu:

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

Artikujt e tjerë të ciklit

Kompjuterat pa serverë me bazë OpenWhisk, pjesa 1
Kompjuterat pa serverë me bazë OpenWhisk, pjesa 2
Kompjuterat pa serverë me bazë OpenWhisk, pjesa 3
Përdorimi i llogarive pa server në bazë të OpenWhisk, pjesa 4

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster