"Epics Hou". ʻAi mākou i ka ʻelepani ma nā ʻāpana

"Epics Hou". ʻAi mākou i ka ʻelepani ma nā ʻāpana

Ma kēia ʻatikala, e hoʻonohonoho wau i kahi hana hana no ka hoʻomohala ʻana i ka pāʻani "Epics", a e uhaʻi hoʻi i ka pāʻani ponoʻī i mau ʻāpana kūpono no ka hoʻohana ʻana ma OpenFaaS. E hana wau i nā manipulations āpau ma Linux, e kau wau i nā Kubernetes ma minikube me ka hoʻohana ʻana iā VirtualBox. Loaʻa i kaʻu mīkini hana 2 cores processor a me 12GB o RAM; hoʻohana wau i kahi SSD ma ke ʻano o ka ʻōnaehana disk. E hoʻohana wau i ka debian 8 e like me kaʻu ʻōnaehana hoʻomohala nui, me nā emacs, sudo, git a me nā pahu virtualbox i hoʻokomo ʻia, e hoʻokomo ʻia nā mea āpau ma ka hoʻoiho ʻana mai GitHub a me nā kumu ʻē aʻe. E hoʻokomo mākou i kēia mau noi ma /usr/local/bin ke ʻole i kuhikuhi ʻia. E hoʻomaka kākou!

Hoʻomākaukau i ke kaiapuni hana

Ke hoʻokomo nei iā Go

Hana mākou i nā ʻōlelo aʻoaʻo mai ka pūnaewele official:

$ 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

Ke nānā nei i ka hana:

$ 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

Ke kau nei i ka faas-cli

Hana mākou i nā ʻōlelo aʻoaʻo mai ka pūnaewele official:

$ 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

Eia hou, hiki iā ʻoe ke hoʻopau i ka bash:

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

Ke hoʻouka a me ka hoʻonohonoho ʻana i nā Kubernetes

No ka hoʻomohala ʻana, lawa ka minikube, no laila e hoʻokomo a kubelet i /usr/local/bin, a hoʻokomo i ka helm e hoʻokomo i nā noi:

$ 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

E hoʻokuʻu i ka 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"

E nānā mākou:

$ 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

Ke hoʻokomo nei iā OpenFaaS

Manaʻo nā mea hoʻomohala e hana i 2 inoa inoa e hana pū me:

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

Hoʻohui i kahi waihona no ka hoʻokele:

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

Hiki i ka pakuhi ke hoʻonohonoho i ka ʻōlelo huna ma mua o ka hoʻokomo ʻana, e hoʻohana a mālama i ka ʻikepili komo ma ke ʻano he huna 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

E hoʻolaha kākou:

$ 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"

Ma hope o kekahi manawa, holo mākou i ke kauoha i manaʻo ʻia:

$ 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

Ke nānā nei i ka hana:

$ 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

Ke hoʻokomo nei iā Mongodb

Hoʻokomo mākou i nā mea āpau me ka hoʻohana ʻana i ka helm:

$ 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

E nānā mākou:

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

E kaomi iā ctrl+D e haʻalele i ka pahu.

Hoʻonohonoho i nā emacs

Ma ke kumu, ua hoʻonohonoho mua ʻia nā mea āpau e like me kēiaʻatikala, no laila ʻaʻole wau e hele i nā kikoʻī.

Hoʻokaʻawale i ka pāʻani i nā hana

Hoʻopili ʻia ka pilina me nā hana ma o ka protocol http, hāʻawi ʻia ka hōʻoia hope-a-hope ma waena o nā hana like ʻole e JWT. Hoʻohana ʻia ʻo Mongodb e mālama i nā hōʻailona, ​​​​me ka mokuʻāina pāʻani, ka ʻikepili o ka mea pāʻani, nā kaʻina o nā neʻe o nā pāʻani āpau a me nā ʻike ʻē aʻe. E nānā pono kākou i nā hiʻohiʻona hoihoi loa.

kakau

ʻO ka hoʻokomo o kēia hana ʻo JSON me ka inoa inoa pāʻani a me ka ʻōlelo huna. Ke kāhea ʻia kēia hana, ʻike ʻia ʻaʻole kēia inoa i loko o ka waihona; inā kūleʻa ka loiloi, hoʻokomo ʻia ka inoa inoa a me ka password hash i loko o ka waihona. Pono ke kākau inoa e komo ikaika i ka pāʻani.

e komo ai

ʻO ka hoʻokomo hana ʻo JSON me kahi inoa inoa pāʻani a me ka ʻōlelo huna; inā loaʻa kahi inoa inoa i loko o ka waihona a ua hōʻoia maikaʻi ʻia ka ʻōlelo huna me ka mea i mālama mua ʻia i loko o ka waihona, ua hoʻihoʻi ʻia kahi JWT, pono e hāʻawi ʻia i nā hana ʻē aʻe ke loaʻa. kāhea ʻia. Hoʻokomo pū ʻia nā moʻolelo lawelawe like ʻole i ka waihona, no ka laʻana, ka manawa komo hope, etc.

Nānā i ka papa inoa o nā pāʻani

Hiki i nā mea hoʻohana ʻae ʻole ke noi i ka papa inoa o nā pāʻani āpau koe wale nā ​​​​pāʻani. ʻIke pū kekahi mea hoʻohana i ka papa inoa o nā pāʻani ikaika. ʻO ka hopena o ka hana ʻo JSON nā papa inoa o nā pāʻani (game ID, inoa hiki ke heluhelu ʻia e ke kanaka, etc.).

Hoʻokumu pāʻani

Hoʻohana wale ka hana me nā mea hoʻohana i ʻae ʻia; ʻae ʻia ka helu kiʻekiʻe o nā mea pāʻani ma ka hoʻokomo, a me nā ʻāpana pāʻani (no ka laʻana, nā mea e hoʻāla ai i kēia pāʻani, ka nui o nā mea pāʻani, etc.). ʻO kahi ʻokoʻa ʻokoʻa o ka pāʻani ke ʻano o kahi ʻōlelo huna no ka hui ʻana, e hiki ai iā ʻoe ke hana i nā pāʻani non-public. Ma ka maʻamau, hana ʻia kahi pāʻani lehulehu. ʻO ka hopena o ka hana ʻo JSON, aia kahi kahua kūleʻa hana, kahi ʻike pāʻani kūʻokoʻa, a me nā ʻāpana ʻē aʻe.

Ke komo ʻana i ka pāʻani

Hoʻohana wale ka hana me nā mea hoʻohana i ʻae ʻia, ʻo ka mea hoʻokomo ka ID pāʻani a me kāna ʻōlelo huna, inā he pāʻani ʻole kēia, ʻo JSON ka hopena me nā ʻāpana pāʻani. ʻO ka mea hoʻohana i ʻae ʻia i komo i ka pāʻani, a me ka mea nāna i hana i ka pāʻani, ua kapa ʻia ʻo ia nā mea komo pāʻani.

Ke nānā nei i nā hanana pāʻani

Hiki i kēlā me kēia mea hoʻohana ʻole ke noi i ka papa inoa o nā hanana no nā pāʻani hana ʻole, a hiki i ka mea hoʻohana ʻae ke loaʻa i kahi papa inoa o nā hanana no kēlā me kēia pāʻani ikaika. Hiki ke helu ʻia ka helu hanana i loaʻa i ka mea hoʻohana. I kēia hihia, ʻo kēlā mau hanana i hana ʻia ma hope e hoʻihoʻi ʻia i ka papa inoa. Ma ka hoʻomaka ʻana i kēia hana i kēlā me kēia manawa, nānā ka mea hoʻohana ʻae i ka mea e hana nei i ka pāʻani. Hoʻihoʻi hou kēia hana i kahi noi hana, hiki i ka mea hoʻohana ke pane i ka hoʻohana ʻana i ka hana hoʻouna hanana hanana o ka pāʻani.

Hoʻouna i kahi hanana pāʻani

Hana wale ka hana no nā mea pāʻani: hiki ke hoʻomaka i ka pāʻani, hana i kahi neʻe, koho, kākau i kahi leka i hōʻike ʻia ma ka papa inoa o nā hanana pāʻani, etc.
Hoʻomaka ka mea hoʻohana ʻae nāna i hana i ka pāʻani e hāʻawi i nā kuleana i nā poʻe āpau i ka pāʻani, me lākou iho, pono lākou e hōʻoia i kā lākou kuleana me ka hoʻohana ʻana i ka hana like. Ke hoʻopaʻa ʻia nā kuleana a pau, hoʻololi koke ka pāʻani i ke ʻano pō.

Helu helu pāʻani

Hoʻohana wale ka hana no nā mea pāʻani; hōʻike ia i ke kūlana o ka pāʻani, ka papa inoa a me ka helu o nā mea pāʻani (inoa inoa), nā kuleana a me ko lākou kūlana (neʻe a i ʻole ʻole), a me nā ʻike ʻē aʻe. E like me ka hana mua, hana wale nā ​​​​mea āpau no nā mea pāʻani.

Hoʻolaha ʻia nā hana i kēlā me kēia manawa

Inā ʻaʻole i hoʻokuʻu ʻia ka pāʻani no kekahi manawa i ʻōlelo ʻia i ka wā e hana ai i ka pāʻani, e hoʻoneʻe ʻia ia mai ka papa inoa o nā pāʻani ikaika me ka hoʻohana ʻana i ka hana maʻemaʻe.

ʻO kekahi hana maʻamau ka hoʻololi ʻana i ke ʻano pāʻani mai ka pō a i ke ao a hoʻi i nā pāʻani i hana ʻole ʻia i ka wā o ka manawa (no ka laʻana, ʻo kahi mea pāʻani pono e pane i kahi hanana pāʻani ʻaʻole i hoʻouna i kāna hopena no kekahi kumu. ).

Hoʻolaha

  • Hōʻike
  • Hoʻonohonoho i ke kaiapuni hoʻomohala, wāwahi i ka hana i nā hana
  • Hana hope
  • Ka hana mua
  • Hoʻonohonoho i ka CICD, hoʻonohonoho hoʻāʻo
  • E hoʻomaka i kahi kau pāʻani hoʻokolokolo
  • Nā hopena

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka