قم بإنشاء TODO API لـ Golang باستخدام Kubernetes

تحية للجميع! قبل إطلاق دورة منصة البنية التحتية المستندة إلى Kubernetes ، قمنا بإعداد ترجمة لمواد أخرى مثيرة للاهتمام.



هذه المقالة مخصصة للقادمين الجدد إلى Kubernetes ، الذين سيكونون مهتمين بفهم مثال عملي لكيفية كتابة واجهة برمجة تطبيقات Golang لإدارة قائمة TODO ، ثم كيفية نشرها في Kubernetes.

يحب كل مطور قائمة TODO جيدة ، أليس كذلك؟ وإلا كيف يمكننا تنظيم أنفسنا بطريقة أخرى؟


كل مطور يحب تطبيق TODO جيد ، أليس كذلك؟

سنبدأ بمراجعة قائمة المكونات الضرورية ، ثم ننتقل إلى تهيئة Kubernetes ، وتوفير قاعدة بيانات Postgresql ، ثم تثبيت إطار عمل التطبيق الذي سيساعدنا على نشر Go API بسهولة في Kubernetes ، دون التركيز على التفاصيل.

سننشئ نقطتي نهاية في واجهة برمجة التطبيقات - واحدة لإنشاء سجل TODO جديد ، والأخرى لتحديد جميع سجلات TODO.

جميع التعليمات البرمجية من هذا البرنامج التعليمي متاحة على GitHub.

قائمة المكونات الضرورية:


  • عامل ميناء مثبت محليًا

تقوم Kubernetes بتشغيل التعليمات البرمجية في صور الحاوية ، لذلك تحتاج إلى تثبيت Docker على جهاز الكمبيوتر الخاص بك.

تثبيت Docker: https://www.docker.com
تسجيل حساب Docker Hub لتخزين صور Docker: https://hub.docker.com/

  • مجموعة Kubernetes


يمكنك اختيار مجموعة محلية أو بعيدة ، ولكن أيهما أفضل؟ تعمل الخيارات المبسطة ، مثل k3d ، على أي جهاز كمبيوتر يمكن تشغيل Docker عليه ، لذلك لم يعد تشغيل نظام المجموعة المحلية يتطلب الكثير من ذاكرة الوصول العشوائي. يمكن أن تكون المجموعة البعيدة أيضًا حلاً فعالاً للغاية ، ولكن ضع في اعتبارك أن جميع صور Docker الخاصة بك ستحتاج إلى تحميلها وتحميلها لكل تغيير.

قم بتثبيت k3d: https://github.com/rancher/k3d

لن يقوم k3d بتثبيت kubectl (هذا هو CLI لـ Kubernetes) ، لذا قم بتثبيته بشكل منفصل من هنا: https://kubernetes.io/docs/tasks/tools / install-kubectl

  • جولانج


تحتاج أيضًا إلى تثبيت Golang مع IDE على جهاز الكمبيوتر الخاص بك. Go مجاني ويمكنك تنزيله لنظام MacOS أو Windows أو Linux من الرابط التالي: https://golang.org/dl

  • IDE


أوصي باستخدام Visual Studio Code ، فهو مجاني ويحتوي على مجموعة من المكونات الإضافية لـ Go التي يمكنك إضافتها. يفضل بعض الزملاء Goland من Jetbrains. إذا كنت مبرمجًا في Java ، فربما تفضل الدفع مقابل Goland ، لأنه سيذكرك بمنتجاتها الأخرى.

قم بتثبيت VSCode أو Golang .

إنشاء كتلة


تحتاج إلى تثبيت جميع البرامج المحددة في القسم السابق.

إنشاء كتلة جديدة باستخدام k3d:


k3d create

تكوين kubectl بحيث يشير إلى كتلة جديدة. تذكر أنه يمكن استخدام مجموعات متعددة من جهاز كمبيوتر واحد ، لذا من المهم للغاية الإشارة إلى المجموعة الصحيحة:

