簡體   English   中英

將C ++應用程序部署到Google Cloud Platform Kubernetes引擎

[英]Deploy a C++ application to the Google Cloud Platform Kubernetes engine

據我所知,Kubernetes引擎用於部署可以進行負載平衡的應用程序,例如,使應用程序不會出現字符串。 如果pod-a處於高負載狀態,它將被卸載到pod-b。 如果我在這里錯了,請糾正我,因為如果這是錯誤的,我的下一個問題將沒有意義。


在探索了幾個小時后,我似乎無法弄清楚如何將C ++應用程序部署到Kubernetes集群。 我該怎么辦?

我嘗試了什么:

我試着按照指南: 交互式教程 - 部署應用程序 ,然而,我無法理解如何將我的C ++應用程序作為可以部署的映像。

C ++應用程序是什么:

目前,它將TCP流量代理到客戶端HOSTNAME指定的另一個HOST。 它幾乎是一個反向代理,但是,這不是一個HTTP應用程序。

Kubernetes是正確的選擇嗎?

-

Kubernetes非常適用於負載平衡工作負載,在無法加速測試流程的情況下提供高可用性,以及通過不同策略提高生產期間的安全性並通過隔離提高安全性。

但是,並非所有類型的工作負載都可以利用Kubernetes引入的所有功能

  • 例如,如果您的應用程序以這樣的方式構建,它需要穩定的RAM和CPU,代碼也非常穩定,您只需要一個副本,那么Kubernetes和容器可能不是最佳選擇(即使您可以完美地使用它們,而你應該在一個巨大的單片服務器/虛擬機上實現所有功能。

但是,如果您需要將其部署在不同的雲提供商上,並且它應該每天運行幾個小時,那么它可能也可以使用這些功能。 如果您願意添加圖層,請確保您需要它引入的功能,否則它只是一個開銷

請注意, Kubernetes無法單獨分配您的工作負載 因此,我不知道你的意思是“ 如果pod-a處於高負載狀態,它將被卸載到pod-b ”可能是的,這是可能的,但你必須指示它這樣做。

Kubernetes負責運行您的POD,確保已根據您的規范在節點上安排了足夠的內存和CPU,您可以設置自動擴展程序以支持高工作負載期或擴展集群本身。 您的應用程序應該以支持分而治之模式的方式創建,否則您可能會有三個節點,一個節點在一個節點上運行,兩個空閑以及您可以避免的開銷。

  • 如果您的C ++應用程序POD不會消除字符串並且單個請求可能消耗節點的所有資源, Kubernetes將不會“吐出”初始工作負載,並且不會為您創建更多PODS在整個群集中調度它們! 當然你可以實現類似的東西,但它不會免費提供,你可能需要修改你的C ++代碼。

當然,您可以利用Kubernetes,在其上運行您的應用程序非常簡單,但也許您必須修改架構中的某些內容才能充分利用這些功能。


部署C ++應用程序

在Kubernetes中部署應用程序的過程非常標准。 在本地開發,使用您需要的所有庫和組件創建Docker鏡像,在本地測試,將其推送到注冊表,然后在Kubernetes中創建部署。

假設您擁有在本地文件夾中運行應用程序和可執行文件所需的所有資源。 創建Docker文件。

例如 ,修改以實現您的應用程序,我已將其作為示例報告以顯示語法:

# Download base image, Ubuntu 16.04 (Xenial Xerus)
FROM ubuntu:16.04

# Update software repository
RUN apt-get update

# Install nginx, php-fpm and supervisord from the Ubuntu repository
RUN apt-get install -y nginx php7.0-fpm supervisor

# Define the environment variable
ENV nginx_vhost /etc/nginx/sites-available/default
[...]

# Enable php-fpm on the nginx virtualhost configuration
COPY default ${nginx_vhost}
[...]
RUN chown -R www-data:www-data /var/www/html

# Volume configuration
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]

# Configure services and port
COPY start.sh /start.sh
CMD ["./start.sh"]
EXPOSE 80 443

建立運行:

export PROJECT_ID="$(gcloud config get-value project -q)"
docker build -t gcr.io/${PROJECT_ID}/hello-app:v1 .
gcloud docker -- push gcr.io/${PROJECT_ID}/hello-app:v1
kubectl run hello --image=gcr.io/${PROJECT_ID}/hello-app:v1 --port [port number if needed]

更多信息在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM