परिचय: C++ और Kubernetes एक शक्तिशाली जोड़ी क्यों हैं
आधुनिक क्लाउड इंफ्रास्ट्रक्चर तेजी से माइक्रोसर्विस आर्किटेक्चर और कंटेनरीकरण पर आधारित हो रहा है। Kubernetes कंटेनर ऑर्केस्ट्रेशन के लिए डी-फैक्टो मानक बन गया है। हालांकि, कई डेवलपर्स गलती से मानते हैं कि Kubernetes केवल इंटरप्रेटेड भाषाओं (Python, JavaScript) या JVM के लिए है। वास्तव में, Kubernetes पर C++ एप्लिकेशन डिप्लॉय करना न केवल संभव है, बल्कि महत्वपूर्ण लाभ भी देता है: उच्च प्रदर्शन, न्यूनतम मेमोरी खपत और संसाधनों पर पूर्ण नियंत्रण।
इस गाइड में, हम देखेंगे कि C++ सर्वर को Docker इमेज में कैसे पैकेज करें, Kubernetes के लिए आवश्यक मेनिफेस्ट कैसे बनाएं और इसे क्लस्टर में कैसे चलाएं। आप सीखेंगे कि कॉन्फ़िगरेशन और सीक्रेट्स को कैसे हैंडल करें, और एप्लिकेशन के विश्वसनीय संचालन के लिए Health Checks को सही तरीके से कैसे कॉन्फ़िगर करें।
1. कंटेनरीकरण के लिए C++ एप्लिकेशन तैयार करना
Kubernetes के बारे में बात करने से पहले, C++ एप्लिकेशन को स्वयं तैयार करना होगा। उदाहरण के लिए, हम libmicrohttpd लाइब्रेरी पर आधारित एक सरल HTTP सर्वर लेंगे। यह सर्वर अनुरोधों का जवाब देगा और एनवायरनमेंट वेरिएबल्स से कॉन्फ़िगरेशन पढ़ेगा - यह 12-फैक्टर एप्लिकेशन के लिए मानक दृष्टिकोण है।
1.1. C++ में सरल HTTP सर्वर का कोड
हम main.cpp फ़ाइल बनाएंगे:
#include <iostream>#include <string>#include <microhttpd.h>#include <cstdlib>
static enum MHD_Result answer_to_connection(void *cls, struct MHD_Connection *connection, const char *url, const char *method, const char *version, const char *upload_data, size_t *upload_data_size, void **con_cls) { const char *page = "<html><body>Hello from C++ on Kubernetes!</body></html>"; struct MHD_Response *response = MHD_create_response_from_buffer(strlen(page), (void*)page, MHD_RESPMEM_PERSISTENT); int ret = MHD_queue_response(connection, MHD_HTTP_OK, response); MHD_destroy_response(response); return ret == MHD_YES ? MHD_OK : MHD_NO;}
int main() { const char* port_str = std::getenv("PORT"); unsigned int port = port_str ? std::stoul(port_str) : 8080;
std::cout << "Starting server on port " << port << std::endl; struct MHD_Daemon *daemon = MHD_start_daemon(MHD_USE_AUTO | MHD_USE_INTERNAL_POLLING_THREAD, port, nullptr, nullptr, &answer_to_connection, nullptr, MHD_OPTION_END); if (nullptr == daemon) { std::cerr << "Failed to start daemon" << std::endl; return 1; }
// अनंत प्रतीक्षा while (true) { sleep(1); }
MHD_stop_daemon(daemon); return 0;}यह कोड PORT एनवायरनमेंट वेरिएबल (डिफ़ॉल्ट मान 8080) से पोर्ट पढ़ता है और HTTP सर्वर शुरू करता है। ध्यान दें: हम एक अनंत लूप का उपयोग कर रहे हैं ताकि प्रक्रिया समाप्त न हो - यह कंटेनर में काम करने के लिए महत्वपूर्ण है।
1.2. एप्लिकेशन बिल्ड करना
बिल्ड करने के लिए हमें CMake की आवश्यकता होगी। हम CMakeLists.txt बनाएंगे:
cmake_minimum_required(VERSION 3.10)project(cpp-k8s-server)
find_package(libmicrohttpd REQUIRED)
add_executable(server main.cpp)target_link_libraries(server ${LIBMICROHTTPD_LIBRARIES})target_include_directories(server PRIVATE ${LIBMICROHTTPD_INCLUDE_DIRS})अब एप्लिकेशन कंटेनरीकरण के लिए तैयार है।
2. C++ एप्लिकेशन के लिए Docker इमेज बनाना
Kubernetes कंटेनरों के साथ काम करता है, इसलिए हमें एक Docker इमेज की आवश्यकता है। C के लिए