export KUBECONFIG="$(k3d get-kubeconfig --name='k3s-default')"


تأكد من أن الكتلة لديها عقدة واحدة على الأقل. هنا يمكنك أن ترى أن لدي Kubernetes 1.17 مثبتًا - إصدار جديد نسبيًا:

kubectl get node
NAME                     STATUS   ROLES    AGE   VERSION
k3d-k3s-default-server   Ready    master   48s   v1.17.0+k3s.1


سنقوم بتخزين سجلات TODO الخاصة بنا في جدول قاعدة البيانات ، لذا نحتاج الآن إلى تثبيتها. Postgresql هي قاعدة بيانات علائقية شائعة يمكننا تثبيتها في كتلة باستخدام مخطط Helm.

تثبيت ممر


arkade هو CLI Go ، مشابه لـ "brew" أو "apt-get" ، ولكن بالنسبة لتطبيقات Kubernetes. يستخدم مشروع Helm أو kubectl أو CLI لتثبيت مشروع أو منتج في مجموعتك.

curl -sLS https://dl.get-arkade.dev | sudo sh


الآن تثبيت Postgresql

arkade install postgresql
===================================================================== = PostgreSQL has been installed.                                    =
=====================================================================


سترى أيضًا معلومات حول سلسلة الاتصال وكيفية بدء Postgresql CLI من خلال صورة Docker داخل الكتلة.

يمكنك الحصول على هذه المعلومات في أي وقت باستخدام arkade info postgresql.

سنقوم بتصميم تخطيط الجدول

CREATE TABLE todo (
 id              INT GENERATED ALWAYS AS IDENTITY,
 description     text NOT NULL,
 created_date    timestamp NOT NULL,
 completed_date  timestamp NOT NULL
);


اركض arkade info postgresqlللحصول على معلومات الاتصال مرة أخرى. يجب أن يبدو شيء مثل هذا:

export POSTGRES_PASSWORD=$(kubectl get secret --namespace default postgresql -o jsonpath="{.data.postgresql-password}" | base64 --decode)
kubectl run postgresql-client --rm --tty -i --restart='Never' --namespace default --image docker.io/bitnami/postgresql:11.6.0-debian-9-r0 --env="PGPASSWORD=$POSTGRES_PASSWORD" --command -- psql --host postgresql -U postgres -d postgres -p 5432


الآن لديك في موجه الأوامر: ، postgres = #يمكنك إنشاء الجدول عن طريق نسخه في الداخل ، ثم تشغيل \dtلإظهار الجدول:

postgres=# \dt
List of relations
Schema | Name | Type  |  Owner
--------+------+-------+----------
public | todo | table | postgres
(1 row)


تثبيت إطار التطبيق


مثلما قام مطورو PHP بتسريع سير عملهم باستخدام LAMP (Linux Apache + Mysql + PHP) ومطوري Rails باستخدام مكدس معدة مسبقًا ، يمكن لمطوري Kubernetes استخدام أطر التطبيقات.
مكدس PLONK يرمز إلى Prometheus و Linux و OpenFaaS و NATS و Kubernetes.
  • يوفر Prometheus المقاييس ، والتحجيم التلقائي ، والملاحظة لاختبار صحة النظام الخاص بك ، ويسمح لها بالاستجابة للطفرات في الطلب وخفض التكاليف من خلال توفير المقاييس لاتخاذ قرارات حول التوسع إلى الصفر.
  • لينكس ، على الرغم من أنه ليس الخيار الوحيد لتشغيل أحمال العمل في Kubernetes ، إلا أنه قياسي وأسهل في الاستخدام.
  • في البداية ، قدمت OpenFaaS وظائف محمولة للمطورين ، ولكنها تعمل بشكل رائع عند نشر واجهات برمجة التطبيقات والخدمات الدقيقة. تعدد استخداماتها يعني أن أي حاويات Docker مع خادم HTTP يمكن نشرها وإدارتها.
  • NATS هو مشروع CNCF شائع يستخدم في المراسلة والنشر / الفرعية. في مكدس PLONK ، فإنه يوفر القدرة على تنفيذ الطلبات بشكل غير متزامن وقائمة انتظار.
  • Kubernetes هو سبب وجودنا هنا. إنه يوفر بنية تحتية قابلة للتطوير وذاتية التصعيد. وإذا لم تعد بحاجة إلى جزء من كل هذه العظمة ، فإن واجهة برمجة التطبيقات الخاصة به مبسطة باستخدام OpenFaaS.


