
Hierdie artikel eindig die reeks vertaalde notas oor OpenWhisk van die skrywer . Vandag sal ons kyk na die proses om OpenWhisk oor Kubernetes te ontplooi met gekorrigeerde opdragte om met huidige weergawes van toepassings te werk. Dit sal ook die proses dek om OpenWhisk-funksies uit te voer deur Knative en TektonCD op Kubernetes te gebruik deur die Nodejs-looptyd te gebruik.
Ontplooi OpenWhisk op Kubernetes
In die loop van 'n paar dae het ek geëksperimenteer met die implementering van OpenWhisk na Kubernetes om 'n eenvoudige en vinnige toetsgrond te skep. En aangesien ek nuut by Kubernetes is, glo ek dat 'n dag en 'n half aan suksesvolle ontplooiing bestee is. IN Die bewaarplekke het baie duidelike instruksies vir die implementering van OpenWhisk op Kubernetes. Hier is die ontplooiingsinstruksies gemaak vir Mac (Ek sal ook alles doen Linux, want ek verkies Linux. — ongeveer. vertaler).
- Installeer die pakketbestuurder
asdf, waarna ons outomaties regstel~/.bash_profileof sy ekwivalent soos volg:
$ brew install asdf
$ [ -s "/usr/local/opt/asdf/asdf.sh" ] && . /usr/local/opt/asdf/asdf.sh
$ source ~/.bash_profile[Op Linux Hierdie stap is nie nodig nie, alhoewel brousel beskikbaar is. — ongeveer. vertaler]
- Voeg plugins by
minikubeиkubelet:
$ asdf plugin-add kubectl
$ asdf plugin-add minikube[Weereens, ons slaan hierdie stap oor Linux. — ongeveer. vertaler]
- Installeer minikube en 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[spesifieke weergawes is geïnstalleer, maar ek het alles op die nuutste beskikbare weergawes nagegaan vir LinuxEk vermoed dat jy die nuutste veilig kan installeer. — ongeveer. vertaler]
Op Linux Hierdie stap word so gedoen (alles word geïnstalleer in ~/bin, wat in my PATH is, vertaler se nota):
$ 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/- Skep 'n minikube virtuele masjien (VirtualBox moet vooraf geïnstalleer word):
$ minikube start --cpus 2 --memory 4096 --kubernetes-version=v1.9.0 --extra-config=apiserver.Authorization.Mode=RBAC[Alles werk vir my met die span minikube start , sonder parameters en met verstekwaardes. — ongeveer. vertaler]
$ 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"- Skakel die netwerk in Docker na promiskue modus:
$ minikube ssh -- sudo ip link set docker0 promisc on- Skep 'n naamruimte en merk die werkernodus:
$ kubectl create namespace openwhisk
$ kubectl label nodes --all openwhisk-role=invoker- Ons kry die inhoud van die bewaarplek en ignoreer die tipe vir ingang in die mycluster.yaml-lêer:
$ 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- Installeer Helm en ontplooi dit deur dit te gebruik:
$ 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[Op Linux Met die nuutste weergawes (v3.0.1 was beskikbaar) sal dit 'n bietjie anders wees. — ongeveer. vertaler]
$ 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- Ons kyk of alles gestyg het (STATUS = Loop of Voltooi):
$ 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- Stel wsk op om te werk:
$ wsk property set --apihost 192.168.99.100:31001
$ wsk property set --auth 23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwPOns kyk na:
$ wsk -i list
Entities in namespace: default
packages
actions
triggers
rulesProbleme en hul oplossings
getsockopt: verbinding geweier
$ 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 refusedKontroleer dat die houers in die naamruimte is openwhisk in status Running, omdat soms crash dit met foute CreateContainerConfigError.
Invoker initialiseer steeds — Init:1/2
Die proses om verskeie looptydomgewings af te laai, kan lank neem. Om dinge te bespoedig, kan jy 'n verkorte minimum lys in die lêer spesifiseer mycluster.yaml:
whisk:
runtimes: "runtimes-minimal-travis.json"Houer met naam -installeer-pakkette- omval na Fout
Verhoog net die tydsduur vir lewendheidstoetse.
Installeer OpenWhisk oor Knative
Priti Desai het die installasie bo-op 'n groepering in die IBM-wolk uitgevoer, sowel as op 'n gewone minikube, met behulp van Knative Build en BuildTemplates. Ek sal ook bo-op minukube installeer, gebaseer op hoe in ons blog vroeër - met behulp van die nuutste sagteware weergawes. Aangesien Knative Build and Build Templates amptelik afgekeur is, sal ek die aanbevole vervanging in die vorm van Tekton Pipelines gebruik. Die res van die artikel is geskryf nadat die dokumentasie vir Tekton Pipelines gelees is, maar is gebaseer op die idees van Priti. Om te werk, sal jy toegang tot een of ander Docker Registry nodig hê - ek, soos die oorspronklike skrywer, sal DockerHub gebruik.
$ 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
Bou en hardloop OpenWhisk bo-op Knative
- Kry die inhoud :
$ git clone https://github.com/tektoncd/catalog/
$ cd catalog/openwhisk- Ons stel die data vir toegang tot die register as omgewingsveranderlikes en stoor dit as 'n Kubernetes-geheim:
$ 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.yamlOns kyk na:
$ kubectl get secret
NAME TYPE DATA AGE
dockerhub-user-pass kubernetes.io/basic-auth 2 21s- Skep 'n rekening vir bou-omgewings:
$ kubectl apply -f service-account.yamlOns kyk na:
$ kubectl get serviceaccount/openwhisk-runtime-builder
NAME SECRETS AGE
openwhisk-runtime-builder 2 31m- Skep 'n taak om 'n prent vir OpenWhisk te bou
$ kubectl apply -f openwhisk.yaml
task.tekton.dev/openwhisk created- Ons voer die taak uit om die beeld te bou (met NodeJS as voorbeeld):
Skep 'n taskrun.yaml-lêer met die inhoud:
# 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
---Ons pas die huidige data vir hierdie lêer toe:
$ sed 's/${DOCKER_USERNAME}/'"$DOCKER_USERNAME"'/' -i taskrun.yamlOns pas toe:
$ 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 createdOm die werk na te gaan, bestaan uit die kry van die peul se naam en kyk na sy status. U kan ook die uitvoeringslogboek van elke stap sien, byvoorbeeld:
$ 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"}Na uitvoering sal ons 'n prent in die register hê wat ontplooi kan word met die kn-hulpprogram, wat ontwerp is om met Knative-dienste te werk, byvoorbeeld:
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.comAs jy Gloo gebruik, kan jy die funksionaliteit daarvan soos volg nagaan:
$ 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!"}Ander artikels in die reeks
Bron: will.com
