
Kyăăźèšäșçšă«ă”ăăŁăŠăăCollectk - ProHosterăŻăOpenWhiskăźçż»èšłăĄăąă”ă€ăŻă«ăćźäșăăăŸăăäœè 㯠. Sot sot ngjam lirĂ« por nĂ« Kubernetes me komanda tĂ« riparuara pĂ«r tĂ« funksionuar me versionet aktuale tĂ« aplikacioneve. Do tĂ« pĂ«rshkruajmĂ« gjithashtu procesin e aktivizimit tĂ« funksioneve OpenWhisk duke pĂ«rdorur Knative dhe TektonCD nĂ« Kubernetes me mjedisin e ekzekutimit Nodejs.
Zhvillimi i OpenWhisk në Kubernetes
GjatĂ« disa ditĂ«ve kam zhvilluar njĂ« eksperiment pĂ«r tĂ« zhvilluar OpenWhisk nĂ« Kubernetes pĂ«r tĂ« krijuar njĂ« platformĂ« tĂ« thjeshtĂ« dhe tĂ« shpejtĂ« pĂ«r tĂ« provuar detyrat. Duke qenĂ« se jam njĂ« fillestar nĂ« Kubernetes, besoj se njĂ« ditĂ« e gjysmĂ« ishte e mjaftueshme pĂ«r njĂ« zhvillim tĂ« suksesshĂ«m. NĂ« repo ka instrukcione shumĂ« tĂ« qarta pĂ«r zhvillimin e OpenWhisk nĂ« Kubernetes. KĂ«tu do tĂ« jenĂ« udhĂ«zimet pĂ«r zhvillimin, tĂ« bĂ«ra pĂ«r Mac (do tĂ« bĂ«j gjithçka edhe nĂ« Linux, pasi preferoj Linux. â shĂ«nim i pĂ«rkthyesit).
- Instaloni menaxherin e paketave
asdf, pastaj korrigjojmë automatikisht~/.bash_profileose ekuivalentin e tij si më poshtë:
$ brew install asdf
$ [ -s "/usr/local/opt/asdf/asdf.sh" ] && . /usr/local/opt/asdf/asdf.sh
$ source ~/.bash_profile[NĂ« Linux ky hap nuk Ă«shtĂ« i nevojshĂ«m, ndonĂ«se brew Ă«shtĂ« i pranishĂ«m. â shĂ«nim i pĂ«rkthyesit]
- Shtojmë pluginet
minikubedhekubelet:
$ asdf plugin-add kubectl
$ asdf plugin-add minikube[PĂ«rsĂ«ri e kalojmĂ« kĂ«tĂ« hap nĂ« Linux. â shĂ«nim i pĂ«rkthyesit]
- Instalojmë 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[instalohen versionet e caktuara, por unĂ« e kontrollova gjithçka nĂ« versionet mĂ« tĂ« fundit tĂ« disponueshme pĂ«r Linux; dyshoj se mund tĂ« instaloni me besim latest. â shĂ«nim i pĂ«rkthyesit]
Në Linux ky hap bëhet kështu (gjithçka instalohet në ~/bin, i cili është i përfshirë në PATH, 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/- Krijojmë një makinë virtuale minikube (duhet të jetë instaluar më parë VirtualBox):
$ minikube start --cpus 2 --memory 4096 --kubernetes-version=v1.9.0 --extra-config=apiserver.Authorization.Mode=RBAC[MĂ« funksionon me komandĂ«n minikube start , pa parametra dhe me vlera nĂ« parazgjedhje. â shĂ«nim i pĂ«rkthyesit]
$ minikube start
minikube v1.5.2 mbi Debian 8.11
Ktheu drejtuesin 'virtualbox' automatikisht
Po shkarko imazhin e boot-it të VM ...
> 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
Po krijohet VM virtualbox (CPUs=2, Memories=4096MB, Disku=20000MB) ...
Po përgatitet Kubernetes v1.16.2 në Docker '18.09.9' ...
Po shkarkohet kubelet v1.16.2
Po shkarkohet kubeadm v1.16.2
Po tërhiqen imazhet ...
Po nxitet Kubernetes ... Po presim për: apiserver
Kryer! kubectl tani është konfiguruar për të përdorur "minikube"- Kalim në rrjetin Docker në modin e papërdorshëm:
$ minikube ssh -- sudo ip link set docker0 promisc on- Krijojmë namespace dhe etiketojmë nodin e punës:
$ kubectl create namespace openwhisk
$ kubectl label nodes --all openwhisk-role=invoker- Merrni përmbajtjen e depoit dhe r redefinoni llojin për ingress në skedarin 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- Instaloni Helm dhe realizoni shpërndarjen me të:
$ brew install kubernetes-helm
$ helm init # filloni Helm Tiller, nuk është e nevojshme në Helm v3+
$ kubectl get pods -n kube-system # verifikoni që tiller-deploy është në gjendjen e funksionimit, nuk është e nevojshme në helm v3+
$ kubectl create clusterrolebinding tiller-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default
$ helm install ./openwhisk/helm/ --namespace=openwhisk -f mycluster.yaml[NĂ« Linux me versionet mĂ« tĂ« fundit (ishte e disponueshme v3.0.1) do tĂ« jetĂ« pak ndryshe. â shĂ«nim i pĂ«rkthyesit]
$ 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- Kontrolloni që gjithçka është ngritur (STATUS = Running ose 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- Konfigurojmë wsk për të punuar:
$ wsk property set --apihost 192.168.99.100:31001
$ wsk property set --auth 23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwPPo kontrollojmë:
$ wsk -i list
Entitetet në hapësirën: default
paketash
veprime
ngacmime
rregullaProblemet dhe solucionet
getsockopt: lidhja u refuzua
$ wsk -i list
error: Nuk mund të marr listën e entiteteve për hapësirën 'default': Get http://192.168.99.100:31001/api/v1/namespaces/_/actions?limit=0&skip=0: dial tcp 192.168.99.100:31001: getsockopt: lidhja u refuzuaKontrollojmë se kontejnerët në hapësirën openwhisk janë në status Running, sepse ndonjëherë ndodhin rëniet me gabime CreateContainerConfigError.
Invoker ende nĂ« procesin e inicializimit â Init:1/2
Procesi i shkarkimit të të gjitha mjediseve të ekzekutimit mund të marrë shumë kohë. Për të përshpejtuar, mund të specifikoni një listë minimale të shkurtuar në skedarin mycluster.yaml:
whisk:
runtimes: "runtimes-minimal-travis.json"Kontejneri me emrin -install-packages- pësohet me Error
Thjesht rrisni kohët e pritjes për testet e vërtetësisë.
Instalimi i OpenWhisk mbi Knative
Priti Desai realizoi instalimin mbi klastri nĂ« IBM Cloud, si dhe nĂ« minikube tĂ« zakonshĂ«m, duke pĂ«rdorur Knative Build dhe BuildTemplates. Edhe unĂ« do tĂ« instaloj mbi minikube, duke u bazuar nĂ« mĂ«nyrĂ«n se si nĂ« blogun tonĂ« mĂ« parĂ« â duke pĂ«rdorur versionet mĂ« tĂ« fundit tĂ« softuerit. Pasi Knative Build dhe BuildTemplates janĂ« shpallur zyrtarisht tĂ« degraduara, do tĂ« pĂ«rdor zĂ«vendĂ«simin e rekomanduar nĂ« formĂ«n e Tekton Pipelines. Pjesa e mbetur e artikullit Ă«shtĂ« shkruar pas leximit tĂ« dokumentacionit pĂ«r Tekton Pipelines, por Ă«shtĂ« e bazuar nĂ« idetĂ« e Priti. Do tĂ« nevojitet qasje nĂ« njĂ« regjistrim Docker â unĂ«, ashtu 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
EMRI GATI STATUS RIMARRJES MOSHA
activator-77fc555665-rvrst 1/1 Duke funksionuar 0 2m23s
autoscaler-5c98b7c9b6-x8hh4 1/1 Duke funksionuar 0 2m21s
autoscaler-hpa-5cfd4f6845-w87kq 1/1 Duke funksionuar 0 2m22s
controller-7fd74c8f67-tprm8 1/1 Duke funksionuar 0 2m19s
webhook-74847bb77c-txr2g 1/1 Duke funksionuar 0 2m17s
$ kubectl get pods -n gloo-system
EMRI GATI STATUS RIMARRJES MOSHA
discovery-859d7fbc9c-8xhvh 1/1 Duke funksionuar 0 51s
gloo-545886d9c6-85mwt 1/1 Duke funksionuar 0 51s
ingress-67d4996d75-lkkmw 1/1 Duke funksionuar 0 50s
knative-external-proxy-767dfd656c-wwv2z 1/1 Duke funksionuar 0 50s
knative-internal-proxy-6fdddcc6b5-7vqd8 1/1 Duke funksionuar 0 51s
Ndërtimi dhe funksionimi i OpenWhisk mbi Knative
- Merrni përmbajtjen :
$ git clone https://github.com/tektoncd/catalog/
$ cd catalog/openwhisk- Vendosim si variabla mjedisi të dhënat për qasje në Registry dhe i ruajmë ato si një sekret Kubernetes:
$ 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.yamlPo kontrollojmë:
$ kubectl get secret
EMRI LLOJI TĂ DHĂNAT MOSHA
dockerhub-user-pass kubernetes.io/basic-auth 2 21s- Krijojmë një llogari për ndërtimin e mjediseve:
$ kubectl apply -f service-account.yamlPo kontrollojmë:
$ kubectl get serviceaccount/openwhisk-runtime-builder
EMRI SEKRETET MOSHA
openwhisk-runtime-builder 2 31m- Krijojmë një detyrë për ndërtimin e imazhit për OpenWhisk
$ kubectl apply -f openwhisk.yaml
task.tekton.dev/openwhisk created- Nisim detyrën për ndërtimin e imazhit (në shembullin e NodeJS):
Krijojmë një skedë 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
---Zbatoni të dhënat aktuale për këtë skedë:
$ sed 's/${DOCKER_USERNAME}/'"$DOCKER_USERNAME"'/' -i taskrun.yamlZbatoni:
$ 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 createdKontrolli i funksionimit përfshin marrjen e emrit të pod-it, shikimin e statusit të tij. Gjithashtu mund të shikoni ditarin e ekzekutimit të çdo hapi, 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 pasjes bashkëngjitet në Registry një imazh që mund të shfaqet me përdorimin e utilitarit kn, i cili është i destinuar për të punuar me shërbimet Knative, për shembull:
kn service create nodejs-helloworld --image docker.io/${DOCKER_USERNAME}/openwhisk-nodejs-helloworld
Shërbimi 'nodejs-helloworld' u krijua me sukses në hapësirën e emrave 'default'.
Duke pritur që shërbimi 'nodejs-helloworld' të bëhet i gatshëm ... OK
URL e shërbimit:
http://nodejs-helloworld.default.example.comNë rastin e përdorimit të Gloo, mund ta kontrolloni funksionalitetin kështu:
$ 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!"}Artikujt e tjerë të ciklit
Burimi: habr.com
