Кто идёт на Kuber Conf by AOT 4 декабря?
Первая некоммерческая K8s-конференция в Москве — отличный повод встретиться и обсудить:
🟣 Как на самом деле работает CNI chaining в продакшене
🟣 Как безопасно развернуть Gatekeeper для k8s-in-k8s
🟣 Поддержку Kubernetes в Vitastor
🟣 Опыт построения Managed Kubernetes
На ивенте будут топовые инженеры и архитекторы — будет о чём поговорить.
Конференция проходит под эгидой Ассоциации облачно-ориентированных технологий (АОТ), которую создают Флант, VK Cloud и Yandex Cloud.
Встречаемся?
Программа и билеты: https://aot-kuberconf.ru/?utm_source=telegram&utm_medium=referral_cpc&utm_campaign=i_DevOps
Реклама Садовская.Е.О
ИНН:9710066394 Erid:2VtzqxdcnsS
Первая некоммерческая K8s-конференция в Москве — отличный повод встретиться и обсудить:
🟣 Как на самом деле работает CNI chaining в продакшене
🟣 Как безопасно развернуть Gatekeeper для k8s-in-k8s
🟣 Поддержку Kubernetes в Vitastor
🟣 Опыт построения Managed Kubernetes
На ивенте будут топовые инженеры и архитекторы — будет о чём поговорить.
Конференция проходит под эгидой Ассоциации облачно-ориентированных технологий (АОТ), которую создают Флант, VK Cloud и Yandex Cloud.
Встречаемся?
Программа и билеты: https://aot-kuberconf.ru/?utm_source=telegram&utm_medium=referral_cpc&utm_campaign=i_DevOps
Реклама Садовская.Е.О
ИНН:9710066394 Erid:2VtzqxdcnsS
🔥2👍1
Платформа с открытым исходным кодом Kubefirst
Это полностью автоматизированная и операционная платформа с открытым исходным кодом, которая включает в себя некоторые из самых популярных инструментов с открытым исходным кодом, доступных в пространстве Kubernetes, и все они работают вместе из одной команды.
Мы поддерживаем локальные облака, облака AWS и Civo. Запустив наши команды cli в пустой среде, вы получите экосистему облачного управления и доставки приложений GitOps с автоматизированными рабочими процессами Terraform, управлением секретами Vault, интеграцией GitLab или GitHub с Argo, а также демонстрационными приложениями, демонстрирующими, как все это работает вместе.
Документация https://docs.kubefirst.io/
https://github.com/kubefirst/kubefirst
📲 Мы в MAX
#devops #девопс
Подпишись 👉@i_DevOps
Это полностью автоматизированная и операционная платформа с открытым исходным кодом, которая включает в себя некоторые из самых популярных инструментов с открытым исходным кодом, доступных в пространстве Kubernetes, и все они работают вместе из одной команды.
Мы поддерживаем локальные облака, облака AWS и Civo. Запустив наши команды cli в пустой среде, вы получите экосистему облачного управления и доставки приложений GitOps с автоматизированными рабочими процессами Terraform, управлением секретами Vault, интеграцией GitLab или GitHub с Argo, а также демонстрационными приложениями, демонстрирующими, как все это работает вместе.
Документация https://docs.kubefirst.io/
https://github.com/kubefirst/kubefirst
#devops #девопс
Подпишись 👉@i_DevOps
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Запуск проекта в Kubernetes за 60 минут: инструменты, GitLab, Terraform
Привет, меня зовут Илья Нырков, я архитектор в VK Cloud. В своей работе встречаюсь с желанием партнеров (это и крупный энтерпрайз, и различные стартапы) использовать Kubernetes, но их останавливает сложность поднятия, конфигурирования кластера, деплоя в нём приложений и построения CI/CD-процессов вокруг него. Я постараюсь показать на практическом примере, который вы можете повторить сами, как развернуть за сравнительно небольшое время полноценный CI/CD с рабочим приложением, доступным для внешних пользователей.
https://habr.com/ru/companies/vk/articles/782310/
📲 Мы в MAX
#devops #девопс
Подпишись 👉@i_DevOps
Привет, меня зовут Илья Нырков, я архитектор в VK Cloud. В своей работе встречаюсь с желанием партнеров (это и крупный энтерпрайз, и различные стартапы) использовать Kubernetes, но их останавливает сложность поднятия, конфигурирования кластера, деплоя в нём приложений и построения CI/CD-процессов вокруг него. Я постараюсь показать на практическом примере, который вы можете повторить сами, как развернуть за сравнительно небольшое время полноценный CI/CD с рабочим приложением, доступным для внешних пользователей.
https://habr.com/ru/companies/vk/articles/782310/
#devops #девопс
Подпишись 👉@i_DevOps
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍2
systemd: как писать юниты с элегантной перезагрузкой
Разработка системы с элегантным завершением работы может оказаться той ещё пляской с бубном. В идеальном мире каждый сервис управлялся бы юнитом systemd. ExecStart запускала бы процесс, обрабатывающий SIGTERM, а ExecStop оповещало бы процесс и осуществляло блокировку, которая бы корректно завершала процесс и его ресурсы.
Однако многие программы завершаются некорректно, а то и вовсе сбивают все настройки при закрытии. В этой статье мы рассмотрим поведение systemd при завершении работы и методы написания юнитов systemd для выборочной очистки (custom cleanup) перед закрытием.
https://www.psdn.io/posts/systemd-shutdown-unit/
📲 Мы в MAX
#devops #девопс
Подпишись 👉@i_DevOps
Разработка системы с элегантным завершением работы может оказаться той ещё пляской с бубном. В идеальном мире каждый сервис управлялся бы юнитом systemd. ExecStart запускала бы процесс, обрабатывающий SIGTERM, а ExecStop оповещало бы процесс и осуществляло блокировку, которая бы корректно завершала процесс и его ресурсы.
Однако многие программы завершаются некорректно, а то и вовсе сбивают все настройки при закрытии. В этой статье мы рассмотрим поведение systemd при завершении работы и методы написания юнитов systemd для выборочной очистки (custom cleanup) перед закрытием.
https://www.psdn.io/posts/systemd-shutdown-unit/
#devops #девопс
Подпишись 👉@i_DevOps
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1
💡Kubernetes и kernel panic: опыт Netflix
В статье описывается, как платформа контейнеров Titus справляется с проблемой "осиротевших" pod'ов, возникающих из-за сбоев ядра Linux (kernel panic). Такие pod'ы не завершаются корректно, что особенно критично для batch-задач, требующих точного кода завершения.
Для решения этой проблемы Netflix внедрил механизм аннотаций
Такой подход повышает наблюдаемость и надежность платформы, предоставляя пользователям информацию о причинах сбоев и позволяя быстрее реагировать на проблемы.
https://netflixtechblog.com/kubernetes-and-kernel-panics-ed620b9c6225
📲 Мы в MAX
#devops #девопс
Подпишись 👉@i_DevOps
В статье описывается, как платформа контейнеров Titus справляется с проблемой "осиротевших" pod'ов, возникающих из-за сбоев ядра Linux (kernel panic). Такие pod'ы не завершаются корректно, что особенно критично для batch-задач, требующих точного кода завершения.
Для решения этой проблемы Netflix внедрил механизм аннотаций
pod-termination-reason, позволяющий фиксировать причину завершения pod'а. При возникновении kernel panic используется модуль netconsole, который отправляет UDP-пакет с последним сообщением ядра перед сбоем. Специальный контроллер Kubernetes перехватывает эти пакеты, идентифицирует соответствующий узел и связанные с ним pod'ы, аннотирует их с указанием причины сбоя и удаляет, обеспечивая прозрачность и оперативность в обработке подобных ситуаций.Такой подход повышает наблюдаемость и надежность платформы, предоставляя пользователям информацию о причинах сбоев и позволяя быстрее реагировать на проблемы.
https://netflixtechblog.com/kubernetes-and-kernel-panics-ed620b9c6225
#devops #девопс
Подпишись 👉@i_DevOps
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Задачи по ML и аналитике 🤝 GPU в облаке по цене от 29 ₽/час
Арендуйте мощные серверы с видеокартами в облаке Selectel и ускорьте выполнение сложных задач.
Почему Selectel:
• Более 10 моделей видеокарт в наличии — от GTX 1080 до профессиональных А100 (40 и 80 ГБ).
• Гибкость и масштабируемость: мгновенное масштабирование под растущие нагрузки, стандартные и индивидуальные конфигурации.
• Безопасное хранение и обработка данных в соответствии с российскими и международными стандартами
• Возможность сократить расходы на GPU до 75% благодаря почасовой оплате, прерываемым ВМ и функции "заморозка".
Разверните ваш проект на облачных серверах с GPU в Selectel: https://slc.tl/hlf85
Быстро и выгодно
Реклама. АО "Селектел". erid:2W5zFJvm9zg
Арендуйте мощные серверы с видеокартами в облаке Selectel и ускорьте выполнение сложных задач.
Почему Selectel:
• Более 10 моделей видеокарт в наличии — от GTX 1080 до профессиональных А100 (40 и 80 ГБ).
• Гибкость и масштабируемость: мгновенное масштабирование под растущие нагрузки, стандартные и индивидуальные конфигурации.
• Безопасное хранение и обработка данных в соответствии с российскими и международными стандартами
• Возможность сократить расходы на GPU до 75% благодаря почасовой оплате, прерываемым ВМ и функции "заморозка".
Разверните ваш проект на облачных серверах с GPU в Selectel: https://slc.tl/hlf85
Быстро и выгодно
Реклама. АО "Селектел". erid:2W5zFJvm9zg
❤1👍1
Типичные проблемы с Docker и как их решать
Docker прочно вошел в нашу жизнь, став стандартом де-факто для контейнеризации приложений. Он обещает среду «работает на моей машине — будет работать везде», и в большинстве случаев так и есть. Но рано или поздно каждый разработчик или DevOps-инженер сталкивается с ситуацией, когда эта магия дает сбой. Контейнер не запускается, приложение не видит друг друга, а диск сервера таинственным образом переполняется.
В этой статье мы не будем поверхностно пробегать по списку команд. Мы погрузимся в три самые частые и раздражающие категории проблем Docker: нехватку места, конфликты прав доступа и сетевые коллизии. Мы разберемся в причинах их возникновения и выработаем системный подход к решению.
https://habr.com/ru/companies/timeweb/articles/965454/
📲 Мы в MAX
#devops #девопс
Подпишись 👉@i_DevOps
Docker прочно вошел в нашу жизнь, став стандартом де-факто для контейнеризации приложений. Он обещает среду «работает на моей машине — будет работать везде», и в большинстве случаев так и есть. Но рано или поздно каждый разработчик или DevOps-инженер сталкивается с ситуацией, когда эта магия дает сбой. Контейнер не запускается, приложение не видит друг друга, а диск сервера таинственным образом переполняется.
В этой статье мы не будем поверхностно пробегать по списку команд. Мы погрузимся в три самые частые и раздражающие категории проблем Docker: нехватку места, конфликты прав доступа и сетевые коллизии. Мы разберемся в причинах их возникновения и выработаем системный подход к решению.
https://habr.com/ru/companies/timeweb/articles/965454/
#devops #девопс
Подпишись 👉@i_DevOps
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Docker для начинающих: что это такое и как пользоваться
Статей про Docker много не бывает.
В этом материале мы разберём базу: что такое Docker, как он работает и зачем нужен, а затем пошагово пройдём путь от установки до запуска первого контейнера.
https://habr.com/ru/companies/netologyru/articles/967546/
📲 Мы в MAX
#devops #девопс
Подпишись 👉@i_DevOps
Статей про Docker много не бывает.
В этом материале мы разберём базу: что такое Docker, как он работает и зачем нужен, а затем пошагово пройдём путь от установки до запуска первого контейнера.
https://habr.com/ru/companies/netologyru/articles/967546/
#devops #девопс
Подпишись 👉@i_DevOps
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
K8s ASA: Интерфейс хранения данных
Как и большинство серверов API, одной из основных функций сервера API Kubernetes, если не главной, является получение данных, их хранение и последующее возвращение по запросу. Сегодня мы сосредоточимся на том, как сервер API хранит данные.
https://danielmangum.com/posts/k8s-asa-the-storage-interface/
📲 Мы в MAX
#devops #девопс
Подпишись 👉@i_DevOps
Как и большинство серверов API, одной из основных функций сервера API Kubernetes, если не главной, является получение данных, их хранение и последующее возвращение по запросу. Сегодня мы сосредоточимся на том, как сервер API хранит данные.
https://danielmangum.com/posts/k8s-asa-the-storage-interface/
#devops #девопс
Подпишись 👉@i_DevOps
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍2
Как я уменьшил размер образа docker на 40%
Ежедневно по работе я сталкиваюсь с Dockerfile, написал несколько из них самостоятельно, создавал контейнеры и всё такое. Но я никогда не публиковал их в реестре docker hub. Мне хотелось создать ugit — инструмент для отмены команд git (написанный в виде шелл‑скрипта), который бы могли использовать люди, не любящие устанавливать случайные шелл‑скрипты из Интернета.
Да‑да, знаю. НАДО ПЕРЕПИСАТЬ ЕГО НА GO/RUST/ЕЩЁ КАКОМ‑ТО ВОЛШЕБНОМ ЯЗЫКЕ. Сейчас скрипт состоит из пятисот с лишним строк Bash, поэтому я перепишу его на другом языке только под страхом смертной казни. Кроме того, в ugit уже есть практически все функции (осталось реализовать отмену лишь небольшого количества команд, используемых не так часто).
В этой статье я расскажу о том, как написал официальный Dockerfile для ugit (шелл‑скрипта) и снизил размер образа почти на 40% (с 31,4 МБ до 17,6 МБ), выполняя пошаговые попытки по инструкции. Надеюсь, это замотивирует других любителей шелла тоже публиковать свои скрипты в виде образов docker!
https://habr.com/ru/articles/791426/
original https://bhupesh.me/publishing-my-first-ever-dockerfile-optimization-ugit/
📲 Мы в MAX
#devops #девопс
Подпишись 👉@i_DevOps
Ежедневно по работе я сталкиваюсь с Dockerfile, написал несколько из них самостоятельно, создавал контейнеры и всё такое. Но я никогда не публиковал их в реестре docker hub. Мне хотелось создать ugit — инструмент для отмены команд git (написанный в виде шелл‑скрипта), который бы могли использовать люди, не любящие устанавливать случайные шелл‑скрипты из Интернета.
Да‑да, знаю. НАДО ПЕРЕПИСАТЬ ЕГО НА GO/RUST/ЕЩЁ КАКОМ‑ТО ВОЛШЕБНОМ ЯЗЫКЕ. Сейчас скрипт состоит из пятисот с лишним строк Bash, поэтому я перепишу его на другом языке только под страхом смертной казни. Кроме того, в ugit уже есть практически все функции (осталось реализовать отмену лишь небольшого количества команд, используемых не так часто).
В этой статье я расскажу о том, как написал официальный Dockerfile для ugit (шелл‑скрипта) и снизил размер образа почти на 40% (с 31,4 МБ до 17,6 МБ), выполняя пошаговые попытки по инструкции. Надеюсь, это замотивирует других любителей шелла тоже публиковать свои скрипты в виде образов docker!
https://habr.com/ru/articles/791426/
original https://bhupesh.me/publishing-my-first-ever-dockerfile-optimization-ugit/
#devops #девопс
Подпишись 👉@i_DevOps
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
tofuenv — это лёгкий и удобный инструмент для управления виртуальными окружениями Python. Он создан с акцентом на минимализм и простоту использования, чтобы разработчики могли быстро создавать и переключаться между окружениями.
Основные возможности:
- Упрощённое создание и активация виртуальных окружений.
- Лёгкая интеграция с популярными инструментами.
- Минимальная зависимость от внешних библиотек.
https://github.com/tofuutils/tofuenv
📲 Мы в MAX
#devops #девопс
Подпишись 👉@i_DevOps
Основные возможности:
- Упрощённое создание и активация виртуальных окружений.
- Лёгкая интеграция с популярными инструментами.
- Минимальная зависимость от внешних библиотек.
https://github.com/tofuutils/tofuenv
#devops #девопс
Подпишись 👉@i_DevOps
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - tofuutils/tofuenv: OpenTofu version manager
OpenTofu version manager. Contribute to tofuutils/tofuenv development by creating an account on GitHub.
👍2
Forwarded from Bash Советы
📂 Быстрое создание структуры директорий в Linux
Иногда нужно быстро создать целую структуру папок. Вручную - долго. На помощь приходит
✅ Этот однострочник создаст папки
Фишка: можно создавать вложенные структуры сразу:
Это создаст:
-
-
-
-
Полезно, если нужно быстро подготовить окружение для проекта 🚀
👉@bash_srv
Иногда нужно быстро создать целую структуру папок. Вручную - долго. На помощь приходит
mkdir с флагом -p:
mkdir -p /var/www/project/{css,js,images,fonts}
✅ Этот однострочник создаст папки
css, js, images, fonts внутри /var/www/project, даже если родительские директории ещё не существуют.Фишка: можно создавать вложенные структуры сразу:
mkdir -p /opt/data/{logs/{nginx,mysql},backups/{daily,weekly}}
Это создаст:
-
/opt/data/logs/nginx-
/opt/data/logs/mysql-
/opt/data/backups/daily-
/opt/data/backups/weeklyПолезно, если нужно быстро подготовить окружение для проекта 🚀
👉@bash_srv
🔥9❤1👍1
🗓 3 декабря в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Инфраструктурная платформа на основе Kubernetes».
Программа вебинара:
В результате вебинара:
- Поймёте, как с помощью CRD и операторов расширять возможности Kubernetes.
- Научитесь автоматизировать управление пользовательскими ресурсами и упрощать поддержку инфраструктуры.
- Получите базу для создания собственных операторов и интеграции их в CI/CD.
🔗 Ссылка на регистрацию: https://vk.cc/cRBJhd
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1🤡1
Мониторинг K8s: экономим время
Все знают, как провести мониторинг Kubernetes-кластера. Но как сделать его простым и полезным?
Приглашаем вас на вебинар 28 ноября, где раскроем все тонкости использования метрик в кластерах Deckhouse Kubernetes Platform (DKP). Мы расскажем и покажем, что уже есть «из коробки» в платформе, а также, какие инструменты и подходы упрощают настройку и повышают эффективность мониторинга приложений, запущенных в Kubernetes-кластере.
На вебинаре вы узнаете:
👉 чем наш подход к мониторингу отличается от других и как это вам поможет;
👉 как мультитенантность и интеграция с веб-интерфейсом облегчают ежедневные задачи по управлению кластерами;
👉 как готовые дашборды и алерты «из коробки» ускоряют расследование инцидентов и локализацию сбоев.
28 ноября, 12:00 | Онлайн
Регистрируйтесь по ссылке и повышайте эффективность работы с Kubernetes благодаря инструментам DKP!
Все знают, как провести мониторинг Kubernetes-кластера. Но как сделать его простым и полезным?
Приглашаем вас на вебинар 28 ноября, где раскроем все тонкости использования метрик в кластерах Deckhouse Kubernetes Platform (DKP). Мы расскажем и покажем, что уже есть «из коробки» в платформе, а также, какие инструменты и подходы упрощают настройку и повышают эффективность мониторинга приложений, запущенных в Kubernetes-кластере.
На вебинаре вы узнаете:
👉 чем наш подход к мониторингу отличается от других и как это вам поможет;
👉 как мультитенантность и интеграция с веб-интерфейсом облегчают ежедневные задачи по управлению кластерами;
👉 как готовые дашборды и алерты «из коробки» ускоряют расследование инцидентов и локализацию сбоев.
28 ноября, 12:00 | Онлайн
Регистрируйтесь по ссылке и повышайте эффективность работы с Kubernetes благодаря инструментам DKP!
🌟 GitHub Actions для Terraform 🌟
Если вы используете Terraform и хотите интегрировать его с CI/CD процессами на GitHub Actions, используйте библиотеку terraform-github-actions.
С её помощью вы сможете:
- Автоматизировать и тестировать Terraform-код.
- Настраивать проверки terraform plan и terraform apply.
- Ускорить деплой инфраструктуры.
Документация в репозитории описывает примеры использования и тонкости настройки.
https://github.com/dflook/terraform-github-actions
📲 Мы в MAX
#devops #девопс
Подпишись 👉@i_DevOps
Если вы используете Terraform и хотите интегрировать его с CI/CD процессами на GitHub Actions, используйте библиотеку terraform-github-actions.
С её помощью вы сможете:
- Автоматизировать и тестировать Terraform-код.
- Настраивать проверки terraform plan и terraform apply.
- Ускорить деплой инфраструктуры.
Документация в репозитории описывает примеры использования и тонкости настройки.
https://github.com/dflook/terraform-github-actions
#devops #девопс
Подпишись 👉@i_DevOps
Please open Telegram to view this post
VIEW IN TELEGRAM
Скидка 50% на менеджер паролей Пассворк
Чёрная пятница в Пассворке стартует 24 ноября и продлится до 5 декабря. В эти дни будет действовать скидка 50% на покупку коробочного решения.
Что даёт Пассворк вашей компании
Централизованное управление конфиденциальными данными. Всё остаётся в вашей инфраструктуре. Сотрудники быстро находят нужную информацию, администраторы управляют правами доступа, отслеживают все действия и изменения — полный контроль и безопасность.
Почему Пассворк
• Включён в единый реестр Минцифры
• Имеет все необходимые лицензии ФСТЭК и ФСБ
• Качественная и оперативная поддержка
• Все пароли и секреты хранятся на ваших серверах
• Регулярные обновления и сопровождение на каждом этапе
• Опыт внедрения в системообразующие предприятия страны
• Сертифицирован с Astra Linux, РЕД Софт, МСВСфера, Pangolin DB, ОС Атлант и многими другими российскими решениями
Пассворк создан для компаний и государственных учреждений, которым нужна проверенная безопасность.
Всё упорядочено, защищено и всегда под рукой.
Приобрести Пассворк со скидкой 50%
Чёрная пятница в Пассворке стартует 24 ноября и продлится до 5 декабря. В эти дни будет действовать скидка 50% на покупку коробочного решения.
Что даёт Пассворк вашей компании
Централизованное управление конфиденциальными данными. Всё остаётся в вашей инфраструктуре. Сотрудники быстро находят нужную информацию, администраторы управляют правами доступа, отслеживают все действия и изменения — полный контроль и безопасность.
Почему Пассворк
• Включён в единый реестр Минцифры
• Имеет все необходимые лицензии ФСТЭК и ФСБ
• Качественная и оперативная поддержка
• Все пароли и секреты хранятся на ваших серверах
• Регулярные обновления и сопровождение на каждом этапе
• Опыт внедрения в системообразующие предприятия страны
• Сертифицирован с Astra Linux, РЕД Софт, МСВСфера, Pangolin DB, ОС Атлант и многими другими российскими решениями
Пассворк создан для компаний и государственных учреждений, которым нужна проверенная безопасность.
Всё упорядочено, защищено и всегда под рукой.
Приобрести Пассворк со скидкой 50%
👍2❤1🤯1💩1🤓1
💡Local Path Provisioner — это удобное решение для предоставления локального хранилища в Kubernetes-кластерах. Оно позволяет пользователям создавать PersistentVolume на узлах с использованием локального хранилища.
Основные преимущества:
- Простая настройка и использование.
- Гибкость в указании путей для хранения.
- Отличный выбор для разработки и тестирования.
https://github.com/rancher/local-path-provisioner/tree/master
📲 Мы в MAX
#devops #девопс
Подпишись 👉@i_DevOps
Основные преимущества:
- Простая настройка и использование.
- Гибкость в указании путей для хранения.
- Отличный выбор для разработки и тестирования.
https://github.com/rancher/local-path-provisioner/tree/master
#devops #девопс
Подпишись 👉@i_DevOps
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍2
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1