На емкость, гибкость, масштабируемость и устойчивость ИТ-инфраструктуры влияет множество факторов. На некоторые из них компания и, в частности, команда разработки может влиять: наращивать парк серверов, увеличивать процент покрытия тестами кодовой базы и мониторинга систем, взять на работу специалистов с высокой квалификацией.
Однако подобно алхимическому принципу «Если где-то прибыло, значит где-то убыло» усиление одних факторов влечет за собой ослабление других. С ростом компании становится всё сложнее и сложнее равномерно развивать ИТ-инфраструктуру. Поэтому мы построили собственное облако на базе технологии оркестрации контейнеризированных приложений Kubernetes, чтобы обеспечить своей инфраструктуре сбалансированную основу для разработки и поддержки продуктов, а также создать прочный фундамент для дальнейшего масштабирования бизнеса.
Как была построена работа
Вся наша инфраструктура была развернута локально в собственной серверной. На одном сервере созданы ВМ, где размещаются по принципу bare metal продукты и инфраструктурные элементы компании: прокси-сервер, 1С, CRM, базы данных, репозитории, сервисы и так далее. Всё работало исправно, но управлять инфраструктурой приходилось фактически в ручном режиме, поиск неисправностей и их устранение могли занимать до двух дней. А отсутствие централизованных узлов управления сильно затрудняло мониторинг систем и уменьшало оперативность работы команды в целом.
Что мы сделали
Мы закупили и настроили дополнительные вычислительные мощности в виде новых серверов, на которых развернули необходимые элементы кластера: master- и worker-ноды, отказоустойчивый gateway для поступающего извне к кластеру трафика, объединили дисковое пространство серверов в единое сетевое хранилище.
Команде предоставили в распоряжение увеличенный парк серверов, установили и настроили систему виртуализации. После этого спроектировали схему кластера: на каких ВМ и в каком количестве должны располагаться его элементы. В первую очередь развернули важнейшие инфраструктурные компоненты новой системы:
- запустили центр управления кластером и мониторинг;
- кодовую базу переместили с внешнего ресурса на развернутый в кластере собственный репозиторий;
- для хранения Docker-образов установили и настроили локальный Docker-репозиторий.
Также установили и настроили системы логирования и сбора метрик, а пространство кластера разбили на регионы по продуктовому признаку. Перед запуском кластера в эксплуатацию между продуктовым ландшафтом и репозиторием исходных кодов установили и настроили CI/CD-магистраль, а дисковое пространство серверов объединили в единое сетевое хранилище под управлением Ceph.
Что это дало разработке
Одним из основных преимуществ использования Kubernetes стала возможность автоматизировать развертывание и управление нашими приложениями. Мы создали шаблоны и скрипты для развертывания приложений в Kubernetes-кластере, что позволило избежать ручных операций и ускорить процесс публикации новых версий.
Еще одно преимущество — возможность легкого масштабирования инфраструктуры. Когда появляется потребность в увеличении ресурсов, мы можем легко добавлять новые узлы в кластер и масштабировать приложения по мере необходимости. Они стали значительно более устойчивыми к нагрузке, так как Kubernetes автоматически распределяет нагрузку между узлами.
Кроме того, Kubernetes предоставил нам возможность управлять состоянием приложений. Мы использовали функцию Persistent Volumes, чтобы хранить данные в постоянном хранилище, и обеспечили доступность данных даже при перезапуске приложений или сбоях в узлах.
Мы также используем встроенные средства мониторинга и логирования Kubernetes, чтобы отслеживать состояние приложений и быстро реагировать на проблемы. Настроили алерты, чтобы получать уведомления о возможных сбоях или превышении лимитов ресурсов, и можем быстро реагировать на них.
Перенос инфраструктуры в Kubernetes был большим вызовом для нашей команды разработки, но он помог создать мощную, автоматизированную и масштабируемую платформу, которая позволяет эффективно развертывать и управлять нашими продуктами.
Кроме перечисленных преимуществ, перенос инфраструктуры в Kubernetes также помог нам улучшить безопасность и обеспечить более надежную работу приложений.
Мы используем функции Kubernetes, такие как Namespaces и RBAC (Role-Based Access Control), чтобы создать изолированные среды для каждого приложения и ограничить доступ только соответствующим пользователям и сервисам. Это сделало нашу инфраструктуру более защищенной от несанкционированного доступа и атак.
Кроме того, мы внедрили механизмы контейнеризации с помощью Docker и сделали приложения более переносимыми и изолированными. Каждое из них было упаковано в контейнер вместе со всеми зависимостями, что обеспечило нам возможность запускать их в любой среде, поддерживающей контейнеризацию Docker.
Что это дало бизнесу
Переход на Kubernetes также позволил существенно снизить затраты на обслуживание и поддержку инфраструктуры. До внедрения Kubernetes у нас было несколько физических серверов, каждый из которых требовал постоянного обслуживания и мониторинга. После перехода мы смогли сократить количество серверов и автоматизировать многие рутинные задачи, что сэкономило нам время и ресурсы.
Также стоит отметить, что перенос инфраструктуры в Kubernetes повысил гибкость нашей команды разработки и ускорил процесс разработки и развертывания новых функций и обновлений. Мы стали использовать методологии разработки, такие как Continuous Integration и Continuous Deployment, которые позволяют быстро и безопасно развертывать изменения в инфраструктуре и приложениях.
Мы ощутили значительный рост эффективности, стабильности и масштабируемости нашей инфраструктуры, что в свою очередь позволяет нам успешно развивать и расширять наш бизнес.