قم بتثبيت حزمة PLONK عبر الممر:

arkade install openfaas


اقرأ الرسالة الإعلامية وقم بتشغيل كل أمر:

  • تثبيت faas-cli.
  • احصل على كلمة المرور الخاصة بك.
  • إعادة توجيه واجهة مستخدم بوابة OpenFaaS (عبر المنفذ 8080)
  • وتسجيل الدخول إلى النظام من خلال CLI.


كما كان من قبل ، يمكنك تلقي رسالة إعلامية باستخدام info openfaas.

انشر واجهة برمجة تطبيقات First Go


هناك عدة طرق لإنشاء Go API باستخدام PLONK. الخيار الأول هو استخدام ملف Dockerfile وتحديد منفذ TCP والتحقق من الصحة وخادم HTTP وما إلى ذلك يدويًا. يمكن القيام بذلك باستخدام faas-cli new --lang dockerfile API_NAME، ولكن هناك طريقة أبسط وأكثر آلية.

الطريقة الثانية هي استخدام القوالب المضمنة التي يوفرها متجر الوظائف:

faas-cli template store list | grep go
go                       openfaas           Classic Golang template
golang-http              openfaas-incubator Golang HTTP template
golang-middleware        openfaas-incubator Golang Middleware template


نظرًا لأننا نريد إنشاء واجهة برمجة تطبيقات تقليدية على غرار HTTP ، فإن نموذج golang-middleware سيكون أكثر ملاءمة.

في بداية البرنامج التعليمي ، قمت بالتسجيل في حساب Docker Hub لتخزين صور Docker الخاصة بك. يجب تضمين كل حمل عمل Kubernetes في صورة Docker قبل أن يتم نشره.

اسحب النمط الخاص:

faas-cli template store pull golang-middleware


استخدم سقالة لواجهة برمجة التطبيقات الخاصة بك مع golang-middleware واسم المستخدم الخاص بك في Docker Hub:

export PREFIX=alexellis2
export LANG=golang-middleware
export API_NAME=todo
faas-cli new --lang $LANG --prefix $PREFIX $API_NAME


سترى ملفين تم إنشاؤهما:

  • ./todo.yml - يوفر طريقة لتكوين ونشر وتثبيت القالب والاسم
  • ./todo/handler.go - هنا تكتب الرمز وتضيف أي ملفات أو حزم أخرى تطلبها


دعونا نقوم ببعض التحرير ثم نوسع الكود.

package function
import (
   "net/http"
   "encoding/json"
)
type Todo struct {
   Description string `json:"description"`
}
func Handle(w http.ResponseWriter, r *http.Request) {
   todos := []Todo{}
   todos = append(todos, Todo{Description: "Run faas-cli up"})
   res, _ := json.Marshal(todos)
   w.WriteHeader(http.StatusOK)
   w.Header().Set("Content-Type", "application/json")
   w.Write([]byte(res))
}


إذا كنت لا تستخدم VScode ومكوناته الإضافية لتحرير وتنسيق الرمز ، فقم بتشغيله بعد كل تغيير للتأكد من تنسيق الملف بشكل صحيح.

gofmt -w -s ./todo/handler.go


الآن قم بنشر الكود - قم أولاً بإنشاء صورة جديدة ، وقم بتشغيلها في Docker Hub ونشرها في المجموعة باستخدام OpenFaaS API:

Invoke your endpoint when ready:
curl http://127.0.0.1:8080/function/todo
{
"description": "Run faas-cli up"
}


السماح للمستخدمين بإنشاء سجلات TODO جديدة


