Рубрики
Uncategorized

Используйте Kubernetes для развертывания вашей программы Laravel

Автор оригинала: David Wong.

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…