将C ++应用程序部署到Google Cloud Platform Kubernetes引擎

时间:2018-03-18 18:11:30

标签: c++ kubernetes google-cloud-platform dockerfile google-kubernetes-engine

据我所知,Kubernetes引擎用于部署可以进行负载平衡的应用程序,例如,使应用程序不会出现字符串。如果pod-a处于高负载状态,它将被卸载到pod-b。如果我在这里错了,请纠正我,因为如果这是错误的,我的下一个问题将没有意义。

在探索了几个小时之后,我似乎无法弄清楚如何将C ++应用程序部署到Kubernetes集群。我该怎么做?

我尝试了什么:

我尝试按照指南: Interactive Tutorial - Deploying an App ,但是,我无法理解如何将我的C ++应用程序作为可以部署的图像。

C ++应用程序是什么:

此时它将TCP流量代理到客户端HOSTNAME指定的另一个HOST。它几乎是一个反向代理,但是,这不是一个HTTP应用程序。

1 个答案:

答案 0 :(得分:5)

Kubernetes是正确的选择吗?

-

Kubernetes is really useful负载均衡工作负载,在无法加速测试流程的情况下提供高可用性,并通过不同策略提高生产推广期间的安全性,并通过隔离提高安全性。

但是,并非所有类型的工作负载都可以利用Kubernetes引入的所有功能

  • 例如,如果您的应用程序以这样的方式构建,它需要稳定的RAM和CPU,代码也非常稳定,您只需要一个副本,那么Kubernetes和容器可能不是最佳选择(即使你可以完美地使用它们,你也应该在一个巨大的单片服务器/虚拟机上实现所有东西。

但是,如果您需要将其部署在不同的云提供商上,并且每天只运行几个小时,那么它可能也可以使用这些功能。 如果您愿意添加图层,请确保您需要它引入的功能,否则它只是一个开销

请注意, Kubernetes无法单独拆分工作量。因此,我不知道你的意思是“如果pod-a处于高负荷状态,它将被卸载到pod-b ”可能是的,这是可能的,但你必须指示它做如此。

Kubernetes负责运行您的POD,确保已在节点上安排了足够的内存和CPU according to your specification,您也可以设置autoscaling procedures以支持高工作负载时段或者scale even the cluster本身。您的应用程序应该以支持分而治之模式的方式创建,否则您可能会有三个节点,一个节点在一个节点上运行,两个空闲,以及您可以避免的开销。

  • 如果您的C ++应用程序POD取消了字符串并且单个请求可能消耗节点的所有资源 Kubernetes将不会“吐出”初始工作负载,并且不会为您创建更多PODS在整个群集中调度它们! / strong>当然你可以实现类似的东西,但它不会免费提供,你可能需要修改你的C ++代码。

当然,您可以利用Kubernetes,在其上运行您的应用程序非常简单,但也许您必须修改架构中的某些内容才能充分利用这些功能。

部署C ++应用程序

在Kubernetes中部署应用程序的过程非常标准。在本地开发,使用您需要的所有库和组件创建Docker镜像,在本地测试,将其推送到注册表,然后在Kubernetes中创建部署。

假设您拥有在本地文件夹中运行应用程序和可执行文件所需的所有资源。创建Docker文件。

Example,修改以实现您的应用程序,我已将其作为示例报告显示语法:

# 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]

More information is here