Անկախ նրանից, թե դուք տվյալների գիտնական եք, թե տվյալների ինժեներ, ձեր վերջնական նպատակը կլինի ձեր մեքենայական ուսուցման (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-ով: Տեղադրման ընդհանուր քայլերը, որոնք ներառում են այս փաստաթուղթը, հետևյալն են.

  1. Դոկեր [4]
  2. Kubectl[5]: Kubernetes հրամանի տող գործիք
  3. Kind[6]: գործիք՝ տեղական Kubernetes կլաստերների գործարկման համար՝ օգտագործելով Docker կոնտեյներային հանգույցները
  4. Arkade[7]: գործիք՝ հավելվածները հեշտությամբ տեղադրելու համար Kubernetes կլաստերի վերևում
  5. 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" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

2. Տեղադրեք Docker Engine-ը

sudo apt-get update
sudo apt-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]

  1. Ներբեռնեք վերջին թողարկումը հրամանով
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

Բարի տեղադրում

  1. Ներբեռնեք 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 ռեգիստրի հետ միասին։

  1. Ստեղծեք ֆայլը՝ «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-ը:

  1. Ստացեք 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 ֆունկցիայի տեղակայում

  1. Ստեղծեք նոր գրացուցակ և տեղափոխեք այն
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/

[6] https://kind.sigs.k8s.io/

[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