Անկախ նրանից, թե դուք տվյալների գիտնական եք, թե տվյալների ինժեներ, ձեր վերջնական նպատակը կլինի ձեր մեքենայական ուսուցման (ML) մոդելների հաջող տեղակայումը: OpenFaaS-ը կարող է օգնել ձեզ տեղակայել ձեր ML մոդելը որպես առանց սերվերի հավելված: Սա երկու շարքի ձեռնարկ է (երկրորդ մասը կհրապարակվի մոտ ապագայում): Այս առաջին մասը ձեզ ցույց է տալիս այն քայլերը, որոնք դուք պետք է.
1) Տեղադրեք և գործարկեք OpenFaaS-ը տեղական միջավայրում: Մենք օգտագործում ենք Linux վիրտուալ մեքենա VirtualBox-ում (windows 10 որպես հյուրընկալող համակարգ) և Kind կլաստեր՝ տեղական ռեգիստրով
2) Տեղադրեք «Hello World» Python գործառույթը OpenFaaS-ում
Այս ձեռնարկը ենթադրում է, որ դուք աշխատում եք Windows մեքենայի վրա VirtualBox-ով Linux OS-ով
Ի՞նչ է OpenFaaS-ը:
OpenFaaS-ը առանց սերվերի հավելվածներ ստեղծելու շրջանակային և ենթակառուցվածքի պատրաստման համակարգ է [1]: Այն ծրագրավորողների համար հեշտացնում է գործառույթների տեղակայումը Kubernetes-ում և աջակցում է տարբեր լեզուների, ինչպիսիք են՝ Python, Java, Go, C#:
OpenFaaS ճարտարապետությունը ներառում է API Gateway, Function Watchdog և Prometheus-ի օրինակ; բոլորն աշխատում են Docker Swarm կամ Kubernetes նվագախմբային շարժիչների վրա2: Գործընթացը սկսվում է docker-ի տեղադրմամբ և ավարտվում Gateway API [2]: Ձեզ անհրաժեշտ կլինի միայն օգտագործել Docker Swarm-ը կամ Kubernetes-ը, ոչ թե երկուսն էլ:
API Gateway. Միանում է ֆունկցիոնալ կոնտեյներներին ծածկույթի ցանցի միջոցով: Այն ապահովում է երթուղի դեպի բոլոր գործառույթների գտնվելու վայրը:
Function Watchdog. յուրաքանչյուր կոնտեյների մեջ ինտեգրված է պահակային բաղադրիչ: Watchdog-ի հիմնական խնդիրն է կազմակերպել API Gateway-ում ստացված HTTP հարցումը և զանգահարել ընտրված հավելվածին: Ֆունկցիոնալ ծրագրի պահանջն է միայն ընդունել մուտքագրումը ստանդարտ մուտքագրման միջոցով (stdin) և տպել արդյունքը, իհարկե, ստանդարտ ելքի (stdout) [3]:
Պրոմեթևս. ժամանակային շարքերի տվյալների բազա, որն օգտագործվում է չափորոշիչները գրանցելու համար
Տեղադրման ակնարկ
Այս ուղեցույցը օգնում է ձեզ գործառույթներ տեղակայել OpenFaaS-ում՝ օգտագործելով վիրտուալ մեքենա Ubuntu-ով: Տեղադրման ընդհանուր քայլերը, որոնք ներառում են այս փաստաթուղթը, հետևյալն են.
- Դոկեր [4]
- Kubectl[5]: Kubernetes հրամանի տող գործիք
- Kind[6]: գործիք՝ տեղական Kubernetes կլաստերների գործարկման համար՝ օգտագործելով Docker կոնտեյներային հանգույցները
- Arkade[7]: գործիք՝ հավելվածները հեշտությամբ տեղադրելու համար Kubernetes կլաստերի վերևում
- OpenFaaS [8]
Docker-ի տեղադրում
Տեղադրման հրահանգները կարելի է գտնել Docker-ի պաշտոնական փաստաթղթերում [9]:
1. Ստեղծեք պահեստը
ա. Թարմացրեք հետևյալ փաթեթները
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
բ. Ավելացնել Docker-ի պաշտոնական GPG բանալին
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
գ. Օգտագործեք հետևյալ հրամանը՝ կայուն պահեստը կարգավորելու համար։ Գիշերային կամ թեստային պահոցն ավելացնելու համար ստորև նշված հրամաններում կայուն բառից հետո ավելացրեք nightly կամ test (կամ երկուսն էլ) բառը:
echo\ "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(
lsb_release
-cs) stable"|
sudotee /etc/apt/sources.list.d/docker.list
>/dev/null
2. Տեղադրեք Docker Engine-ը
sudoapt-get update
sudoapt-get install docker-ce docker-ce-cli containerd.io
Docker-ն առանց sudo-ի օգտագործելու համար՝
sudo groupadd docker #may say that group already exists that is okay sudo usermod -aG docker $USER newgrp docker
3. Այժմ դուք կարող եք ստուգել տեղադրումը
docker run hello-world
Դուք պետք է կարողանաք տեսնել հետևյալ էկրանը.
Կարող եք նաև հաստատել՝ docker ps
Kubectl-ի տեղադրում
Kubectl-ի տեղադրման հրահանգները կարելի է գտնել Kubernetes-ի պաշտոնական փաստաթղթերում [10]
- Ներբեռնեք վերջին թողարկումը հրամանով
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
2. Ներբեռնեք kubectl checksum ֆայլը և վավերացրեք երկուականը (ըստ ցանկության)
curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
echo "$(<kubectl.sha256) kubectl" | sha256sum --check
3. Տեղադրեք kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
4. Փորձարկել տեղադրված տարբերակը
kubectl version --client
Բարի տեղադրում
- Ներբեռնեք go-ի թարմացված տարբերակը
wget https://dl.google.com/go/go1.16.3.linux-amd64.tar.gz sudo tar -xvf go1.16.3.linux-amd64.tar.gz sudo mv go /usr/local export GOROOT=/usr/local/go export PATH=$PATH:$(/usr/local/go/bin/go env GOPATH)/bin
Դարձրեք այս փոփոխությունը PATH-ում մշտական՝ ավելացնելով export PATH=$PATH:$(/usr/local/go/bin/go env GOPATH)/bin
ը .bashrc-ին (օրինակ՝ sudo nano ~/.bashrc
)
Եթե խնդիրներ ունեք, գուցե անհրաժեշտ լինի փոխել [11] թույլտվությունները՝ օգտագործելով sudo chmod
2. Տեղադրեք Kind-ը
GO111MODULE="on" /usr/local/go/bin/go get sigs.k8s.io/kind
Ստեղծեք բարի կլաստեր
Այս դեպքում մենք պատրաստվում ենք ստեղծել կլաստեր տեղական ռեգիստրով, որպեսզի կարողանանք աշխատել localhost-ում: KinD-ը տրամադրում է կեղևի սկրիպտ՝ Kubernetes կլաստեր ստեղծելու համար՝ [12], [13], [14] տեղական Docker ռեգիստրի հետ միասին։
- Ստեղծեք ֆայլը՝ «kind-with-registry.sh»
nano kind-with-registry.sh
2. Ավելացնել հետևյալ բովանդակությունը
#!/bin/sh set -o errexit # create registry container unless it already exists reg_name='kind-registry' reg_port='5000' running="$(docker inspect -f '{{.State.Running}}' "${reg_name}" 2>/dev/null || true)" if [ "${running}" != 'true' ]; then docker run \ -d --restart=always -p "${reg_port}:5000" --name "${reg_name}" \ registry:2 fi # create a cluster with the local registry enabled in containerd cat <<EOF | kind create cluster --config=- kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 containerdConfigPatches: - |-[plugins."io.containerd.grpc.v1.cri".registry.mirrors."localhost:${reg_port}"] endpoint = ["http://${reg_name}:${reg_port}"] EOF # connect the registry to the cluster network docker network connect "kind" "${reg_name}" # tell https://tilt.dev to use the registry # https://docs.tilt.dev/choosing_clusters.html#discovering-the-registry for node in $(kind get nodes); do kubectl annotate node "${node}" "kind.x-k8s.io/registry=localhost:${reg_port}"; done
3. Դարձրեք սցենարը գործարկելի.
sudo chmod +x kind-with-registry.sh
4. Այժմ դուք կարող եք գործարկել սկրիպտը՝ տեղական Docker ռեգիստրով ստեղծելու ձեր տեղական Kubernetes կլաստերը:
./kind-with-registry.sh
Կլաստերի ստեղծումը հետևյալ տեսքն ունի (այս գործողությունը կարող է տևել մոտ 10 րոպե)
5. Համոզվեք, որ kubectl համատեքստը դրված է նորաստեղծ կլաստերի վրա.
kubectl config current-context
Եթե դուք ստանում եք այլ արդյունք, կատարեք.
kubectl config use kind-kind
6. Համոզվեք, որ կլաստերը աշխատում է
kubectl cluster-info
7. Խնդիրների վերացում. Եթե գործարկեք «kind version» և ստացեք «Command ‘kind’ not found»
Դուք պետք է այն ավելացնեք ուղու վրա՝ օգտագործելով հրամանը.
export PATH=$PATH:$(/usr/local/go/bin/go env GOPATH)/bin
Կամ այն մշտական դարձնելու համար ավելացրեք նախորդ հրամանը .bashrc-ին (օրինակ՝ sudo nano ~/.bashrc
)
Տեղադրեք OpenFaas-ը Arkade-ի միջոցով
Arkade-ն ապահովում է պարզ CLI՝ խիստ տպագրված դրոշներով՝ Helm գծապատկերները և Kubernetes հավելվածները ձեր կլաստերում տեղադրելու համար մեկ հրամանով [15]: Դուք կարող եք տեղադրել Kubectl-ը և KinD-ը՝ օգտագործելով Arkade-ը:
- Ստացեք Arkade-ը
curl -sLS https://dl.get-arkade.dev | sudo sh
2. Տեղադրեք OpenFaaS-ը
arkade install openfaas
3. Վավերացնել տեղադրումը
arkade info openfaas kubectl get pods -n openfaas
4. Ստացեք faas-cli
curl -SLsf https://cli.openfaas.com | sudo sh
Ձեր առաջին OpenFaaS ֆունկցիայի տեղակայում
- Ստեղծեք նոր գրացուցակ և տեղափոխեք այն
mkdir -p ~/workspace/OpenFaaS cd ~/workspace/OpenFaaS
Ներբեռնեք OpenFaaS ձևանմուշները
faas-cli template store pull python3
2. Այժմ եկեք ստեղծենք նոր Python ֆունկցիա՝ օգտագործելով CLI.
faas-cli new --lang python3 hello-python
Սա ձեզ համար ստեղծում է չորս ֆայլ.
hello-python/handler.py hello-python/__init__.py hello-python/requirements.txt hello-python.yml
3. Եկեք խմբագրենք մշակիչը՝ հաղորդագրություն տպելու համար.
4. Այժմ փոխեք պատկերի տարբերակը yml ֆայլում, որպեսզի տեղակայումը լինի localhost-ում
5. Մենք պետք է փոխանցենք OpenFaas gateway ծառայությունը դեպի localhost նավահանգիստ
kubectl port-forward -n openfaas svc/gateway 8080:8080 &
Նկատի ունեցեք, որ նշանի նշանը (&) գործարկում է գործընթացը հետին պլանում: Դուք կարող եք օգտագործել jobs հրամանը՝ ցույց տալու ձեր ֆոնային գործընթացների կարգավիճակը[16]:
6. Ֆունկցիան գործարկելու համար կան քայլեր՝ կառուցել, մղել և տեղակայել: Եկեք կատարենք առաջին երկուսը.
- Կառուցել
faas-cli build -f hello-python.yml
- Հրել տեղական ռեգիստր
faas-cli push -f hello-python.yml
7. Այժմ առանց սերվերի ֆունկցիան տեղափոխվում է տեղական ռեգիստր: Դուք կարող եք մուտք գործել OpenFaaS դարպասի ձեր տեղական օրինակ՝ մուտքագրելով հետևյալ հրամանները.
PASSWORD=$(kubectl get secret -n openfaas basic-auth -o jsonpath="{.data.basic-auth-password}" | base64 --decode; echo) env | grep PASSWORD echo -n $PASSWORD | faas-cli login --username admin --password-stdin
8. Բացեք ձեր Mozilla Firefox բրաուզերը և անցեք 127.0.0.1:8080
Գաղտնաբառը տեսնելու համար օգտագործեք հետևյալ հրամանը տերմինալում.
echo $PASSWORD
Բացեք Mozilla Explorer-ը և անցեք http://127.0.0.1:8080: Պատճենեք ձեր գաղտնաբառը և տեղադրեք այն Mozilla-ում
9. Այժմ հնարավոր է տեղակայել ֆունկցիան.
faas-cli deploy -f hello-python.yml -g http://127.0.0.1:8080
Ֆունկցիան այժմ պետք է տեղակայվի OpenFaaS ինտերֆեյսում: Կարգավիճակը պետք է լինի «Պատրաստ»: Սա ցուցադրելու համար կարող է տևել մեկ րոպե:
10. Ֆունկցիան կանչելու համար կարող եք օգտագործել UI-ը
Կամ կարող եք կանչել տերմինալի միջոցով
echo "My name is Sandra" | faas-cli invoke hello-python
Կարող եք նաև օգտագործել գանգուրներ.
curl -X POST http://127.0.0.1:8080/function/hello-python -d "My name is Sandra"
11. Դուք պետք է կարողանաք տեսնել ֆունկցիան՝ օգտագործելով kubectl հրամանը
kubectl get pods -n openfaas-fn
12. Խնդիրների լուծում.Եթե կա որևէ սխալ, կարող եք կարդալ տեղեկամատյանները հրամանով.
kubectl logs -n openfaas-fn deploy/hello-python
13. Հաջորդ անգամ, երբ մուտք գործեք, նորից գործարկեք 6-րդ, 8-րդ և 9-րդ քայլերը կամ հետևյալ հրամանը և հետևեք հրահանգներին՝ դարպասը փոխանցելու և ձեր դարպաս մուտք գործելու համար:
arkade info openfaas
14. Խնդիրների վերացում. VirtualBox-ը վերագործարկելուց հետո գործառույթները հասանելի չեն: Դուք կարող եք նորից տեսնել ձեր գործառույթները՝ գործարկելով ստորև նշված հրամանները և նորից մուտք գործելով:
arkade info openfaas # Optional kubectl rollout status -n openfaas deploy/gateway kubectl port-forward -n openfaas svc/gateway 8080:8080 & PASSWORD=$(kubectl get secret -n openfaas basic-auth -o jsonpath="{.data.basic-auth-password}" | base64 --decode; echo) echo -n $PASSWORD | faas-cli login --username admin --password-stdin echo $PASSWORD
Շնորհավորում ենք, դուք ունեք ձեր առաջին գործառույթը և գործում է OpenFaaS-ում:
Հղումներ
[1] https://medium.com/@pavithra_38952/openfaas-on-docker-440541d635a2
[2] https://www.cncf.io/blog/2020/04/13/serverless-open-source-frameworks-openfaas-knative-more/
[3] https://medium.com/@pavithra_38952/openfaas-on-docker-440541d635a2
[4] https://docs.docker.com/engine/install/ubuntu/
[5] https://kubernetes.io/docs/tasks/tools/
[7] https://github.com/alexellis/arkade
[8] https://docs.openfaas.com/
[9] https://docs.docker.com/engine/install/ubuntu/
[10] https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/
[11] https://help.ubuntu.com/community/FilePermissions#chmod_with_sudo
[12] https://medium.com/@yankee.exe/deploy-your-serverless-python-function-locally-with-openfaas-in-kubernetes-c3b564e6fd18
[13] https://kind.sigs.k8s.io/docs/user/local-registry/
[14] https://docs.openfaas.com/tutorials/local-kind-registry/
[15] https://itnext.io/kubernetes-apps-the-easy-way-f06d9e5cad3c
[16] https://medium.com/appfleet/create-serverless-functions-with-openfaas-1b2ba1dff8cf