نشر تطبيق Go على Kubernetes: دليل أساسي

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

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

ابدأ الدورة

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

Go (Golang) و Kubernetes هما أداتان رئيسيتان في التطوير الحديث. Go، الذي تم إنشاؤه في Google، هي لغة مترجمة وذات كتابة ثابتة مثالية لبناء الخدمات المصغرة عالية الأداء. Kubernetes، بدوره، هو المعيار الفعلي لتنسيق الحاويات. اتحادهما يخلق نظامًا بيئيًا قويًا: تكتب كودًا خفيفًا وسريعًا بلغة Go، وتعبئته في Docker image، ويدير Kubernetes تشغيله وتوسيعه واستعادته.

في هذا الدليل، سنقوم خطوة بخطوة بنشر تطبيق Go بسيط على Kubernetes. ستتعلم كيفية كتابة Dockerfile، وإنشاء manifests لـ Deployment و Service، وتطبيقها في الكتلة. المقالة موجهة للمطورين الذين هم على دراية بأساسيات Go ولديهم فهم أساسي لـ Docker.



الخطوة 1: إنشاء وتعبئة تطبيق Go في حاوية

لنبدأ مع خادم HTTP بسيط بلغة Go. قم بإنشاء ملف main.go:

package main

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

func main() { port := os.Getenv("PORT") if port == "" { port = "8080" } http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello from Go on Kubernetes!") }) http.ListenAndServe(":"+port, nil)}

يستمع هذا الكود إلى المنفذ المحدد بواسطة متغير البيئة PORT (الافتراضي 8080)، ويعيد رسالة بسيطة.



بناء Docker image

الآن سنقوم بإنشاء Dockerfile للبناء متعدد المراحل - وهذا سيقلل حجم الصورة النهائية:

# مرحلة البناءFROM golang:1.21-alpine AS builderWORKDIR /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:v1 .docker push yourusername/go-k8s-app:v1


الخطوة 2: Deployment manifest

يستخدم Kubernetes ملفات YAML manifests لوصف الحالة المرغوبة للكتلة. قم بإنشاء ملف deployment.yaml:

apiVersion: apps/v1kind: Deploymentmetadata:  name: go-app-deployment  labels:    app: go-appspec:  replicas: 3  selector:    matchLabels:      app: go-app  template:    metadata:      labels:        app: go-app    spec:      containers:      - name: go-app        image: yourusername/go-k8s-app:v1        ports:        - containerPort: 8080        env:        - name: PORT          value: "8080"        readinessProbe:          httpGet:            path: /            port: 8080          initialDelaySeconds: 5          periodSeconds: 10        livenessProbe:          httpGet:            path: /            port: 8080          initialDelaySeconds: 15          periodSeconds: 20

شرح الحقول الرئيسية:

  • replicas: 3 — سيحافظ Kubernetes على 3 نسخ عاملة (pods) من التطبيق.
  • readinessProbe — تتحقق مما إذا كان الـ pod جاهزًا لاستقبال الحركة المرورية (طلبات إلى /).
  • livenessProbe — تتحقق مما إذا كان الـ pod على قيد الحياة؛ إذا لم يكن كذلك، سيقوم Kubernetes بإعادة تشغيله.


الخطوة 3: Service manifest

لجعل التطبيق متاحًا داخل الكتلة أو من الخارج، نحتاج إلى Service. قم بإنشاء service.yaml:

apiVersion: v1kind: Servicemetadata:  name: go-app-servicespec:  selector:    app: go-app  ports:    - protocol: TCP      port: 80      targetPort: 8080  type: LoadBalancer
  • selector — يربط الخدمة بـ pods التي تحتوي على الوسم

المدونات

توصيات الكتب