نشر تطبيق Go على Kubernetes: دليل خطوة بخطوة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا Go و Kubernetes هما الثنائي المثالي



Go (Golang) و Kubernetes هما المعيار الحديث لبناء ونشر بنية الميكروسيرفيسات. يتم تجميع Go إلى ملف ثنائي ثابت، ولا يتطلب تبعيات على الجهاز الهدف، ويبدأ التشغيل بسرعة ويستخدم الذاكرة بكفاءة. من ناحية أخرى، يوفر Kubernetes أتمتة نشر الحاويات وتوسيع نطاقها وإدارتها.



في هذا الدليل، سنشرح عمليًا دورة النشر الكاملة لتطبيق Go بسيط على Kubernetes. ستتعلم كيفية كتابة Dockerfile، وإنشاء مانيفستات Kubernetes (Deployment، Service، ConfigMap) وتشغيل التطبيق في الكتلة. يمكن استخدام جميع أمثلة الكود فورًا في مشاريعك الخاصة.



1. تحضير تطبيق Go للحاويات



لنبدأ بإنشاء خادم HTTP بسيط بلغة Go يستجيب للطلبات ويعرض ترحيبًا. من المهم أن يستمع التطبيق إلى المنفذ الذي سنحدده من خلال متغير بيئة. هذه ممارسة قياسية لـ Kubernetes.



أنشئ ملف main.go:



package main

import ( "fmt" "log" "net/http" "os")

func main() { port := os.Getenv("PORT") if port == "" { port = "8080" }

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { name := os.Getenv("APP_NAME") if name == "" { name = "Go App" } fmt.Fprintf(w, "مرحبًا من %s! نعمل على المنفذ %s", name, port) })

log.Printf("الخادم يعمل على المنفذ %s", port) log.Fatal(http.ListenAndServe(":"+port, nil))}


يقرأ هذا الكود متغيرات البيئة PORT و APP_NAME، مما يسمح لنا بتكوين التطبيق بمرونة من خلال ConfigMap في Kubernetes.



2. إنشاء Dockerfile لتطبيق Go



للنشر على Kubernetes، نحتاج إلى صورة Docker. سنستخدم البناء متعدد المراحل (multi-stage build) - مما يقلل حجم الصورة ويعزز الأمان.



أنشئ ملف Dockerfile:



# مرحلة البناءFROM golang:1.22-alpine AS builder

WORKDIR /appCOPY go.mod go.sum ./RUN go mod downloadCOPY . .RUN CGO_ENABLED=0 GOOS=linux go build -o /app/server .

# الصورة النهائيةFROM alpine:latestRUN apk --no-cache add ca-certificatesWORKDIR /root/COPY --from=builder /app/server .EXPOSE 8080CMD ["./server"]


قم ببناء الصورة وإرسالها إلى السجل (مثل Docker Hub):



docker build -t yourusername/go-k8s-app:latest .docker push yourusername/go-k8s-app:latest


3. مانيفستات Kubernetes: Deployment، Service، ConfigMap



الآن سننشئ المانيفستات لنشر التطبيق في الكتلة. يُوصى بتخزينها في مجلد k8s/.



3.1. ConfigMap للتكوين



سنستخرج إعدادات التطبيق إلى ConfigMap - مما يسمح بتغييرها دون إعادة بناء الصورة.



ملف k8s/configmap.yaml:



apiVersion: v1kind: ConfigMapmetadata:  name: go-app-configdata:  APP_NAME: "تطبيق Go الخاص بي"  PORT: "8080"


3.2. Deployment - وصف البود



يدير Deployment نسخ البود ويضمن التحديثات دون توقف.



ملف k8s/deployment.yaml:



apiVersion: apps/v1kind: Deploymentmetadata:  name: go-app-deployment  labels:    app: go-appspec:  replicas: 2  selector:    matchLabels:      app: go-app  template:    metadata:      labels:        app: go-app    spec:      containers:      - name: go-app        image: yourusername/go-k8s-app:latest        ports:        - containerPort: 8080        envFrom:        - configMapRef:            name: go-app-config        livenessProbe:          httpGet:            path: /            port: 8080          initialDelaySeconds: 5          periodSeconds: 10\                

المدونات

توصيات الكتب