Nkhaniyi ikumaliza zolemba zomasulira za OpenWhisk kuchokera kwa wolemba
Kutumiza OpenWhisk pa Kubernetes
M'kupita kwa masiku angapo, ndinayesa kutumiza OpenWhisk ku Kubernetes kuti apange malo oyesera osavuta komanso ofulumira. Ndipo popeza ndine watsopano ku Kubernetes, ndikukhulupirira kuti tsiku limodzi ndi theka linagwiritsidwa ntchito potumiza bwino. MU
- Kukhazikitsa woyang'anira phukusi
asdf
, pambuyo pake timakonza zokha~/.bash_profile
kapena kufanana kwake ndi izi:
$ brew install asdf
$ [ -s "/usr/local/opt/asdf/asdf.sh" ] && . /usr/local/opt/asdf/asdf.sh
$ source ~/.bash_profile
[Pa Linux sitepe iyi sikufunika, ngakhale brew ilipo. - pafupifupi. womasulira]
- Kuwonjezera mapulagini
minikube
ΠΈkubelet
:
$ asdf plugin-add kubectl
$ asdf plugin-add minikube
[Apanso, dumphani izi pa Linux. - pafupifupi. womasulira]
- Ikani minikube ndi 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
[matembenuzidwe enieni aikidwa, koma ndinayang'ana chirichonse pamitundu yaposachedwa ya Linux; Ndikukayikira kuti mutha kukhazikitsa zatsopano. - pafupifupi. womasulira]
Pa Linux, sitepe iyi yachitika motere (zonse zimayikidwa ~/bin, zomwe zalembedwa mu PATH yanga, zolemba za womasulira):
$ 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/
- Pangani makina a minikube (VirtualBox iyenera kukhazikitsidwa kale):
$ minikube start --cpus 2 --memory 4096 --kubernetes-version=v1.9.0 --extra-config=apiserver.Authorization.Mode=RBAC
[Zonse zimandiyendera ndi timu minikube start
, opanda magawo komanso zosintha zosasintha. - pafupifupi. womasulira]
$ 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"
- Kusintha netiweki mu Docker kuti ikhale yachiwerewere:
$ minikube ssh -- sudo ip link set docker0 promisc on
- Pangani dzina ndikuyika chizindikiro cha ogwira ntchito:
$ kubectl create namespace openwhisk
$ kubectl label nodes --all openwhisk-role=invoker
- Timapeza zomwe zili munkhokwe ndikuchotsa mtundu wa ingress mu fayilo ya 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
- Ikani Helm ndikuyigwiritsa ntchito:
$ 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
[Pa Linux yokhala ndi matembenuzidwe aposachedwa (v3.0.1 inalipo) idzakhala yosiyana pang'ono. - pafupifupi. womasulira]
$ 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
- Tikuwona kuti chilichonse chawuka (STATUS = Kuthamanga kapena Kumaliza):
$ 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
- Kukonza wsk kuti igwire ntchito:
$ wsk property set --apihost 192.168.99.100:31001
$ wsk property set --auth 23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP
Kufufuza:
$ wsk -i list
Entities in namespace: default
packages
actions
triggers
rules
Mavuto ndi Mayankho
getsockokopt: kulumikizana kwakana
$ 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 refused
Kuwona ngati zotengerazo zili m'malo a mayina openwhisk
mu udindo Running
, chifukwa nthawi zina zimakumana ndi zolakwika CreateContainerConfigError
.
Woyambitsa akuyambitsabe - Init:1/2
Njira yotsitsa malo osiyanasiyana othamanga imatha kutenga nthawi yayitali. Kuti mufulumizitse zinthu, mutha kufotokozera mwachidule mndandanda wocheperako mufayilo mycluster.yaml
:
whisk:
runtimes: "runtimes-minimal-travis.json"
Chidebe chokhala ndi dzina -ikani-package- kuwonongeka kwa Error
Ingowonjezerani nthawi yoyezetsa moyo wanu.
Kuyika OpenWhisk pa Knative
Priti Desai adakhazikitsa pamwamba pa gulu mumtambo wa IBM, komanso pa minikube wokhazikika, pogwiritsa ntchito Knative Build and BuildTemplates. Ndikhazikitsanso pamwamba pa minukube, kutengera momwe
$ 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
Kumanga ndi kuyendetsa OpenWhisk pamwamba pa Knative
- Kupeza zomwe zili mkati
chosungira ichi :
$ git clone https://github.com/tektoncd/catalog/
$ cd catalog/openwhisk
- Timayika zidziwitso zofikira ku Registry ngati zosintha zachilengedwe ndikuzisunga ngati chinsinsi cha 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.yaml
Kufufuza:
$ kubectl get secret
NAME TYPE DATA AGE
dockerhub-user-pass kubernetes.io/basic-auth 2 21s
- Pangani akaunti yomanga malo:
$ kubectl apply -f service-account.yaml
Kufufuza:
$ kubectl get serviceaccount/openwhisk-runtime-builder
NAME SECRETS AGE
openwhisk-runtime-builder 2 31m
- Pangani ntchito kuti mupange chithunzi cha OpenWhisk
$ kubectl apply -f openwhisk.yaml
task.tekton.dev/openwhisk created
- Timayendetsa ntchito yomanga chithunzicho (pogwiritsa ntchito NodeJS mwachitsanzo):
Pangani fayilo ya taskrun.yaml ndi zomwe zili:
# 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
---
Timayika zomwe zili mufayiloyi:
$ sed 's/${DOCKER_USERNAME}/'"$DOCKER_USERNAME"'/' -i taskrun.yaml
Timalemba:
$ 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
Kuyang'ana ntchito kumafuna kupeza dzina la pod ndikuwona momwe ilili. Mukhozanso kuwona chipika chotsatira cha sitepe iliyonse, mwachitsanzo:
$ 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"}
Pambuyo pa kuphedwa, tidzakhala ndi chithunzi mu Registry chomwe chitha kugwiritsidwa ntchito pogwiritsa ntchito kn, chopangidwa kuti chigwire ntchito ndi Knative services, mwachitsanzo:
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
Ngati mugwiritsa ntchito Gloo, mutha kuyang'ana magwiridwe ake motere:
$ 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!"}
Nkhani zina mu mndandanda
Source: www.habr.com