Kubernetes पर C++ डिप्लॉय: एक व्यावहारिक मूल गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Kubernetes पर C++ डिप्लॉय: एक व्यावहारिक मूल गाइड

\n\n

Kubernetes (K8s) कंटेनर ऑर्केस्ट्रेशन के लिए डी-फैक्टो मानक बन गया है। हालांकि इसे अक्सर Go, Java या Python से जोड़ा जाता है, C++ का उपयोग उच्च-लोड वाली सेवाओं के लिए भी सक्रिय रूप से किया जाता है, जहां प्रदर्शन और कम मेमोरी खपत महत्वपूर्ण होती है। इस लेख में, हम Kubernetes क्लस्टर में C++ एप्लिकेशन डिप्लॉय करने की व्यावहारिक प्रक्रिया को समझेंगे: एक सरल HTTP सर्वर लिखने से लेकर मेनिफेस्ट बनाने और स्केलिंग तक।

\n\n

1. C++ एप्लिकेशन और Docker इमेज तैयार करना

\n

शुरुआत करने के लिए, हम एक न्यूनतम C++ एप्लिकेशन बनाएंगे जो HTTP अनुरोधों को सुनेगा। सरलता के लिए हम cpp-httplib लाइब्रेरी (header-only) का उपयोग करेंगे।

\n\n

स्रोत कोड (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\n

Dockerfile (मल्टी-स्टेज बिल्ड)

\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

इमेज बनाएं:

\n
docker build -t cpp-k8s-demo:latest .\n
\n\n

स्थानीय रूप से जांचें:

\n
docker run -p 8080:8080 cpp-k8s-demo\ncurl http://localhost:8080/
\n\n

2. Kubernetes मेनिफेस्ट लिखना

\n

डिप्लॉय के लिए हमें दो मुख्य संसाधनों की आवश्यकता होगी: Deployment (पॉड प्रबंधन) और Service (नेटवर्क एक्सेस)।

\n\n

Deployment (deployment.yaml)

\n

यह परिभाषित करता है कि कितनी रेप्लिका चलानी हैं, अपडेट नीति और कंटेनर इमेज।

\n
apiVersion: 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 का उपयोग करें या वर्जन टैग निर्दिष्ट करें।

\n\n

Service (service.yaml)

\n

यह क्लस्टर के अंदर (ClusterIP) या बाहर (NodePort/LoadBalancer) पॉड तक पहुंच प्रदान करता है।

\n
apiVersion: 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\n

3. क्लस्टर में डिप्लॉय और जांच

\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

                
                

ब्लॉग

पुस्तक अनुशंसाएँ