دعنا الآن نسمح للمستخدمين بإنشاء إدخالات جديدة في قائمة TODO الخاصة بهم. تحتاج أولاً إلى إضافة الرابط أو "التبعية" للانتقال إلى مكتبة Postgresql.

يمكننا الحصول عليها باستخدام وحدات البيع أو وحدات Go التي تم تقديمها في Go 1.11 وتثبيتها افتراضيًا في Go 1.13.

قم بتحرير handler.goوإضافة الوحدة النمطية التي نحتاجها للوصول إلى Postgresql:

import (
   "database/sql"
   _ "github.com/lib/pq"
...


لكي تتمكن وحدات Go من الكشف عن التبعيات ، نحتاج إلى الإعلان عن شيء داخل الملف ، والذي سنستخدمه لاحقًا. إذا لم نفعل ذلك ، فسيحذف VSCode هذه السطور عند حفظها.

أضف هذا تحت عمليات الاستيراد في الملف

var db *sql.DB


قم دائمًا بتشغيل هذه الأوامر في todoالمجلد الذي يوجد فيه handler.go، وليس على مستوى الجذر c todo.yml.

قم بتهيئة وحدة Go الجديدة:

cd todo/
ls
handler.go
export GO111MODULE=on
go mod init


الآن قم بتحديث الملف باستخدام مكتبة pq:

go get
go mod tidy
cat go.mod
module github.com/alexellis/todo1/todo
go 1.13
require github.com/lib/pq v1.3.0


مهما كان الداخل go.mod، انسخ محتوياته إلىGO_REPLACE.txt

cat go.mod > GO_REPLACE.txt


الآن دعونا نتأكد من أن التجميع لا يزال يعمل قبل إضافة رمز الإدراج.

faas-cli build -f todo.yml --build-arg GO111MODULE=on


قد تلاحظ أننا الآن نمر --build-argللإبلاغ عن نمط لاستخدام وحدات Go.

أثناء التجميع ، سترى أنه يتم تنزيل الوحدات حسب الحاجة من الإنترنت.

Step 16/29 : RUN go test ./... -cover
---> Running in 9a4017438500
go: downloading github.com/lib/pq v1.3.0
go: extracting github.com/lib/pq v1.3.0
go: finding github.com/lib/pq v1.3.0
?       github.com/alexellis/todo1/todo [no test files]
Removing intermediate container 9a4017438500


تكوين أسرار الوصول إلى Postgresql


يمكننا إنشاء تجمع اتصال init ()، وهي طريقة يتم تشغيلها مرة واحدة فقط عند بدء تشغيل البرنامج.

// init       .   ,     ,   /   /

func init() {
       if _, err := os.Stat("/var/openfaas/secrets/password"); err == nil {
               password, _ := sdk.ReadSecret("password")
               user, _ := sdk.ReadSecret("username")
               host, _ := sdk.ReadSecret("host")
               dbName := os.Getenv("postgres_db")
               port := os.Getenv("postgres_port")
               sslmode := os.Getenv("postgres_sslmode")
               connStr := "postgres://" + user + ":" + password + "@" + host + ":" + port + "/" + dbName + "?sslmode=" + sslmode
var err error
               db, err = sql.Open("postgres", connStr)
               if err != nil {
                       panic(err.Error())
               }
               err = db.Ping()
               if err != nil {
                       panic(err.Error())
               }
       }
}


كما لاحظت ، يتم استخراج بعض المعلومات من ما يتم os.Getenvقراءته من البيئة. سأعتبر أن هذه القيم غير سرية ، لقد تم وضعها في الملف todo.y.

البقية ، مثل كلمة المرور والمضيف ، والتي هي سرية ، يتم الاحتفاظ بها في أسرار Kubernetes .

يمكنك إنشاؤها من خلال faas-cli secret createأو من خلال kubectl create secret generic -n openfaas-fn.

السلسلة sdk.ReadSecretتأتي من OpenFaaS سحابة SDK، مع استيراد التالية: github.com/openfaas/openfaas-cloud/sdk. يقرأ ملف سري من القرص ويعيد قيمة أو خطأ.

احصل على القيم السرية من arkade info postgresql.

الآن لكل كلمة مرور ، قم بما يلي:

export POSTGRES_PASSWORD=$(kubectl get secret --namespace default postgresql -o jsonpath="{.data.postgresql-password}" | base64 --decode)
export USERNAME="postgres"
export PASSWORD=$POSTGRES_PASSWORD
export HOST="postgresql.default"
faas-cli secret create username --from-literal $USERNAME
faas-cli secret create password --from-literal $PASSWORD
faas-cli secret create host --from-literal $HOST


تحقق من أسرار التوفر والامتثال:

faas-cli secret ls
NAME
username
password
host
# And via kubectl:
kubectl get secret -n openfaas-fn
NAME                  TYPE                                  DATA   AGE
username              Opaque                                1      13s
password              Opaque                                1      13s
host                  Opaque                                1      12s


عدّل ملف YAML وأضف ما يلي:

secrets:
   - host
   - password
   - username
   environment:
     postgres_db: postgres
     postgres_sslmode: "disable"
     postgres_port: 5432


بعد ذلك ، قم بتحديث وحدات Go ثم قم بتشغيل البنية مرة أخرى:

cd todo
go get
go mod tidy
cd ..
faas-cli build -f todo.yml --build-arg GO111MODULE=on
Successfully built d2c609f8f559
Successfully tagged alexellis2/todo:latest
Image: alexellis2/todo:latest built.
[0] < Building todo done in 22.50s.
[0] Worker done.
Total build time: 22.50s


عمل التجميع كما هو متوقع ، لذا فلنقم بتشغيله faas-cliبنفس الحجج لبدء الصورة ونشرها. إذا كانت بيانات الاعتماد وتكوين SQL صحيحة ، فلن نرى أخطاء في السجلات ، ومع ذلك ، إذا كانت غير صحيحة ، فسوف نحصل على رمز الذعر في init ().

تحقق من السجلات:

faas-cli logs todo
2020-03-26T14:10:03Z Forking - ./handler []
2020-03-26T14:10:03Z 2020/03/26 14:10:03 Started logging stderr from function.
2020-03-26T14:10:03Z 2020/03/26 14:10:03 Started logging stdout from function.
2020-03-26T14:10:03Z 2020/03/26 14:10:03 OperationalMode: http
2020-03-26T14:10:03Z 2020/03/26 14:10:03 Timeouts: read: 10s, write: 10s hard: 10s.
2020-03-26T14:10:03Z 2020/03/26 14:10:03 Listening on port: 8080
2020-03-26T14:10:03Z 2020/03/26 14:10:03 Metrics listening on port: 8081
2020-03-26T14:10:03Z 2020/03/26 14:10:03 Writing lock-file to: /tmp/.lock


في حين أن كل شيء يبدو على ما يرام ، فلنحاول الآن تسمية نقطة النهاية:

echo | faas-cli invoke todo -f todo.yml
2020-03-26T14:11:02Z 2020/03/26 14:11:02 POST / - 200 OK - ContentLength: 35


لذا ، قمنا الآن بإنشاء اتصال ناجح بقاعدة البيانات ، ويمكننا إجراء الإدراج. كيف نعرف ذلك؟ لأنه db.Ping ()يعيد خطأ ، وإلا كان سيثير الذعر:

err = db.Ping()
if err != nil {
   panic(err.Error())
}


اتبع الرابط لمزيد من التفاصيل حول حزمة قاعدة البيانات / sql .

كتابة كود الإدراج


يدرج هذا الرمز صفًا جديدًا في الجدول todoويستخدم بناء جملة خاصًا لا يتم فيه تضمين القيمة بين علامتي اقتباس ، ولكن بدلاً من ذلك يتم استبداله برمز db.Query. في "الأيام الخوالي" لبرمجة LAMP ، كان الخطأ الشائع الذي أدى إلى جعل العديد من الأنظمة غير آمنة هو الافتقار إلى الصرف الصحي لبيانات الإدخال وسلسلة من مدخلات المستخدم مباشرة في عبارة SQL.

تخيل شخصًا يدخل الوصف ؛ drop table todoلن تكون ممتعة للغاية.

لذلك ، نقوم بتشغيل db.Query، ثم نمرر عبارة SQL باستخدام $1، $2وما إلى ذلك لكل قيمة ، ثم يمكننا الحصول على النتيجة و / أو الخطأ. يجب أيضًا إغلاق هذه النتيجة ، لذا استخدم تأجيلًا لذلك.

func insert(description string) error {
       res, err := db.Query(`insert into todo (id, description, created_date) values (DEFAULT, $1, now());`,
               description)
       if err != nil {
               return err
       }
       defer res.Close()
       return nil
}


الآن دعنا نربط هذا الرمز.

func Handle(w http.ResponseWriter, r *http.Request) {
       if r.Method == http.MethodPost && r.URL.Path == "/create" {
               defer r.Body.Close()
               body, _ := ioutil.ReadAll(r.Body)
               if err := insert(string(body)); err != nil {
                       http.Error(w, fmt.Sprintf("unable to insert todo: %s", err.Error()), http.StatusInternalServerError)
               }
       }
}


دعونا نشره وتشغيله.

echo | faas-cli invoke todo -f todo.yml
curl http://127.0.0.1:8080/function/todo/create --data "faas-cli build"
curl http://127.0.0.1:8080/function/todo/create --data "faas-cli push"
curl http://127.0.0.1:8080/function/todo/create --data "faas-cli deploy"


تحقق من سجلات API:

faas-cli logs todo
2020-03-26T14:35:29Z 2020/03/26 14:35:29 POST /create - 200 OK - ContentLength: 0


تحقق من محتويات الجدول باستخدام pgsql:

export POSTGRES_PASSWORD=$(kubectl get secret --namespace default postgresql -o jsonpath="{.data.postgresql-password}" | base64 --decode)
kubectl run postgresql-client --rm --tty -i --restart='Never' --namespace default --image docker.io/bitnami/postgresql:11.6.0-debian-9-r0 --env="PGPASSWORD=$POSTGRES_PASSWORD" --command -- psql --host postgresql -U postgres -d postgres -p 5432
postgres=# select * from todo;
id |   description   |        created_date        | completed_date
----+-----------------+----------------------------+----------------
1 | faas-cli build  | 2020-03-26 14:36:03.367789 |
2 | faas-cli push   | 2020-03-26 14:36:03.389656 |
3 | faas-cli deploy | 2020-03-26 14:36:03.797881 |


تهانينا ، لديك الآن واجهة برمجة تطبيقات TODO يمكنها قبول الطلبات الواردة من خلال curlأو أي عميل HTTP آخر وكتابتها في جدول قاعدة البيانات.

طلب تسجيل


لنقم بإنشاء وظيفة جديدة للاستعلام عن سجلات TODO من جدول:

func selectTodos() ([]Todo, error) {
   var error err
   var todos []Todo
   return todos, err
}


لا يمكننا تسمية طريقة التحديد هذه لأنها كلمة رئيسية محجوزة للعمل مع goroutines.

الآن قم بتوصيل الطريقة بالمعالج الرئيسي:

} else if r.Method == http.MethodGet && r.URL.Path == "/list" {
   todos, err := selectTodos()
   if err != nil {
       http.Error(w, fmt.Sprintf("unable to get todos: %s", err.Error()), http.StatusInternalServerError)
   }
   out, _ := json.Marshal(todos)
   w.Header().Set("Content-Type", "application/json")
   w.Write(out)
}


