परिचय: C++ और Kubernetes — एक कारगर संयोजन क्यों है
\n\nकई डेवलपर्स गलती से मानते हैं कि Kubernetes (K8s) केवल Python, JavaScript या Go जैसी इंटरप्रेटेड भाषाओं के लिए है। हकीकत में, Kubernetes पर C++ डिप्लॉय न केवल संभव है, बल्कि हाई-लोड सिस्टम के लिए बेहद प्रभावी भी है, जहां परफॉरमेंस, कम मेमोरी खपत और अनुमानित रिस्पॉन्स टाइम महत्वपूर्ण होते हैं। C++ बैकएंड सर्विसेज, डेटा प्रोसेसर, गेम सर्वर और नेटवर्क एप्लिकेशन बनाने के लिए एकदम सही है, और Kubernetes उनके ऑर्केस्ट्रेशन, स्केलिंग और प्रबंधन के लिए एक सुविधाजनक प्लेटफॉर्म प्रदान करता है।
\n\nइस व्यावहारिक गाइड में, हम कदम-दर-कदम सीखेंगे कि C++ एप्लिकेशन को Docker इमेज में कैसे बनाया जाए, Kubernetes के लिए सही मैनिफेस्ट कैसे लिखा जाए, और इसे क्लस्टर में कैसे डिप्लॉय किया जाए। आप देखेंगे कि अगर बिल्ड प्रक्रिया सही तरीके से सेट की जाए, तो यह प्रक्रिया अन्य भाषाओं के एप्लिकेशन डिप्लॉय करने से लगभग अलग नहीं है।
\n\n1. C++ एप्लिकेशन तैयार करना और Dockerfile लिखना
\n\nशुरुआत में हमें एक सरल लेकिन काम करने वाला C++ एप्लिकेशन चाहिए। मान लीजिए यह एक HTTP सर्वर है जो एक पोर्ट पर सुनता है और "Hello from C++ on K8s!" लौटाता है। वास्तविक प्रोजेक्ट्स में यह Crow, Pistache या Drogon पर आधारित REST API हो सकता है।
\n\nmain.cpp फ़ाइल का उदाहरण:
\n#include <iostream>\n#include <string>\n#include <cstring>\n#include <sys/socket.h>\n#include <netinet/in.h>\n#include <unistd.h>\n\nint main() {\n int server_fd = socket(AF_INET, SOCK_STREAM, 0);\n struct sockaddr_in address;\n int opt = 1;\n setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));\n address.sin_family = AF_INET;\n address.sin_addr.s_addr = INADDR_ANY;\n address.sin_port = htons(8080);\n bind(server_fd, (struct sockaddr *)&address, sizeof(address));\n listen(server_fd, 3);\n\n std::cout << "Server started on port 8080" << std::endl;\n\n while (true) {\n int new_socket = accept(server_fd, nullptr, nullptr);\n const char *response = "HTTP/1.1 200 OK\\nContent-Type: text/plain\\n\\nHello from C++ on K8s!\\n";\n send(new_socket, response, strlen(response), 0);\n close(new_socket);\n }\n return 0;\n}\n\nअब Dockerfile लिखते हैं। मुख्य बिंदु मल्टी-स्टेज बिल्ड (multi-stage build) का उपयोग करना है। इससे फाइनल इमेज छोटी और सुरक्षित रहती है।
\n\n# बिल्ड स्टेज\nFROM gcc:latest AS builder\nWORKDIR /app\nCOPY main.cpp .\nRUN g++ -static -o server main.cpp\n\n# फाइनल इमेज (न्यूनतम)\nFROM alpine:latest\nWORKDIR /app\n# केवल कंपाइल किया गया बाइनरी कॉपी करें\nCOPY --from=builder /app/server .\nEXPOSE 8080\nCMD ["./server"]\n\nइमेज बनाएं और रजिस्ट्री (जैसे Docker Hub) में पुश करें:
\ndocker build -t yourusername/cpp-server:latest .\ndocker push yourusername/cpp-server:latest\n\n2. Kubernetes के लिए मैनिफेस्ट लिखना
\n\nKubernetes में C++ एप्लिकेशन डिप्लॉय करने के लिए हमें कम से कम दो ऑब्जेक्ट्स चाहिए: Deployment (Pod को मैनेज करने के लिए) और Service (एप्लिकेशन तक पहुंच सुनिश्चित करने के लिए)।
\n\nDeployment मैनिफेस्ट (deployment.yaml)
\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: cpp-server-deployment\nspec:\n replicas: 2\n selector:\n matchLabels:\n app: cpp-server\n template:\n metadata:\n labels:\n app: cpp-server\n spec:\n containers:\n - name: cpp-server\n image: yourusername/cpp-server:latest\n ports:\n - containerPort: 8080\n resources:\n requests:\n memory: "64Mi"\n cpu: "100m"\n limits:\n memory: "128Mi"\n cpu: "200m"\n livenessProbe:\n tcpSocket:\n port: 8080\n initialDelaySeconds: 5\n per