"Epics Ùra". Bidh sinn ag ithe an ailbhean ann am pàirtean

"Epics Ùra". Bidh sinn ag ithe an ailbhean ann am pàirtean

San artaigil seo, stèidhichidh mi àrainneachd obrach airson a bhith a 'leasachadh a' gheama "Epics", agus bidh mi cuideachd a 'briseadh a' gheama fhèin gu pàirtean a tha freagarrach airson a chleachdadh ann an OpenFaaS. Nì mi a h-uile làimhseachadh air Linux, cleachdaidh mi Kubernetes ann am minikube a’ cleachdadh VirtualBox. Tha 2 cores pròiseasar agus 12GB de RAM aig an inneal obrach agam; bidh mi a’ cleachdadh SSD mar diosc an t-siostaim. Cleachdaidh mi debian 8 mar am prìomh shiostam leasachaidh agam, le pasganan emacs, sudo, git agus virtualbox air an stàladh, thèid a h-uile càil eile a chuir a-steach le bhith a’ luchdachadh sìos bho GitHub agus stòran eile. Cuiridh sinn na h-aplacaidean seo an sàs ann an /usr/local/bin mura h-eilear ag ràdh a chaochladh. Feuch an tòisich sinn!

Ag ullachadh na h-àrainneachd obrach

Stàladh Go

Leanaidh sinn an stiùireadh bhon làrach-lìn oifigeil:

$ curl -L0 https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz -o go.tar.gz
$ sudo tar -C /usr/local -xzf go.tar.gz
$ echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.profile

A’ sgrùdadh comas-gnìomh:

$ mkdir -p ~/go/src/hello && cd ~/go/src/hello
$ echo 'package main

import "fmt"

func main() {
fmt.Printf("hello, worldn")
}' > hello.go
$ go build
$ ./hello
hello, world

A' stàladh faas-cli

Leanaidh sinn an stiùireadh bhon làrach-lìn oifigeil:

$ curl -sSL https://cli.openfaas.com | sudo -E sh
x86_64
Downloading package https://github.com/openfaas/faas-cli/releases/download/0.11.3/faas-cli as /tmp/faas-cli
Download complete.

Running with sufficient permissions to attempt to move faas-cli to /usr/local/bin
New version of faas-cli installed to /usr/local/bin
Creating alias 'faas' for 'faas-cli'.
  ___                   _____           ____
 / _  _ __   ___ _ __ |  ___|_ _  __ _/ ___|
