
Ky artikull përfundon serinë e shënimeve të përkthyera rreth OpenWhisk nga autori . 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Ë 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).
- Instalimi i menaxherit të paketave
asdf, pas së cilës korrigjojmë automatikisht~/.bash_profileose 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]
- 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]
- 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/- 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"- Kalimi i rrjetit në Docker në modalitetin promiscuous:
$ minikube ssh -- sudo ip link set docker0 promisc on- Krijoni një hapësirë emri dhe shënoni nyjen e punës:
$ kubectl create namespace openwhisk
$ kubectl label nodes --all openwhisk-role=invoker- 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- 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- 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- 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:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwPkontrolloni:
$ wsk -i list
Entities in namespace: default
packages
actions
triggers
rulesProblemet 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 refusedKontrollimi 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 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
Ndërtimi dhe ekzekutimi i OpenWhisk në krye të Knative
- Marrja e përmbajtjes :
$ git clone https://github.com/tektoncd/catalog/
$ cd catalog/openwhisk- 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.yamlkontrolloni:
$ kubectl get secret
NAME TYPE DATA AGE
dockerhub-user-pass kubernetes.io/basic-auth 2 21s- Krijoni një llogari për mjediset e ndërtimit:
$ kubectl apply -f service-account.yamlkontrolloni:
$ kubectl get serviceaccount/openwhisk-runtime-builder
NAME SECRETS AGE
openwhisk-runtime-builder 2 31m- Krijo një detyrë për të ndërtuar një imazh për OpenWhisk
$ kubectl apply -f openwhisk.yaml
task.tekton.dev/openwhisk created- 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.yamlNe 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 createdKontrollimi 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.comNë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
Burimi: www.habr.com
