Разверните приложение c ++ в облачном движке Google kubernetes

Насколько я понимаю, движок kubernetes предназначен для развертывания приложений, которые могут быть сбалансированы по нагрузке, например, для приложения, которое не отображает строку. Если pod-a находится в режиме высокой нагрузки, он будет выгружен в pod-b, поправьте меня, если я ошибаюсь, поскольку, если это неверно, мой следующий вопрос не будет иметь смысла.


После нескольких часов его изучения я не могу понять, как развернуть приложение c ++ в кластере kubernetes. Как бы я это сделал?

Что я пробовал:

Пытался следовать руководству: https://kubernetes.io/docs/tutorials/kubernetes-basics/deploy-interactive/, Тем не менее, я не мог понять, как я получу свое приложение на C ++ как образ, который можно развернуть.

Что такое приложение c ++:

На данный момент он передает TCP-трафик другому хосту, указанному клиентами HOSTNAME. Однако в значительной степени обратный прокси-сервер — это НЕ приложение HTTP.

3

Решение

Является ли Kubernetes правильным выбором?

Кубернетес действительно полезен чтобы сбалансировать рабочую нагрузку, обеспечить высокую доступность в случае сбоя в ускорении процессов тестирования и повысить безопасность при развертывании продукции с помощью различных стратегий и повысить безопасность за счет разделения.
Однако не все виды рабочих нагрузок могут использовать все функции, представленные Kubernetes..

  • Например, если ваше приложение построено таким образом, что ему требуется стабильное количество ОЗУ и ЦП, код также действительно стабилен и вам нужна только одна реплика, тогда, возможно, Kubernetes и контейнеры не лучший выбор (даже если вы можете отлично использовать их), и вы должны все реализовать на большом монолитном сервере / виртуальной машине.

    Но если вам нужно развернуть его на другом провайдере Cloud, он должен работать всего несколько часов в день, возможно, тогда он сможет использовать и эти функции. Если вы хотите добавить слой, убедитесь, что вам нужны функции, которые он представляет, в противном случае это будет просто накладные расходы.

Обратите внимание, что Kubernetes это не в состоянии разделить вашу рабочую нагрузку в одиночку, поэтому я не знаю, что вы подразумеваете под «Если pod-a находится на высокой нагрузке, он будет выгружен на pod-b«скорее всего, да, это возможно, но вы должны дать ему указание сделать это.

Kubernetes позаботится о том, чтобы запустить ваш POD, следя за тем, чтобы было запланировано на узлах, где достаточно памяти и ЦП согласно вашей спецификации, вы можете настроить процедуры автомасштабирования а также для поддержки периодов высокой нагрузки или масштабировать даже кластер сам. Ваше приложение должно было быть создано таким образом, чтобы поддерживать шаблон «разделяй и властвуй», иначе у вас, скорее всего, будет 3 узла: один модуль работает на одном узле, два простаивают и накладные расходы, которых вы могли бы избежать.

  • Если POD вашего приложения на C ++ не хэширует строки и один запрос может потреблять все ресурсы узла Kubernetes не будет «плевать» на начальную рабочую нагрузку и не создаст для вас больше PODS, планируя их по всему кластеру! Конечно, вы можете достичь чего-то подобного, но это не будет бесплатным, и вам, вероятно, придется изменить свой код C ++.

Конечно, вы можете воспользоваться Kubernetes, запустив свое приложение на нем довольно легко, но, возможно, вам придется что-то изменить в архитектуре, чтобы в полной мере воспользоваться этими функциями.


Разверните приложение C ++

Процесс развертывания приложения в Kubernetes является довольно стандартным: разработайте его локально, создайте образ Docker со всеми необходимыми библиотеками и компонентами, протестируйте его локально, отправьте в реестр, создайте развертывание в Kubernetes.

Допустим, у вас есть в локальной папке все ресурсы, необходимые для запуска вашего приложения и исполняемого файла. Создайте файл Docker

пример, изменить, чтобы реализовать ваше приложение, я привел его в качестве примера, чтобы показать синтаксис:

#Download base image ubuntu 16.04
FROM ubuntu:16.04

# Update Software repository
RUN apt-get update

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

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

# Enable php-fpm on 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]

Больше информация здесь.

3

Другие решения

Других решений пока нет …