Laravel-отличный фреймворк для разработки PHP-приложений. Независимо от того, нужно ли вам создавать прототипы новых идей, разрабатывать MVP (Минимально возможный продукт) или выпускать зрелые корпоративные системы, Laravel может облегчить все задачи и рабочие процессы разработки.
Как обрабатывать развертывание приложений-это очень избирательный вопрос. Vagrant хорошо подходит для создания локальных сред, аналогичных удаленным серверам. Однако в производственной среде вам, вероятно, потребуется нечто большее, чем просто веб-узел и база данных. Вы можете предоставлять отдельные услуги для нескольких требований. Вам также необходимо иметь соответствующие механизмы для обеспечения того, чтобы приложение всегда работало в режиме онлайн и чтобы сервер мог эффективно балансировать нагрузку.
В этой статье я объясню, как создать простую среду приложений Laravel на Kubernetes.
Что такое Кубернетес? Зачем им пользоваться?
Kubernetes-это система с открытым исходным кодом, созданная Google для повышения эффективности управления контейнерными приложениями в кластерных средах. Некоторые называют это платформой для оркестровки контейнеров, и Kubernetes не единственный. Тем не менее, по сравнению с другими конкурентами, он пользуется высокой репутацией и продолжает набирать популярность, не говоря уже о том, что, как только вы привыкнете к нему, вы обнаружите, что он действительно прост в использовании.
Если вам все еще интересно, почему кто-то может счастливо играть с Кубернетесом, ответ прост. Kubernetes может упростить развертывание и управление большим количеством кластеров, необходимых для нескольких проектов.
Развертывание приложений Laravel в мини-кубе
Как я уже упоминал ранее, в этой статье я покажу вам, как развернуть простое приложение Laravel без состояния в Kubernetes. Я подробно расскажу о шагах, связанных с этим процессом, и объясню, почему необходимо выполнить операцию. Кроме того, я покажу вам, как быстро масштабировать приложения по горизонтали и использовать контроллер входа, чтобы сделать их доступными через определенное доменное имя или IP.
Вы можете запускать Kubernetes на нескольких облачных платформах, таких как Google Cloud Engine и Amazon Web Services. В этом примере вы запустите свою программу с помощью Minicube, инструмента, который упрощает локальное выполнение Kubernetes.
Как и Vagrant, Minicube-это просто виртуальная машина, включающая платформу выполнения Kubernetes и докер. Если вы используете реальные Kubernetes, вам необходимо развернуть приложение с помощью Docker и расширить платформу выполнения до трех узлов.
приложение
Я подготовил простую программу Laravel, которую вы можете клонировать с GitHub. Это просто совершенно новый установщик Laravel. Поэтому вы можете использовать демонстрационную программу в этом примере или самостоятельно создать новую программу Laravel. Если вы используете демонстрационную программу в этом примере, клонируйте ее в каталог проекта в соответствии со следующими командами.
cd /to/your/working/directory git clone [email protected]:learnk8s/laravel-kubernetes-demo.git .
Предпосылки
Для реализации этого примера вам необходимо установить следующее программное обеспечение в вашей локальной системе:
1) Докер
2) Кубектл
3) Миникуб
Если у вас возникнут проблемы с установкой вышеуказанного программного обеспечения в Windows, пожалуйста, обратитесь к вводному руководству Docker и Kubernetes в Windows 10, которое является практическим вводным руководством.
Зеркало Докера
Kubernetes развертывает контейнерные приложения, поэтому сначала вам нужно создать образ Docker для примера приложения. Поскольку в этом примере вы запускаете мини-куб локально, вы можете использовать только пример кода Dockerfile
Файл создает локальный образ докера.
FROM composer:1.6.5 as build WORKDIR /app COPY . /app RUN composer install
FROM php:7.1.8-apache EXPOSE 80 COPY --from=build /app /app COPY vhost.conf /etc/apache2/sites-available/000-default.conf RUN chown -R www-data:www-data /app \ && a2enmod rewrite
Файл Dockerfile
Документ состоит из двух частей:
- Первая часть расширяет зеркало PHP
composer
, поэтому вы можете устанавливать зависимости приложений. - Вторая часть создает зеркало, содержащее службы Apache, которые будут служить примером приложения.
Перед тестированием образа Docker вам необходимо использовать следующие команды для создания образа:
cd /to/your/project/directory docker build -t yourname/laravel-kubernetes-demo .
Затем запустите пример программы со следующими командами:
docker run -ti \ -p 8080:80 \ -e APP_KEY=base64:cUPmwHx4LXa4Z25HhzFiWCf7TlQmSqnt98pnuiHmzgY= \ laravel-kubernetes-demo
К образцу программы можно получить доступ через http://localhost:8080.
В этой установке контейнеры являются универсальными, и в то же время APP_KEY
Это не написано и не распространено.
Создание зеркал за минуту
cd /to/your/project/directory eval $(minikube docker-env) docker build -t yourname/laravel-kubernetes-demo .
Не забудьте выполнить приведенную выше команду eval. Чтобы создать образ в виртуальной машине, необходимо выполнить приведенную выше команду Eval. Вам нужно выполнить эту команду только один раз в текущем терминале.
Зеркало развертывания
Теперь, когда образ примера приложения создан и доступен в мини-кубе, вы можете продолжить развертывание следующего образа.
Я всегда убеждаюсь с самого начала kubectl
В правильном контексте. В этом случае контекстной средой является мини-куб. Вы можете быстро переключать контексты, используя следующие команды:
kubectl config use-context minikube
Затем вы можете развернуть образ контейнера:
kubectl run laravel-kubernetes-demo \ --image=yourname/laravel-kubernetes-demo \ --port=80 \ --image-pull-policy=IfNotPresent \ --env=APP_KEY=base64:cUPmwHx4LXa4Z25HhzFiWCf7TlQmSqnt98pnuiHmzgY=
Приведенный выше порядок указывает нам kubectl
Запустить нашу примерную программу из образа Docker. Первый параметр приведенной выше команды сообщает вам kubectl
Если зеркала существуют локально, не заходите в реестр (например, Docker Hub), чтобы извлечь их. Обратите внимание, что вам все равно нужно войти в Docker из-за этого kubectl
Чтобы проверить, обновлено ли зеркало.
С помощью следующей команды вы увидите, что модуль создан для примера программы:
kubectl get pods
Эта команда возвращает вывод, аналогичный следующему:
NAME READY STATUS RESTARTS AGE laravel-kubernetes-demo-7dbb9d6b48-q54wp 1/1 Running 0 18m
Вы также можете использовать графическую панель управления Mini cubes для мониторинга кластеров. Графический интерфейс также помогает визуализировать большинство часто обсуждаемых показателей. Чтобы просмотреть панель управления, выполните подчиненные команды:
minikube dashboard
Или получите URL-адрес панели управления:
minikube dashboard --url=true
Предоставление услуги
До сих пор вы создали развертывание, в котором выполняется контейнер с образцом программы. Модуль, запущенный в кластере, имеет динамический IP-адрес. Если вы используете IP-адрес и маршрутизируете трафик напрямую, вы можете обновлять таблицу маршрутизации каждый раз при перезапуске модуля. Фактически, при каждой перезагрузке развертывания или контейнера с модулем связывается новый IP-адрес. Чтобы избежать необходимости вручную управлять IP-адресами, вам необходимо использовать сервисы. Служба действует как балансировщик нагрузки в коллекции модулей. Таким образом, хотя IP-адрес модуля меняется, служба всегда указывает на этот модуль. В то же время, поскольку сервис всегда имеет фиксированный IP-адрес, вам не нужно ничего обновлять вручную.
Вы можете создать службу, используя следующую команду:
kubectl expose deployment laravel-kubernetes-demo --type=NodePort --port=80
Если все пройдет хорошо, вы увидите сообщение с подтверждением, похожее на следующее:
service "laravel-kubernetes-demo" exposed
Выполните следующие команды:
kubectl get services
Приведенная выше команда показывает список действующих служб. Вы также можете просмотреть запущенные службы через меню навигации “Службы” на панели управления. Очевидно, что более интересным способом проверки доступности развертывания и обслуживания является запуск примеров программ в браузерах. ?
Чтобы получить URL-адрес приложения (службы), вы можете использовать следующую команду:
minikube service --url=true laravel-kubernetes-demo
Приведенные выше команды выводят IP-адреса и номера портов, такие как:
http://192.168.99.101:31399
Или запустите программу прямо в браузере:
minikube service laravel-kubernetes-demo
Не хотите пропустить следующую историю, эксперимент или советы. Если вы цените эту статью, пожалуйста, с нетерпением ждите новых статей. Надеемся, что новый контент будет отправлен непосредственно на ваш адрес электронной почты, и ваш опыт в Kubernetes будет расширен. Подпишитесь сейчас
расширять
Вы успешно развернули приложение в Kubernetes. Это так волнующе. Но какой смысл во всем этом? Вы просто выполняете развертывание в модуле и предоставляете веб-службы на узле. Давайте развернем еще два экземпляра текущего приложения.
Теперь вы должны понять, где вы находитесь. Выполните следующую команду, чтобы получить список желаемых и существующих модулей:
kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE laravel-kubernetes-demo 1 1 1 1 57m
В выводе выше каждый элемент равен “1”. Тебе нужно три Стручка. Поэтому мы расширяем его, выполняя следующие команды:
kubectl scale --replicas=3 deployment/laravel-kubernetes-demo deployment "laravel-kubernetes-demo" scaled
Выполнение команды завершено. Вы скопировали первый модуль в два других, и система предоставляет вам три модуля для запуска службы. внедрить получить развертывание
Все это можно протестировать:
kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE laravel-kubernetes-demo 3 3 3 3 59m
Вы также можете просмотреть содержимое на странице модулей или на странице службы в панели управления.
Теперь вы запускаете три экземпляра приложения, используя три модуля.
Представьте себе этот сценарий, в котором ваше приложение становится все более и более популярным. Тысячи посетителей используют вашу веб-страницу или программное обеспечение. В прошлом вы, возможно, были слишком заняты написанием сценариев, чтобы создавать больше экземпляров. Но в Kubernetes вы можете быстро развернуть несколько экземпляров:
kubectl scale --replicas=10 deployment/laravel-kubernetes-demo deployment "laravel-kubernetes-demo" scaled
Посмотрите, как легко расширить свой веб-сайт с помощью Kubernetes.
Вход
Вы реализовали хорошую функциональность, развернули приложения и расширили их. Когда вы указываете на IP-адрес кластера и номер порта узла, вы можете увидеть программу, запущенную в браузере. Теперь вы увидите, что если вы получите доступ к приложению по указанному URL-адресу, оно будет таким же, как и раньше, развернуто в облаке.
Чтобы использовать URL-адреса в Kubernetes, вам нужен вход. Вход-это набор правил, разрешающих входящие подключения к кластеру Kubernetes. Вход необходим, потому что в Kubernetes ресурсы, такие как Pod, имеют только IP-адреса, которые могут быть маршрутизированы внутри и внутри кластера. То есть они не могут входить и выходить из внешней среды.
Я включил исходный код демонстрационного приложения со следующим содержанием. вход.yaml
Документы:
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: laravel-kubernetes-demo-ingress annotations: ingress.kubernetes.io/rewrite-target: / spec: backend: serviceName: default-http-server servicePort: 80 rules: - host: laravel-kubernetes.demo - http: paths: - path: / backend: serviceName: laravel-kubernetes-demo servicePort: 80
В базовом содержимом ожидаемого файла ресурсов Kubernetes он определяет набор правил маршрутизации входящего трафика. ларавель-кубернетес.демо
URL-адрес указывает на службу, которую запускает приложение, точно так же, как он был ранее отмечен на порту 8181. laravel-кубернетес-демо
Вот и все.
Нет интеграции Вход
Ресурсы, Вход
Контроллеры недоступны, поэтому вам необходимо создать новый контроллер или использовать существующий. В этом руководстве используется Вход Nginx
Контроллер управляет ресурсами маршрутизации. Mini cube (v0.14 и выше)
С настройками Nginx, прикрепленными в качестве плагинов, вам необходимо вручную включить плагин:
minikube addons enable ingress
Будьте осторожны, Minicube
Загрузка и установка Nginx в качестве Входящего
Контроллера маршрутизации может занять несколько минут.
Включите Вход
После плагина вы можете создать его таким образом Вход
Пример:
kubectl create -f path-to-your-ingress-file.yaml
Вы можете проверить и получить его, выполнив следующие команды Вход
Информация о примере:
kubectl describe ing laravel-kubernetes-demo-ingress
Выведите некоторую информацию, связанную с конфигурацией:
Name: laravel-kubernetes-demo-ingress Namespace: default Address: 192.168.99.101 Default backend: default-http-server:80 () Rules: Host Path Backends ---- ---- -------- * / laravel-kubernetes-demo:8181 (172.17.0.6:8181) Annotations: rewrite-target: / Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal CREATE 39s nginx-ingress-controller Ingress default/laravel-kubernetes-demo-ingress Normal UPDATE 20s nginx-ingress-controller Ingress default/laravel-kubernetes-demo-ingress
Теперь вы можете передать мини-куб
приложение для доступа к IP-адресу, как показано выше. Для доступа к веб-приложению через URL-адрес https://laravel-kubernetes.demo, вам нужно добавить запись синтаксического анализа в файл hosts.
заключение
Я надеюсь, что эта статья поможет вам ознакомиться с ней. Кубернетес
Развертывание и строительство. По моему собственному опыту, если вы часто строите подобные среды, это сделает ваш процесс строительства более удобным и интересным.
От сообщества разработчиков PHP/Laravel https://laravel-China.org/top…