الآن بعد أن توجد حقول إضافية للتواريخ في مخطط البيانات لدينا ، قم بتحديث هيكل Todo:

type Todo struct {
   ID int `json:"id"`
   Description   string `json:"description"`
   CreatedDate   *time.Time `json:"created_date"`
   CompletedDate *time.Time `json:"completed_date"`
}


الآن دعنا نضيف selectTodos()رمز الطلب إلى طريقتنا :

func selectTodos() ([]Todo, error) {
       rows, getErr := db.Query(`select id, description, created_date, completed_date from todo;`)
   if getErr != nil {
       return []Todo{}, errors.Wrap(getErr, "unable to get from todo table")
   }
   todos := []Todo{}
   defer rows.Close()
   for rows.Next() {
       result := Todo{}
       scanErr := rows.Scan(&result.ID, &result.Description, &result.CreatedDate, &result.CompletedDate)
       if scanErr != nil {
           log.Println("scan err:", scanErr)
       }
       todos = append(todos, result)
   }
   return todos, nil
}


كما كان من قبل ، نحتاج إلى تأخير إغلاق صفوف الطلب. يتم إدراج كل قيمة في الهيكل الجديد باستخدام طريقة rows.Scan. في نهاية الطريقة ، لدينا جزء من محتوى Todo.

