परिचय: क्यों Go और Kubernetes एक आदर्श जोड़ी हैं
Go (Golang) और Kubernetes आधुनिक विकास में दो प्रमुख उपकरण हैं। Google में बनाया गया Go, एक कंपाइल्ड, स्टैटिकली टाइप की गई भाषा है जो उच्च-प्रदर्शन वाले माइक्रोसर्विसेज बनाने के लिए एकदम सही है। Kubernetes, बदले में, कंटेनर ऑर्केस्ट्रेशन के लिए डी-फैक्टो मानक है। इनका संयोजन एक शक्तिशाली इकोसिस्टम देता है: आप Go में हल्का, तेज़ कोड लिखते हैं, इसे Docker इमेज में पैकेज करते हैं, और Kubernetes इसके चलने, स्केलिंग और रिकवरी का प्रबंधन करता है।
इस गाइड में, हम चरण-दर-चरण Kubernetes पर एक सरल Go एप्लिकेशन तैनात करेंगे। आप सीखेंगे कि Dockerfile कैसे लिखें, Deployment और Service मेनिफेस्ट कैसे बनाएं, और उन्हें क्लस्टर में कैसे लागू करें। यह लेख उन डेवलपर्स के लिए है जो पहले से Go की मूल बातें जानते हैं और उन्हें Docker की बुनियादी समझ है।
चरण 1: Go एप्लिकेशन बनाना और कंटेनरीकृत करना
चलिए एक सरल Go HTTP सर्वर से शुरू करते हैं। 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 इमेज बनाना
अब मल्टी-स्टेज बिल्ड के लिए 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 मेनिफेस्ट
Kubernetes क्लस्टर की वांछित स्थिति का वर्णन करने के लिए YAML मेनिफेस्ट का उपयोग करता है। 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 चल रहे इंस्टेंस (पॉड) बनाए रखेगा।readinessProbe— जाँचता है कि पॉड ट्रैफ़िक प्राप्त करने के लिए तैयार है या नहीं (पथ / पर अनुरोध)।livenessProbe— जाँचता है कि पॉड जीवित है या नहीं; यदि नहीं, तो Kubernetes इसे पुनरारंभ करेगा।
चरण 3: Service मेनिफेस्ट
एप्लिकेशन को क्लस्टर के अंदर या बाहर से सुलभ बनाने के लिए, एक Service की आवश्यकता है। service.yaml बनाएं:
apiVersion: v1kind: Servicemetadata: name: go-app-servicespec: selector: app: go-app ports: - protocol: TCP port: 80 targetPort: 8080 type: LoadBalancerselector— सेवा को उन पॉड्स से जोड़ता है जिनके पास लेबल है