【问题标题】:Deploy a C++ application to the Google Cloud Platform Kubernetes engine将 C++ 应用程序部署到 Google Cloud Platform Kubernetes 引擎
【发布时间】:2018-08-27 07:47:13
【问题描述】:

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


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

我尝试了什么:

我尝试按照指南进行操作:Interactive Tutorial - Deploying an App,但是,我不明白如何将我的 C++ 应用程序作为可以部署的映像。

什么是 C++ 应用程序:

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

【问题讨论】:

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


【解决方案1】:

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 本身.您的应用程序应该以支持分而治之模式的方式创建,否则您可能会拥有三个节点,一个 Pod 在一个节点上运行,两个空闲以及您本可以避免的开销。

  • 如果您的 C++ 应用程序 POD 对字符串进行散列处理,并且单个请求可能会消耗节点的所有资源 Kubernetes 不会“吐出”初始工作负载,也不会为您创建更多的 PODS 在集群中调度它们! 当然你可以实现类似的东西,但它不是免费的,你可能需要修改你的 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.

【讨论】:

  • 真正深入地回答和回答我什至不知道自己有的问题! +1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-10
  • 2019-10-06
  • 1970-01-01
  • 2019-11-06
  • 1970-01-01
  • 2019-04-24
相关资源
最近更新 更多