لنجرب:

faas-cli up -f todo.yml --build-arg GO111MODULE=on
curl http://127.0.0.1:8080/function/todo/list


ها هي النتيجة:

[
 {
   "id": 2,
   "description": "faas-cli build",
   "created_date": "2020-03-26T14:36:03.367789Z",
   "completed_date": null
 },
 {
   "id": 3,
   "description": "faas-cli push",
   "created_date": "2020-03-26T14:36:03.389656Z",
   "completed_date": null
 },
 {
   "id": 4,
   "description": "faas-cli deploy",
   "created_date": "2020-03-26T14:36:03.797881Z",
   "completed_date": null
 }
]


لإزالة القيم ، يمكننا تحديث التعليقات التوضيحية للهيكل عن طريق إضافة omitempty:

CompletedDate *time.Time `json:"completed_date,omitempty"`


لتلخيص العمل المنجز


لم ننته بعد ، لكن هذه لحظة جيدة للتوقف ومراجعة ما حققناه حتى الآن. نحن:

  • تثبيت Go و Docker و kubectl و VSCode (IDE)
  • نشر Kubernetes على جهاز الكمبيوتر المحلي
  • تم تثبيت Postgresql باستخدام arkade و helm3
  • تم تثبيت OpenFaaS ومكدس PLONK لمطوري تطبيقات Kubernetes
  • إنشاء واجهة برمجة تطبيقات REST الثابتة الأولية باستخدام Go golang-middlewareونموذج OpenFaaS
  • تمت إضافة وظيفة "insert" إلى واجهة برمجة تطبيقات TODO
  • تمت إضافة وظائف مختارة إلى TODO API


نموذج الشفرة الكاملة الذي قمنا بإنشائه متاح حتى الآن على حسابي في GitHub: alexellis / kubernetes-todo-go-app

ثم يمكننا القيام بالمزيد ، على سبيل المثال:

  • إضافة المصادقة باستخدام رمز حامل ثابت
  • قم بإنشاء صفحة ويب باستخدام قالب HTML أو React ثابت لتقديم قائمة TODO وإنشاء عناصر جديدة.
  • إضافة دعم متعدد المستخدمين إلى API


وأكثر بكثير. يمكننا أيضًا الخوض في مكدس PLONK ونشر لوحة معلومات Grafana للبدء في مراقبة واجهة برمجة التطبيقات وفهم عدد الموارد المستخدمة مع لوحة معلومات Kubernetes أو خادم القياس (مثبت باستخدام arkade install).

تعرف على المزيد حول arkade: https://get-arkade.dev قم

بحضور ورشة عمل OpenFaaS لمعرفة المزيد حول ما سبق: https://github.com/openfaas/workshop/

يمكنك الاشتراك في النشرة الإخبارية من تحديثات Insider المتميزة على
https: / /www.alexellis.io/
وعلى تويتر أليكس إليس



تعلم المزيد عن الدورة



All Articles