
Šis straipsnis užbaigia išverstų autoriaus pastabų apie OpenWhisk seriją . Š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 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).
- Paketų tvarkyklės įdiegimas
asdf, po kurio automatiškai pataisome~/.bash_profilearba 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]
- Papildinių pridėjimas
minikubeиkubelet:
$ asdf plugin-add kubectl
$ asdf plugin-add minikube[Vėlgi, praleidžiame šį žingsnį Linux. - apytiksliai vertėjas]
- Į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/- 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"- Tinklo perjungimas programoje „Docker“ į „promiscuous“ režimą:
$ minikube ssh -- sudo ip link set docker0 promisc on- Sukurkite vardų erdvę ir pažymėkite darbuotojo mazgą:
$ kubectl create namespace openwhisk
$ kubectl label nodes --all openwhisk-role=invoker- 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- Į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- 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- Wsk konfigūravimas veikti:
$ wsk property set --apihost 192.168.99.100:31001
$ wsk property set --auth 23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwPMes patikriname:
$ wsk -i list
Entities in namespace: default
packages
actions
triggers
rulesProblemos 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 refusedTikrinama, 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 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
„OpenWhisk“ kūrimas ir paleidimas „Knative“ viršuje
- Turinio gavimas :
$ git clone https://github.com/tektoncd/catalog/
$ cd catalog/openwhisk- 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.yamlMes patikriname:
$ kubectl get secret
NAME TYPE DATA AGE
dockerhub-user-pass kubernetes.io/basic-auth 2 21s- Sukurkite paskyrą pastatų aplinkai:
$ kubectl apply -f service-account.yamlMes patikriname:
$ kubectl get serviceaccount/openwhisk-runtime-builder
NAME SECRETS AGE
openwhisk-runtime-builder 2 31m- Sukurkite užduotį, kad sukurtumėte „OpenWhisk“ vaizdą
$ kubectl apply -f openwhisk.yaml
task.tekton.dev/openwhisk created- 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.yamlMes 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 createdDarbo 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.comJei 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
Šaltinis: www.habr.com
