परिचय: Go और Kubernetes एक आदर्श जोड़ी क्यों हैं
\n\nआधुनिक डेवलपमेंट में माइक्रोसर्विस आर्किटेक्चर और कंटेनराइजेशन का चलन बढ़ रहा है। Go (Golang) भाषा अपनी परफॉरमेंस, सादगी और कंकरेंसी के लिए बैकएंड सर्विसेज लिखने में अग्रणी बन गई है। वहीं, Kubernetes (K8s) कंटेनर ऑर्केस्ट्रेशन का डी-फैक्टो मानक है।
\n\nKubernetes पर Go एप्लिकेशन डिप्लॉय करना शुरुआती लोगों को जटिल लग सकता है। लेकिन इस चरण-दर-चरण गाइड को फॉलो करके, आप कुछ ही मिनटों में CI/CD पाइपलाइन सेट कर सकते हैं और अपनी सर्विस चला सकते हैं। इस लेख में, हम Docker इमेज बनाना, Kubernetes मैनिफेस्ट लिखना, सर्विस और Ingress कॉन्फ़िगर करना, और ऑप्टिमाइजेशन के प्रैक्टिकल टिप्स देंगे।
\n\n1. Go एप्लिकेशन और Dockerfile तैयार करना
\n\nक्लस्टर में ऐप डिप्लॉय करने से पहले, इसे कंटेनर में पैक करना ज़रूरी है। Go में स्टैटिक कंपाइलेशन के कारण यह बहुत आसान है।
\n\n1.1. Go में एक सरल HTTP सर्वर का उदाहरण
\n\nचलिए एक मिनिमल सर्वर बनाते हैं जो रिक्वेस्ट का जवाब देगा। यह डेमो के लिए एक टिपिकल माइक्रोसर्विस है।
\n\n// main.go\npackage main\n\nimport (\n "fmt"\n "net/http"\n "os"\n)\n\nfunc main() {\n port := os.Getenv("PORT")\n if port == "" {\n port = "8080"\n }\n\n http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {\n fmt.Fprintf(w, "Hello from Go on Kubernetes!")\n })\n\n http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {\n w.WriteHeader(http.StatusOK)\n w.Write([]byte("OK"))\n })\n\n fmt.Printf("Server is running on port %s\\n", port)\n http.ListenAndServe(":"+port, nil)\n}\n\n\n1.2. मल्टी-स्टेज Dockerfile बिल्ड
\n\nफाइनल इमेज का साइज कम करने के लिए मल्टी-स्टेज बिल्ड (multi-stage build) का उपयोग करें। यह क्लस्टर में तेज़ी से लोड करने के लिए बहुत ज़रूरी है।
\n\n# ---- पहला चरण: बाइनरी बनाना ----\nFROM golang:1.21-alpine AS builder\n\nWORKDIR /app\nCOPY go.mod go.sum ./\nRUN go mod download\n\nCOPY . .\nRUN CGO_ENABLED=0 GOOS=linux go build -o /app/server .\n\n# ---- दूसरा चरण: मिनिमल इमेज ----\nFROM alpine:latest\n\nRUN apk --no-cache add ca-certificates\n\nWORKDIR /root/\nCOPY --from=builder /app/server .\n\nEXPOSE 8080\n\nCMD ["./server"]\n\n\nमहत्वपूर्ण: फ्लैग CGO_ENABLED=0 CGO को बंद करता है, जिससे पूरी तरह से स्टैटिक बाइनरी बनती है जिसे किसी बाहरी लाइब्रेरी की ज़रूरत नहीं होती।
2. Kubernetes मैनिफेस्ट बनाना
\n\nअब जब हमारे पास इमेज है, तो हमें यह बताना होगा कि Kubernetes हमारे एप्लिकेशन को कैसे मैनेज करेगा। मुख्य ऑब्जेक्ट हैं: Deployment (रिप्लिका मैनेज करने के लिए) और Service (नेटवर्क एक्सेस के लिए)।
\n\n2.1. Deployment
\n\nDeployment यह सुनिश्चित करता है कि हमारे एप्लिकेशन के पॉड्स (Pod) की सही संख्या हमेशा चलती रहे। ऑटोमैटिक रिकवरी के लिए liveness और readiness probes सेट करना ज़रूरी है।
\n\n// deployment.yaml\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: go-app\n labels:\n app: go-app\nspec:\n replicas: 2\n selector:\n matchLabels:\n app: go-app\n template:\n metadata:\n labels:\n app: go-app\n spec:\n containers:\n - name: go-app\n image: your-dockerhub-username/go-app:latest\n ports:\n - containerPort: 8080\n env:\n - name: PORT\n value: "8080"\n livenessProbe:\n httpGet:\n path: /health\n port: 8080\n initialDelaySeconds: 5\n periodSeconds: 10\n readinessProbe:\n httpGet:\n path: /health\n port: 8080\n initialDelaySeconds: 3\n periodSeconds: 5\n resources:\n requests:\n memory: "64Mi"\n