Այս հոդվածը ավարտում է հեղինակի OpenWhisk-ի մասին թարգմանված նշումների շարքը Պրիտի Դեսաի. Այսօր մենք կանդրադառնանք Kubernetes-ի վրա OpenWhisk-ի տեղակայման գործընթացին՝ շտկված հրամաններով՝ հավելվածների ընթացիկ տարբերակների հետ աշխատելու համար: Այն նաև կներառի OpenWhisk գործառույթների գործարկման գործընթացը Kubernetes-ում Knative-ի և TektonCD-ի միջոցով՝ օգտագործելով Nodejs-ի գործարկման ժամանակը:
OpenWhisk-ի տեղակայում Kubernetes-ում
Մի քանի օրվա ընթացքում ես փորձարկեցի OpenWhisk-ի տեղակայումը Kubernetes-ում՝ պարզ և արագ փորձարկման վայր ստեղծելու համար: Եվ քանի որ ես նոր եմ Kubernetes-ում, կարծում եմ, որ մեկուկես օր ծախսվել է հաջող տեղակայման վրա: IN սա է Պահեստները շատ հստակ հրահանգներ ունեն Kubernetes-ում OpenWhisk-ի տեղակայման համար: Ահա տեղակայման հրահանգները, որոնք պատրաստված են Mac-ի համար (Ես նույնպես կանեմ ամեն ինչ Linux-ով, քանի որ նախընտրում եմ Linux-ը։ - մոտ. թարգմանիչ):
Փաթեթի կառավարչի տեղադրում asdf, որից հետո ինքնաբերաբար ուղղում ենք ~/.bash_profile կամ դրա համարժեքը այսպես.
[Կրկին բաց թողեք այս քայլը Linux-ում: - մոտ. թարգմանիչ]
Տեղադրեք minikube և 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
[տեղադրված են հատուկ տարբերակներ, բայց ես ամեն ինչ ստուգեցի Linux-ի վերջին հասանելի տարբերակների վրա. Ես կասկածում եմ, որ դուք կարող եք ապահով տեղադրել վերջինը: - մոտ. թարգմանիչ]
Linux-ում այս քայլն արվում է այսպես (ամեն ինչ դրված է ~/bin-ում, որը նշված է իմ PATH-ում, թարգմանչի գրառման մեջ).
$ 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
[Linux-ում վերջին տարբերակներով (v3.0.1-ը հասանելի էր) մի փոքր այլ կլինի։ - մոտ. թարգմանիչ]
$ wsk property set --apihost 192.168.99.100:31001
$ wsk property set --auth 23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP
Մենք ստուգում ենք.
$ wsk -i list
Entities in namespace: default
packages
actions
triggers
rules
Խնդիրները և դրանց լուծումները
getsockopt. կապը մերժվել է
$ 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
Ստուգելով, որ բեռնարկղերը գտնվում են անվանման տարածքում openwhisk կարգավիճակում Running, որովհետեւ երբեմն այն խափանում է սխալներով CreateContainerConfigError.
Invoker-ը դեռ սկզբնավորում է — Init:1/2
Տարբեր գործարկման միջավայրեր ներբեռնելու գործընթացը կարող է երկար տևել: Գործերն արագացնելու համար կարող եք ֆայլում նշել կրճատված նվազագույն ցանկը mycluster.yaml:
whisk:
runtimes: "runtimes-minimal-travis.json"
Կոնտեյներ անունով -տեղադրել-փաթեթներ- խափանում է Սխալ
Պարզապես ավելացրեք աշխուժության թեստերի ժամանակացույցը:
OpenWhisk-ի տեղադրում Knative-ի վրա
Priti Desai-ն իրականացրեց տեղադրումը IBM ամպի կլաստերի վերևում, ինչպես նաև սովորական մինիկուբի վրա՝ օգտագործելով Knative Build և BuildTemplates: Կտեղադրեմ նաև minukube-ի վերևում, թե ինչպես նկարագրված էր մեր բլոգում ավելի վաղ՝ օգտագործելով ծրագրաշարի վերջին տարբերակները: Քանի որ Knative Build-ը և BuildTemplates-ը պաշտոնապես հնացած են, ես կօգտագործեմ առաջարկվող փոխարինումը Tekton Pipelines-ի տեսքով: Հոդվածի մնացած մասը գրվել է Tekton Pipelines-ի համար փաստաթղթերը կարդալուց հետո, սակայն հիմնված է Պրիտիի գաղափարների վրա: Աշխատելու համար ձեզ հարկավոր է մուտք գործել որոշ Docker Registry. ես, ինչպես սկզբնական հեղինակը, կօգտագործեմ DockerHub-ը:
Մենք կիրառում ենք ընթացիկ տվյալները այս ֆայլի համար.
$ sed 's/${DOCKER_USERNAME}/'"$DOCKER_USERNAME"'/' -i taskrun.yaml
Մենք դիմում ենք.
$ 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
Աշխատանքի ստուգումը բաղկացած է պատիճի անունը ստանալուց և նրա կարգավիճակը դիտելուց: Կարող եք նաև դիտել յուրաքանչյուր քայլի կատարման մատյանը, օրինակ՝
$ 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"}
Կատարումից հետո մենք ռեգիստրում կունենանք պատկեր, որը կարող է տեղակայվել kn կոմունալ ծրագրի միջոցով, որը նախատեսված է Knative ծառայությունների հետ աշխատելու համար, օրինակ.
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
Եթե դուք օգտագործում եք Gloo, կարող եք ստուգել դրա ֆունկցիոնալությունը հետևյալ կերպ.