| | | | '_  / _  '_ | |_ / _` |/ _` ___ 
| |_| | |_) |  __/ | | |  _| (_| | (_| |___) |
 ___/| .__/ ___|_| |_|_|  __,_|__,_|____/
      |_|

CLI:
 commit:  73004c23e5a4d3fdb7352f953247473477477a64
 version: 0.11.3

A bharrachd air an sin, faodaidh tu crìochnachadh bash a chomasachadh:

faas-cli completion --shell bash | sudo tee /etc/bash_completion.d/faas-cli

A 'stàladh agus a' rèiteachadh Kubernetes

Airson leasachadh, tha minikube gu leòr, mar sin cuir a-steach e agus kubelet ann an / usr/local/bin, agus stàlaich stiùir gus tagraidhean a stàladh:

$ curl https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 -o minikube && chmod +x minikube && sudo mv minikube /usr/local/bin/
$ curl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl -o kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/
$ curl https://get.helm.sh/helm-v3.0.2-linux-amd64.tar.gz | tar -xzvf - linux-amd64/helm --strip-components=1; sudo mv helm /usr/local/bin

Cuir air bhog minikube:

$ minikube start
  minikube v1.6.2 on Debian 8.11
  Automatically selected the 'virtualbox' driver (alternates: [])
  Downloading VM boot image ...
    > minikube-v1.6.0.iso.sha256: 65 B / 65 B [--------------] 100.00% ? p/s 0s
    > minikube-v1.6.0.iso: 150.93 MiB / 150.93 MiB [-] 100.00% 5.67 MiB p/s 27s
  Creating virtualbox VM (CPUs=2, Memory=8192MB, Disk=20000MB) ...
  Preparing Kubernetes v1.17.0 on Docker '19.03.5' ...
  Downloading kubeadm v1.17.0
  Downloading kubelet v1.17.0
  Pulling images ...
  Launching Kubernetes ...  Waiting for cluster to come online ...
  Done! kubectl is now configured to use "minikube"

Bidh sinn a ’sgrùdadh:

$ kubectl get pods --all-namespaces
NAMESPACE     NAME                               READY   STATUS    RESTARTS   AGE
kube-system   coredns-6955765f44-knlcb           1/1     Running   0          29m
kube-system   coredns-6955765f44-t9cpn           1/1     Running   0          29m
kube-system   etcd-minikube                      1/1     Running   0          28m
kube-system   kube-addon-manager-minikube        1/1     Running   0          28m
kube-system   kube-apiserver-minikube            1/1     Running   0          28m
kube-system   kube-controller-manager-minikube   1/1     Running   0          28m
kube-system   kube-proxy-hv2wc                   1/1     Running   0          29m
kube-system   kube-scheduler-minikube            1/1     Running   0          28m
kube-system   storage-provisioner                1/1     Running   1          29m

A’ stàladh OpenFaaS

Tha an luchd-leasachaidh a’ moladh 2 àite-ainm a chruthachadh airson obrachadh le:

$ kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml
namespace/openfaas created
namespace/openfaas-fn created

Cuir a-steach stòr airson stiùir:

$ helm repo add openfaas https://openfaas.github.io/faas-netes/
"openfaas" has been added to your repositories

Tha comas aig a’ chairt facal-faire a shuidheachadh mus tèid a chuir a-steach, cleachd sinn e agus sàbhail an dàta ruigsinneachd mar dhìomhaireachd k8s:

$ PASSWORD=verysecurerandompasswordstring
$ kubectl -n openfaas create secret generic basic-auth --from-literal=basic-auth-user=admin --from-literal=basic-auth-password="$PASSWORD"
secret/basic-auth created

Leig leinn:

$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "openfaas" chart repository
Update Complete.  Happy Helming!
$ helm upgrade openfaas --install openfaas/openfaas --namespace openfaas --set functionNamespace=openfaas-fn --set generateBasicAuth=false
Release "openfaas" does not exist. Installing it now.
NAME: openfaas
LAST DEPLOYED: Fri Dec 25 10:28:22 2019
NAMESPACE: openfaas
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
To verify that openfaas has started, run:

  kubectl -n openfaas get deployments -l "release=openfaas, app=openfaas"

Às deidh beagan ùine, ruithidh sinn an àithne a thathar a ’moladh:

$ kubectl -n openfaas get deployments -l "release=openfaas, app=openfaas"
NAME                READY   UP-TO-DATE   AVAILABLE   AGE
alertmanager        1/1     1            1           114s
basic-auth-plugin   1/1     1            1           114s
faas-idler          1/1     1            1           114s
gateway             1/1     1            1           114s
nats                1/1     1            1           114s
prometheus          1/1     1            1           114s
queue-worker        1/1     1            1           114s

A’ sgrùdadh comas-gnìomh:

$ kubectl rollout status -n openfaas deploy/gateway
deployment "gateway" successfully rolled out
$ kubectl port-forward -n openfaas svc/gateway 8080:8080 &
[1] 6985
Forwarding from 127.0.0.1:8080 -> 8080
$ echo -n $PASSWORD | faas-cli login --username admin --password-stdin
Calling the OpenFaaS server to validate the credentials...
Handling connection for 8080
WARNING! Communication is not secure, please consider using HTTPS. Letsencrypt.org offers free SSL/TLS certificates.
credentials saved for admin http://127.0.0.1:8080
$ faas-cli list
Function                        Invocations     Replicas

Stàladh Mongodb

Bidh sinn a’ stàladh a h-uile càil le stiùir:

$ helm repo add stable https://kubernetes-charts.storage.googleapis.com/
"stable" has been added to your repositories
$ helm install stable/mongodb --generate-name
NAME: mongodb-1577466908
LAST DEPLOYED: Fri Dec 25 11:15:11 2019
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
** Please be patient while the chart is being deployed **

MongoDB can be accessed via port 27017 on the following DNS name from within your cluster:

    mongodb-1577466908.default.svc.cluster.local

To get the root password run:

    export MONGODB_ROOT_PASSWORD=$(kubectl get secret --namespace default mongodb-1577466908 -o jsonpath="{.data.mongodb-root-password}" | base64 --decode)

To connect to your database run the following command:

    kubectl run --namespace default mongodb-1577466908-client --rm --tty -i --restart='Never' --image bitnami/mongodb --command -- mongo admin --host mongodb-1577466908 --authenticationDatabase admin -u root -p $MONGODB_ROOT_PASSWORD

To connect to your database from outside the cluster execute the following commands:

    kubectl port-forward --namespace default svc/mongodb-1577466908 27017:27017 &
    mongo --host 127.0.0.1 --authenticationDatabase admin -p $MONGODB_ROOT_PASSWORD

Bidh sinn a ’sgrùdadh:

kubectl run --namespace default mongodb-1577466908-client --rm --tty -i --restart='Never' --image bitnami/mongodb --command -- mongo admin --host mongodb-1577466908 --authenticationDatabase admin -u root -p $(kubectl get secret --namespace default mongodb-1577466908 -o jsonpath="{.data.mongodb-root-password}" | base64 --decode)
If you don't see a command prompt, try pressing enter.

> db.version();
4.0.14

Brùth ctrl+D gus an soitheach fhàgail.

Emacs a stèidheachadh

Ann am prionnsapal, bha a h-uile dad air a rèiteachadh mar-thà a rèir an artaigil seo, mar sin cha tèid mi gu mion-fhiosrachadh.

A 'briseadh sìos a' gheama gu gnìomhan

Tha eadar-obrachadh le gnìomhan air a dhèanamh tron ​​​​phròtacal http, tha dearbhadh deireadh-gu-deireadh eadar diofar ghnìomhan air a thoirt seachad le JWT. Tha Mongodb air a chleachdadh airson comharran a stòradh, a bharrachd air staid geama, dàta cluicheadair, sreathan de ghluasadan de gach geama agus fiosrachadh eile. Bheir sinn sùil nas mionaidiche air na feartan as inntinniche.

chlàraidh

Is e cuir a-steach na gnìomh seo JSON leis am far-ainm geama agus facal-faire. Nuair a chanar ris a’ ghnìomh seo, thathas a’ dèanamh cinnteach nach eil an ailias seo san stòr-dàta; ma shoirbhicheas leis an t-seic, thèid an ailias agus hash facal-faire a chuir a-steach don stòr-dàta. Tha feum air clàradh gus pàirt gnìomhach a ghabhail sa gheama.

Clàrachadh

Is e JSON an cuir a-steach gnìomh le far-ainm geama agus facal-faire; ma tha far-ainm san stòr-dàta agus gu bheil am facal-faire air a dhearbhadh gu soirbheachail leis an fhear a chaidh a shàbhaladh roimhe san stòr-dàta, thèid JWT a thilleadh, a dh’ fheumar a chuir gu gnìomhan eile nuair a tha iad ghairm. Tha diofar chlàran seirbheis cuideachd air an cur a-steach don stòr-dàta, mar eisimpleir, an ùine logaidh a-steach mu dheireadh, msaa.

Faic liosta de na geamannan

Faodaidh neach-cleachdaidh gun chead iarraidh liosta de na geamannan air fad ach a-mhàin an fheadhainn gnìomhach. Bidh neach-cleachdaidh ùghdarraichte cuideachd a 'faicinn liosta de gheamannan gnìomhach. Is e toradh na gnìomh JSON anns a bheil liostaichean de gheamannan (ID geama, ainm a ghabhas leughadh le duine, msaa).

Geamannan a chruthachadh

Chan obraich an gnìomh ach le luchd-cleachdaidh ùghdarraichte; thathas a’ gabhail ris an àireamh as motha de chluicheadairean aig an cuir a-steach, a bharrachd air paramadairean geama (mar eisimpleir, dè na caractaran a thèid a chuir an gnìomh sa gheama seo, an àireamh as motha de chluicheadairean, msaa). Is e paramadair air leth den gheama làthaireachd facal-faire airson a dhol còmhla, a leigeas leat geamannan neo-phoblach a chruthachadh. Gu gnàthach, thèid geama poblach a chruthachadh. Is e toradh na gnìomh JSON, anns a bheil raon soirbheachas cruthachaidh, aithnichear geama sònraichte, agus paramadairean eile.

A 'dol còmhla ri gèam

Chan obraich an gnìomh ach le luchd-cleachdaidh ùghdarraichte, is e an cuir a-steach ID a’ gheama agus am facal-faire aige, mas e geama neo-phoblach a tha seo, is e JSON an toradh le paramadairean a’ gheama. Tha an neach-cleachdaidh ùghdarraichte a thàinig a-steach don gheama, a bharrachd air neach-cruthachaidh a’ gheama, air an ainmeachadh an-seo mar chom-pàirtichean geama.

A’ coimhead air tachartasan geama

Faodaidh neach-cleachdaidh sam bith gun chead liosta de thachartasan iarraidh airson geamannan neo-ghnìomhach, agus gheibh neach-cleachdaidh ùghdarraichte liosta de thachartasan airson geama gnìomhach sam bith. Faodaidh paramadair a bharrachd don ghnìomh an àireamh tachartais a tha aig an neach-cleachdaidh mu thràth. Anns a 'chùis seo, cha tèid ach na tachartasan sin a thachair nas fhaide air adhart a thilleadh air an liosta. Le bhith a’ cur air bhog a’ ghnìomh seo bho àm gu àm, bidh neach-cleachdaidh ùghdarraichte a’ coimhead na tha a’ tachairt sa gheama. Bidh an gnìomh seo cuideachd a’ tilleadh iarrtas gnìomh, as urrainn don neach-cleachdaidh freagairt le bhith a’ cleachdadh gnìomh cur air falbh tachartas a’ gheama.

A 'cur tachartas geam

Chan eil an gnìomh ag obair ach airson com-pàirtichean geama: tha e comasach an geama a thòiseachadh, gluasad a dhèanamh, bhòtadh, teachdaireachd teacsa a sgrìobhadh a tha air a thaisbeanadh anns an liosta de thachartasan geama, msaa.
Bidh an neach-cleachdaidh ùghdarraichte a chruthaich an geama a 'tòiseachadh a' sgaoileadh dhleastanasan gu gach com-pàirtiche sa gheama, iad fhèin nam measg, feumaidh iad an dreuchd a dhearbhadh a 'cleachdadh an aon ghnìomh. Aon uair ‘s gu bheil a h-uile dreuchd air a dhearbhadh, bidh an geama ag atharrachadh gu fèin-ghluasadach gu modh oidhche.

Geamannan statistics

Chan obraich an gnìomh ach airson com-pàirtichean geama; tha e a’ sealltainn staid a’ gheama, an liosta agus an àireamh de chluicheadairean (far-ainmean), dreuchdan agus an inbhe (gluasad dèanta no nach eil), a bharrachd air fiosrachadh eile. Coltach ris a ’ghnìomh roimhe, chan obraich a h-uile dad ach airson com-pàirtichean geama.

Gnìomhan air an cur air bhog bho àm gu àm

Mura h-eil an geama air a chuir air bhog airson ùine a chaidh a shònrachadh nuair a chruthaicheas tu a’ gheama, thèid a thoirt air falbh gu fèin-ghluasadach bhon liosta de gheamannan gnìomhach a ’cleachdadh a’ ghnìomh soilleir.

Is e gnìomh bho àm gu àm eile am modh geama atharrachadh bho oidhche gu latha agus air ais airson geamannan nach do thachair seo rè an tionndaidh (mar eisimpleir, cha do chuir cluicheadair a dh’ fheumas freagairt ri tachartas geama am fuasgladh aige airson adhbhar air choireigin. ).

Sanas

  • Ro-ràdh
  • A’ stèidheachadh na h-àrainneachd leasachaidh, a’ briseadh sìos a’ ghnìomh gu gnìomhan
  • Obair cùl-fhiosrachaidh
  • Obair aghaidh
  • A’ stèidheachadh CICD, a’ cur air dòigh deuchainnean
  • Tòisich seisean geama deuchainn
  • Builean

Source: www.habr.com

Cuir beachd ann