Насколько я понимаю, движок kubernetes предназначен для развертывания приложений, которые могут быть сбалансированы по нагрузке, например, для приложения, которое не отображает строку. Если pod-a находится в режиме высокой нагрузки, он будет выгружен в pod-b, поправьте меня, если я ошибаюсь, поскольку, если это неверно, мой следующий вопрос не будет иметь смысла.
После нескольких часов его изучения я не могу понять, как развернуть приложение c ++ в кластере kubernetes. Как бы я это сделал?
Что я пробовал:
Пытался следовать руководству: https://kubernetes.io/docs/tutorials/kubernetes-basics/deploy-interactive/, Тем не менее, я не мог понять, как я получу свое приложение на C ++ как образ, который можно развернуть.
Что такое приложение c ++:
На данный момент он передает TCP-трафик другому хосту, указанному клиентами HOSTNAME. Однако в значительной степени обратный прокси-сервер — это НЕ приложение HTTP.
Кубернетес действительно полезен чтобы сбалансировать рабочую нагрузку, обеспечить высокую доступность в случае сбоя в ускорении процессов тестирования и повысить безопасность при развертывании продукции с помощью различных стратегий и повысить безопасность за счет разделения.
Однако не все виды рабочих нагрузок могут использовать все функции, представленные Kubernetes..
Например, если ваше приложение построено таким образом, что ему требуется стабильное количество ОЗУ и ЦП, код также действительно стабилен и вам нужна только одна реплика, тогда, возможно, Kubernetes и контейнеры не лучший выбор (даже если вы можете отлично использовать их), и вы должны все реализовать на большом монолитном сервере / виртуальной машине.
Но если вам нужно развернуть его на другом провайдере Cloud, он должен работать всего несколько часов в день, возможно, тогда он сможет использовать и эти функции. Если вы хотите добавить слой, убедитесь, что вам нужны функции, которые он представляет, в противном случае это будет просто накладные расходы.
Обратите внимание, что Kubernetes это не в состоянии разделить вашу рабочую нагрузку в одиночку, поэтому я не знаю, что вы подразумеваете под «Если pod-a находится на высокой нагрузке, он будет выгружен на pod-b«скорее всего, да, это возможно, но вы должны дать ему указание сделать это.
Kubernetes позаботится о том, чтобы запустить ваш POD, следя за тем, чтобы было запланировано на узлах, где достаточно памяти и ЦП согласно вашей спецификации, вы можете настроить процедуры автомасштабирования а также для поддержки периодов высокой нагрузки или масштабировать даже кластер сам. Ваше приложение должно было быть создано таким образом, чтобы поддерживать шаблон «разделяй и властвуй», иначе у вас, скорее всего, будет 3 узла: один модуль работает на одном узле, два простаивают и накладные расходы, которых вы могли бы избежать.
Конечно, вы можете воспользоваться Kubernetes, запустив свое приложение на нем довольно легко, но, возможно, вам придется что-то изменить в архитектуре, чтобы в полной мере воспользоваться этими функциями.
Процесс развертывания приложения в 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]
Больше информация здесь.
Других решений пока нет …