Serverivabad arvutused OpenWhiski baasil, osa 4

Serverivabad arvutused OpenWhiski baasil, osa 4

See artikkel lÔpetab OpenWhiski tÔlket mÀrkmete seeria autori poolt Priti Desai. TÀna vaatleme OpenWhiski juurutamise protsessi Kubernetesel, kasutades kehtivaid rakenduste versioone. Samuti kirjeldame OpenWhiski funktsioonide kÀivitamise protsessi Knative ja TektonCD abil Kuberneteses Nodejs kÀituskeskkonnas.

Juurutame OpenWhiski Kuberneteses

MĂ”ne pĂ€eva jooksul viisin lĂ€bi eksperimenti OpenWhiski juurutamisel Kuberneteses, et luua lihtne ja kiire keskkond ĂŒlesannete katsetamiseks. Kuna ma olen Kuberneteses algaja - arvan, et mul kulus pĂ€evade jooksul 1,5 pĂ€eva edukaks juurutamiseks. selles Repositooriumis on vĂ€ga arusaadavad juhised OpenWhiski juurutamiseks Kuberneteses. Siin on juhised juurutamiseks, mis on koostatud Maci jaoks (ma teen kĂ”ik ka Linuxis, sest eelistan Linuxit. — tĂ”lkija mĂ€rkus).

  1. Paigaldame paketihalduri asdf, pÀrast mida parandame automaatselt ~/.bash_profile vÔi selle analooge nii:

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

[Linuxis pole see samm vajalik, kuigi brew on olemas. — tĂ”lkija mĂ€rkus]

  1. Lisame pluginaid minikube ja kubelet:

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

[JĂ€llegi jĂ€tame selle sammu Linuxis vahele. — tĂ”lkija mĂ€rkus]

  1. Paigaldame minikube ja kubeleti:

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

[paigaldatakse konkreetsed versioonid, kuid ma kontrollisin kĂ”ike uusimate saadaval olevate versioonide kohta Linuxis; kahtlen, et vĂ”ib julgelt paigaldada latest. — tĂ”lkija mĂ€rkus]

Linuxis tehakse see samm umbes nii (kÔik paigaldatakse ~ /bin, mis on mul PATH-is, tÔlkija mÀrkus):

$ 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. Loome minikube virtuaalmaquina (VirtualBox peab olema eelnevalt installitud):

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

[Mul kĂ”ik töötab kĂ€suga minikube start , ilma parameetriteta ja vaikimisi vÀÀrtustega. — tĂ”lkija mĂ€rkus]

$ minikube start
  minikube v1.5.2 Debian 8.11-s
  Automaatselt valitud 'virtualbox' draiver
  Laadimine VM alglaadimisfaili ...
    > 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
  Virtuaalboxi VM loomine (CPU-d=2, MÀlu=4096MB, KÔvaketas=20000MB) ...
  Kubernetes v1.16.2 ettevalmistamine Docker '18.09.9' ...
  kubelet v1.16.2 allalaadimine
  kubeadm v1.16.2 allalaadimine
  Piltide tÔmbamine ...
  Kubernetes kÀivitamine ... Ootame: apiserver
  Valmis! kubectl on nĂŒĂŒd seadistatud kasutama "minikube"

  1. LĂŒlitame Dockeris vĂ”rgu udusse reĆŸiimi:

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

  1. Loome namespace'i ja mÀrgistame tööulatus:

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

  1. Saame hoidla sisu ja ĂŒletame ingress'i tĂŒĂŒbi failis 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. Installeerime Helm'i ja teeme selle abil juurutamise:

$ brew install kubernetes-helm
$ helm init # init Helm Tiller, ei ole vajalik Helm v3+ korral
$ kubectl get pods -n kube-system # veenduge, et tiller-deploy on töötavas olekus, ei ole vajalik helm v3+
$ kubectl create clusterrolebinding tiller-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default
$ helm install ./openwhisk/helm/ --namespace=openwhisk -f mycluster.yaml

[Linuxil varasemate versioonidega (oli saadaval v3.0.1) on see veidi erinev. — tĂ”lkija mĂ€rkus]

$ 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. Kontrollime, et kÔik oleks töös (OLEK = Running vÔi 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. Seameerk, et oleme seadistamas wski, et töötada:

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

Kontrollime:

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

Probleemid ja nende lahendused

getsockopt: ĂŒhendus keelatud

$ 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: ĂŒhendus keelatud

Kontrollime, et konteinerid namespace'is openwhisk on olekus KÀimas, kuna mÔnikord langeb see viga alla CreateContainerConfigError.

Invoker on endiselt kĂ€ivitamisel — Init:1/2

Allalaadimisprotsess erinevatest kĂ€ituskeskkondadest vĂ”ib aega vĂ”tta. Kiiremaks tegemiseks vĂ”ite mÀÀrata lĂŒhikese minimaalsete nimekirjade faili mycluster.yaml:

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

Konteiner nimega -install-packages- kukub Errorisse

Lihtsalt suurendage elujÔu testide ajapiire.

OpenWhiski installimine Knative'i peale

Priti Desai tegi installimise IBM-i pilveklastri peale ja samuti tavalise minikube peale, kasutades Knative Build'i ja BuildTemplates'i. Ma hakkan ka installima minikube'i peale, toetudes sellele, kuidas see oli kirjeldatud Meie blogis varem — kasutades uusimaid tarkvaraversioone. Kuna Knative Build ja BuildTemplates on ametlikult kasutuskĂ”lbmatuks kuulutatud, kasutan soovitatud asendust Tekton Pipelines'i nĂ€ol. Artikli edasine osa on kirjutatud pĂ€rast Tekton Pipelines'i dokumentatsiooni lugemist, kuid pĂ”hineb Priti ideedel. Töötamiseks on vajalik juurdepÀÀs mĂ”nele Docker Registry'le — mina, nagu ka originaalautor, kasutan DockerHub'i.

$ 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

Serverivabad arvutused OpenWhiski baasil, osa 4
OpenWhiski ehitamine ja töö Knative'i peal

  1. Saame sisu sellelt repolt:

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

  1. Seame keskkonnamuutujad registrisse juurdepÀÀsuks ja salvestame need Kubernetes'i saladusena:

$ 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

Kontrollime:

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

  1. Loome konto keskkondade ehitamiseks:

$ kubectl apply -f service-account.yaml

Kontrollime:

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

  1. Loome ĂŒlesande OpenWhiski pildi ehitamiseks

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

  1. KĂ€ivitame ĂŒlesande pildi ehitamiseks (NodeJS'i nĂ€itel):

Loome faili taskrun.yaml jÀrgmise sisuga:

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

Kohaldame selle faili aktuaalseid andmeid:

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

Kohaldame:

$ 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

Töö kontrollimine seisneb pod'i nime saamise, selle staatuse vaatamise ning igas sammus tÀitmise logi vaatamises, nÀiteks:

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

PÀrast tÀitmist ilmub meie Registry'sse pilt, mida saab kasutada Knative teenuste haldamiseks mÔeldud kn utiliidiga, nÀiteks:

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

Kui kasutate Gloo, saate töökindlust kontrollida jÀrgmiselt:

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

Sari teise artiklid

Besserveri arvutused OpenWhiski pÔhjal, osa 1
Besserveri arvutused OpenWhiski pÔhjal, osa 2
Besserveri arvutused OpenWhiski pÔhjal, osa 3
Serverivabad arvutused OpenWhiski baasil, osa 4

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster