اس آرٹیکل میں، میں گیم "Epics" کو تیار کرنے کے لیے ایک کام کرنے کا ماحول قائم کروں گا، اور OpenFaaS میں استعمال کے لیے موزوں حصوں میں خود گیم کو بھی توڑ دوں گا۔ میں لینکس پر تمام ہیرا پھیری کروں گا، میں VirtualBox کا استعمال کرتے ہوئے منی کیوب میں Kubernetes تعینات کروں گا۔ میری ورک مشین میں 2 پروسیسر کور اور 12 جی بی ریم ہے؛ میں سسٹم ڈسک کے بطور ایس ایس ڈی استعمال کرتا ہوں۔ میں debian 8 کو اپنے مین ڈیولپمنٹ سسٹم کے طور پر استعمال کروں گا، جس میں emacs، sudo، git اور virtualbox پیکیجز انسٹال ہوں گے، باقی سب کچھ GitHub اور دیگر ذرائع سے ڈاؤن لوڈ کرکے انسٹال کیا جائے گا۔ ہم ان ایپلی کیشنز کو /usr/local/bin میں انسٹال کریں گے جب تک کہ دوسری صورت میں وضاحت نہ کی جائے۔ آو شروع کریں!
ڈویلپرز کام کرنے کے لیے 2 نام کی جگہیں بنانے کی تجویز کرتے ہیں:
$ kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml
namespace/openfaas created
namespace/openfaas-fn created
ہیلم کے لیے ایک ذخیرہ شامل کریں:
$ helm repo add openfaas https://openfaas.github.io/faas-netes/
"openfaas" has been added to your repositories
چارٹ میں انسٹالیشن سے پہلے پاس ورڈ سیٹ کرنے کی صلاحیت ہے، آئیے اسے استعمال کریں اور رسائی ڈیٹا کو k8s سیکرٹ کے طور پر محفوظ کریں:
$ 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"
$ 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
Mongodb انسٹال کرنا
ہم ہیلم کا استعمال کرتے ہوئے ہر چیز کو انسٹال کرتے ہیں:
$ 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
جانچ پڑتال:
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
کنٹینر سے باہر نکلنے کے لیے ctrl+D دبائیں۔
ایماکس ترتیب دینا
اصول میں، سب کچھ پہلے سے ہی کے مطابق ترتیب دیا گیا تھا یہ مضمونلہذا میں تفصیل میں نہیں جاؤں گا۔
کھیل کو افعال میں توڑنا
فنکشنز کے ساتھ تعامل HTTP پروٹوکول کے ذریعے کیا جاتا ہے، JWT کے ذریعے مختلف فنکشنز کے درمیان اینڈ ٹو اینڈ تصدیق فراہم کی جاتی ہے۔ Mongodb کا استعمال ٹوکنز کے ساتھ ساتھ گیم اسٹیٹ، پلیئر ڈیٹا، تمام گیمز کی چالوں کی ترتیب اور دیگر معلومات کو ذخیرہ کرنے کے لیے کیا جاتا ہے۔ آئیے سب سے زیادہ دلچسپ خصوصیات پر گہری نظر ڈالیں۔
رجسٹریشن
اس فنکشن کا ان پٹ گیم عرفی نام اور پاس ورڈ کے ساتھ JSON ہے۔ جب اس فنکشن کو کال کیا جاتا ہے، تو یہ چیک کیا جاتا ہے کہ یہ عرف ڈیٹا بیس میں نہیں ہے؛ اگر چیک کامیاب ہو جاتا ہے، تو عرف اور پاس ورڈ ہیش ڈیٹا بیس میں داخل کر دیا جاتا ہے۔ گیم میں فعال طور پر حصہ لینے کے لیے رجسٹریشن ضروری ہے۔
ان پٹ
فنکشن ان پٹ ایک گیم عرفی نام اور پاس ورڈ کے ساتھ JSON ہے؛ اگر ڈیٹا بیس میں کوئی عرفی نام موجود ہے اور ڈیٹا بیس میں پہلے محفوظ کردہ پاس ورڈ کی کامیابی کے ساتھ تصدیق ہو جاتی ہے، تو JWT واپس کر دیا جاتا ہے، جسے دوسرے فنکشنز کو پاس کرنا ضروری ہے جب وہ بلایا ڈیٹا بیس میں مختلف سروس ریکارڈز بھی داخل کیے جاتے ہیں، مثال کے طور پر، آخری لاگ ان کا وقت، وغیرہ۔
گیمز کی فہرست دیکھیں
کوئی بھی غیر مجاز صارف فعال گیمز کے علاوہ تمام گیمز کی فہرست کی درخواست کر سکتا ہے۔ ایک بااختیار صارف فعال گیمز کی فہرست بھی دیکھتا ہے۔ فنکشن کا نتیجہ JSON ہے جس میں گیمز کی فہرستیں (گیم ID، انسانی پڑھنے کے قابل نام، وغیرہ) شامل ہیں۔
کھیل کی تخلیق
فنکشن صرف مجاز صارفین کے ساتھ کام کرتا ہے؛ کھلاڑیوں کی زیادہ سے زیادہ تعداد ان پٹ پر قبول کی جاتی ہے، ساتھ ہی گیم کے پیرامیٹرز (مثال کے طور پر، اس گیم میں کن کرداروں کو چالو کرنا ہے، کھلاڑیوں کی زیادہ سے زیادہ تعداد وغیرہ)۔ گیم کا ایک الگ پیرامیٹر شامل ہونے کے لیے پاس ورڈ کی موجودگی ہے، جو آپ کو غیر عوامی گیمز بنانے کی اجازت دیتا ہے۔ پہلے سے طے شدہ طور پر، ایک عوامی کھیل بنتا ہے۔ فنکشن کا نتیجہ JSON ہے، جس میں تخلیق کی کامیابی کا میدان، ایک منفرد گیم شناخت کنندہ، اور دیگر پیرامیٹرز شامل ہیں۔
کھیل میں شامل ہونا
فنکشن صرف مجاز صارفین کے ساتھ کام کرتا ہے، ان پٹ گیم آئی ڈی اور اس کا پاس ورڈ ہے، اگر یہ غیر عوامی گیم ہے، تو آؤٹ پٹ گیم پیرامیٹرز کے ساتھ JSON ہے۔ گیم میں شامل ہونے والے مجاز صارف کے ساتھ ساتھ گیم کے تخلیق کار کو اس کے بعد گیم کے شرکاء کہا جاتا ہے۔
کھیل کے واقعات دیکھنا
کوئی بھی غیر مجاز صارف غیر فعال گیمز کے لیے ایونٹس کی فہرست کی درخواست کر سکتا ہے، اور ایک مجاز صارف کسی بھی فعال گیم کے لیے ایونٹس کی فہرست حاصل کر سکتا ہے۔ فنکشن کا ایک اضافی پیرامیٹر ایونٹ نمبر ہوسکتا ہے جو صارف کے پاس پہلے سے موجود ہے۔ اس صورت میں، فہرست میں صرف وہی واقعات لوٹائے جائیں گے جو بعد میں پیش آئے۔ وقتاً فوقتاً اس فنکشن کو شروع کرنے سے، ایک مجاز صارف دیکھتا ہے کہ گیم میں کیا ہو رہا ہے۔ یہ فنکشن ایک کارروائی کی درخواست بھی واپس کرتا ہے، جسے صارف گیم کے ایونٹ ڈسپیچ فنکشن کا استعمال کرتے ہوئے جواب دے سکتا ہے۔
گیم ایونٹ بھیج رہا ہے۔
فنکشن صرف گیم کے شرکاء کے لیے کام کرتا ہے: گیم شروع کرنا، حرکت کرنا، ووٹ دینا، ایک ٹیکسٹ میسج لکھنا جو گیم ایونٹس کی فہرست میں ظاہر ہوتا ہے، وغیرہ۔
گیم بنانے والا مجاز صارف گیم میں اپنے سمیت تمام شرکاء کو رولز تقسیم کرنا شروع کر دیتا ہے، انہیں اسی فنکشن کا استعمال کرتے ہوئے اپنے کردار کی تصدیق کرنی ہوگی۔ ایک بار جب تمام کرداروں کی تصدیق ہو جاتی ہے، گیم خود بخود نائٹ موڈ میں بدل جاتا ہے۔
کھیل کے اعدادوشمار
فنکشن صرف گیم کے شرکاء کے لیے کام کرتا ہے؛ یہ گیم کی حالت، کھلاڑیوں کی فہرست اور تعداد (عرفی نام)، کردار اور ان کی حیثیت (منتقل یا نہیں) کے ساتھ ساتھ دیگر معلومات بھی دکھاتا ہے۔ پچھلے فنکشن کی طرح، سب کچھ صرف گیم کے شرکاء کے لیے کام کرتا ہے۔
وقتاً فوقتاً شروع کیے گئے افعال
اگر گیم بناتے وقت مخصوص وقت کے لیے گیم لانچ نہیں کی گئی ہے، تو کلیئر فنکشن کا استعمال کرتے ہوئے اسے فعال گیمز کی فہرست سے خود بخود ہٹا دیا جائے گا۔
ایک اور متواتر کام گیم موڈ کو رات سے دن اور پیچھے کی طرف تبدیل کرنا ہے جن کے لیے موڑ کے دوران ایسا نہیں ہوا تھا (مثال کے طور پر، ایک کھلاڑی جسے گیم ایونٹ پر ردعمل ظاہر کرنے کی ضرورت ہوتی ہے، اس نے کسی وجہ سے اپنا حل نہیں بھیجا۔ )۔