परिचय: क्यों Go और Kubernetes एक आदर्श जोड़ी हैं
\n\nGo (Golang) और Kubernetes (K8s) एक-दूसरे के लिए बने हैं। Kubernetes स्वयं Go में लिखा गया है, इसलिए मूल टूलकिट, प्रदर्शन और तैनाती में सरलता इस जोड़ी को आधुनिक माइक्रोसर्विसेज के लिए मानक बनाती है। यदि आप DevOps में अपनी यात्रा शुरू कर रहे हैं या अपने Go-एप्लिकेशन की तैनाती को स्वचालित करना चाहते हैं, तो यह गाइड आपको सभी चरणों में मदद करेगा: एक साधारण HTTP सर्वर लिखने से लेकर इसे Kubernetes क्लस्टर में चलाने तक।
\n\nइस लेख में हम निम्नलिखित पर चर्चा करेंगे:
\n- \n
- Go-एप्लिकेशन को Docker इमेज में बनाना \n
- न्यूनतम Kubernetes मेनिफेस्ट (Deployment, Service, Ingress) बनाना \n
- डिप्लॉयमेंट और कार्यक्षमता की जाँच करना \n
यह माना जाता है कि आपके पास पहले से docker, kubectl और minikube स्थापित हैं (या किसी K8s क्लस्टर तक पहुँच है)।
चरण 1: एक सरल Go-एप्लिकेशन लिखें
\n\nहम एक बुनियादी HTTP सर्वर बनाएंगे जो अनुरोधों का जवाब देगा। main.go फ़ाइल बनाएँ:
package main\n\nimport (\n "fmt"\n "net/http"\n "os"\n)\n\nfunc main() {\n http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {\n fmt.Fprintf(w, "Go से नमस्ते! संस्करण: %s", os.Getenv("APP_VERSION"))\n })\n\n port := os.Getenv("PORT")\n if port == "" {\n port = "8080"\n }\n\n fmt.Printf("सर्वर पोर्ट %s पर शुरू हुआ\\n", port)\n http.ListenAndServe(":"+port, nil)\n}\n\n\nयह एप्लिकेशन APP_VERSION पर्यावरण चर को पढ़ता है (डिप्लॉय करते समय सेट किया जा सकता है) और PORT में निर्दिष्ट पोर्ट पर सुनता है। अब इसे स्थानीय रूप से परीक्षण करें:
go run main.go\n# ब्राउज़र को http://localhost:8080 पर खोलें\n\n\nGo मॉड्यूल बनाएँ
\nआसान बिल्ड के लिए मॉड्यूल को इनिशियलाइज़ करें:
\ngo mod init my-go-app\n\n\nचरण 2: Docker के साथ कंटेनरीकरण
\n\nKubernetes में डिप्लॉय करने के लिए, एप्लिकेशन को Docker इमेज में पैक करना होगा। हम इमेज को न्यूनतम बनाने के लिए मल्टी-स्टेज बिल्ड का उपयोग करेंगे।
\n\nDockerfile फ़ाइल बनाएँ:
# बिल्ड स्टेज\nFROM golang:1.22-alpine AS builder\nWORKDIR /app\nCOPY go.mod ./\nCOPY main.go ./\nRUN go build -o my-app .\n\n# फाइनल इमेज\nFROM alpine:3.19\nWORKDIR /app\nCOPY --from=builder /app/my-app .\nEXPOSE 8080\nCMD ["./my-app"]\n\n\nइमेज बनाएँ और जाँचें:
\ndocker build -t my-go-app:v1 .\ndocker run -p 8080:8080 my-go-app:v1\n# http://localhost:8080\n\n\nचरण 3: Kubernetes मेनिफेस्ट
\n\nअब क्लस्टर में तैनाती के लिए YAML फ़ाइलें तैयार करें। हम तीन संसाधन बनाएंगे: Deployment (पॉड प्रबंधन), Service (नेटवर्क एक्सेस) और Ingress (बाहरी एक्सेस)।
\n\n3.1. Deployment
\ndeployment.yaml फ़ाइल बनाएँ:
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: go-app-deployment\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: my-go-app:v1\n ports:\n - containerPort: 8080\n env:\n - name: APP_VERSION\n value: "1.0.0"\n - name: PORT\n value: "8080"\n livenessProbe:\n httpGet:\n path: /\n port: 8080\n initialDelaySeconds: 5\n periodSeconds: 10\n\n\nयहाँ हमने 2 रेप्लिका, लाइवनेस प्रोब और पर्यावरण चर सेट किए हैं।
\n\n3.2. Service
\nआंतरिक पहुँच के लिए service.yaml फ़ाइल बनाएँ:
apiVersion: v1\nkind: Service\nmetadata:\n name: go-app-service\nspec:\n selector:\n app: go-app\n ports:\n - protocol: TCP\n port: 80\n targe