Kubernetes पर C++ डिप्लॉय: एक व्यावहारिक मूल गाइड
\n\nKubernetes (K8s) कंटेनर ऑर्केस्ट्रेशन के लिए डी-फैक्टो मानक बन गया है। हालांकि इसे अक्सर Go, Java या Python से जोड़ा जाता है, C++ का उपयोग उच्च-लोड वाली सेवाओं के लिए भी सक्रिय रूप से किया जाता है, जहां प्रदर्शन और कम मेमोरी खपत महत्वपूर्ण होती है। इस लेख में, हम Kubernetes क्लस्टर में C++ एप्लिकेशन डिप्लॉय करने की व्यावहारिक प्रक्रिया को समझेंगे: एक सरल HTTP सर्वर लिखने से लेकर मेनिफेस्ट बनाने और स्केलिंग तक।
\n\n1. C++ एप्लिकेशन और Docker इमेज तैयार करना
\nशुरुआत करने के लिए, हम एक न्यूनतम C++ एप्लिकेशन बनाएंगे जो HTTP अनुरोधों को सुनेगा। सरलता के लिए हम cpp-httplib लाइब्रेरी (header-only) का उपयोग करेंगे।
स्रोत कोड (server.cpp)
\n#include <httplib.h>\n#include <iostream>\n\nint main() {\n using namespace httplib;\n Server svr;\n\n svr.Get("/", [](const Request& req, Response& res) {\n res.set_content("Hello from C++ on Kubernetes!", "text/plain");\n });\n\n svr.Get("/health", [](const Request& req, Response& res) {\n res.set_content("OK", "text/plain");\n });\n\n std::cout << "Server started on port 8080" << std::endl;\n svr.listen("0.0.0.0", 8080);\n return 0;\n}\n\n\nDockerfile (मल्टी-स्टेज बिल्ड)
\nइमेज को कॉम्पैक्ट और सुरक्षित बनाने के लिए, हम multi-stage build का उपयोग करेंगे:
\n# बिल्ड स्टेज\nFROM gcc:13-bookworm AS builder\nWORKDIR /app\nCOPY server.cpp .\nRUN g++ -std=c++17 -O2 -lpthread server.cpp -o server\n\n# फाइनल इमेज\nFROM debian:bookworm-slim\nWORKDIR /app\nCOPY --from=builder /app/server .\nEXPOSE 8080\nCMD ["./server"]\n\n\nइमेज बनाएं:
\ndocker build -t cpp-k8s-demo:latest .\n\n\nस्थानीय रूप से जांचें:
\ndocker run -p 8080:8080 cpp-k8s-demo\ncurl http://localhost:8080/\n\n2. Kubernetes मेनिफेस्ट लिखना
\nडिप्लॉय के लिए हमें दो मुख्य संसाधनों की आवश्यकता होगी: Deployment (पॉड प्रबंधन) और Service (नेटवर्क एक्सेस)।
\n\nDeployment (deployment.yaml)
\nयह परिभाषित करता है कि कितनी रेप्लिका चलानी हैं, अपडेट नीति और कंटेनर इमेज।
\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: cpp-app-deployment\n labels:\n app: cpp-app\nspec:\n replicas: 3\n selector:\n matchLabels:\n app: cpp-app\n template:\n metadata:\n labels:\n app: cpp-app\n spec:\n containers:\n - name: cpp-app\n image: cpp-k8s-demo:latest\n imagePullPolicy: IfNotPresent\n ports:\n - containerPort: 8080\n livenessProbe:\n httpGet:\n path: /health\n port: 8080\n initialDelaySeconds: 5\n periodSeconds: 10\n resources:\n requests:\n memory: "64Mi"\n cpu: "100m"\n limits:\n memory: "128Mi"\n cpu: "200m"\n\n\nमहत्वपूर्ण: imagePullPolicy: IfNotPresent स्थानीय परीक्षण के लिए उपयुक्त है। प्रोडक्शन के लिए Always का उपयोग करें या वर्जन टैग निर्दिष्ट करें।
Service (service.yaml)
\nयह क्लस्टर के अंदर (ClusterIP) या बाहर (NodePort/LoadBalancer) पॉड तक पहुंच प्रदान करता है।
\napiVersion: v1\nkind: Service\nmetadata:\n name: cpp-app-service\nspec:\n selector:\n app: cpp-app\n ports:\n - protocol: TCP\n port: 80\n targetPort: 8080\n type: LoadBalancer\n\n\n3. क्लस्टर में डिप्लॉय और जांच
\nमान लें कि आपके पास पहले से एक कार्यशील क्लस्टर है (Minikube, kind या क्लाउड)। कमांड चलाएं:
\n\n# क्लस्टर में इमेज लोड करें (Minikube के लिए)\nminikube image load cpp-k8s-demo:latest\n\n# मेनिफेस्ट लागू करें\nkubectl apply -f deployment.yaml\nkubectl apply -f service.yaml\n\n# स्थिति जांचें\nkubectl get pods -l app=cpp-app\nkubectl get svc cpp-app-service
ब्लॉग
पुस्तक अनुशंसाएँ
यह भी पढ़ें