Мій перший проєкт на Go завершено xD
Репозиторій: https://github.com/BlackMetalz/KubeNotifyPlus
Огляд
Я витратив 15 хвилин на цей діаграму xD
Особливості:
- Виконує роль вебхуку для Alertmanager для обробки та управління сповіщеннями.
- Надсилає детальні сповіщення конкретним користувачам або групам, які відповідають за постраждалі сервіси.
- У разі аварії пода надає точну причину збою, включаючи деталі стану пода.
- Підтримка сповіщень для ingress та інших сповіщень у k8s, також підтримує загальні сповіщення — це можливість використовувати це для всіх вебхуків в alert manager.
- Демонстраційні дані та інші ресурси надані в папці ресурсів.
Приклад правил Prometheus
Це ще не включає ingress.
Огляд сповіщень
- Коли сповіщення надсилається в групу системних адміністраторів (яка завжди відповідає за всі сповіщення від системи):
Аварія пода з подіями
Аварія пода через OOM з логами та подіями (ігноруйте друге повідомлення my-app-app-demo xD)
Сповіщення для ingress
Сповіщення для зупиненого вузла
Маппінг сповіщень користувачів
- Таблиця users: створюєте ім'я користувача та його Telegram ID.
дані таблиці users
- Таблиця service_mappings: для зв'язування користувача з сервісом, зазвичай це ім'я деплойменту або ім'я ingress, а для користувача — це userID з таблиці users. Я ще не встиг зробити CURD UI для користувачів та маппінгу сервісів xD
дані таблиці servicemappings_
Деплой до k8s
Так, ми повинні деплоїти цей сервіс, щоб отримати ingress як кінцеву точку та додати його до alert manager. Я деплоїв за допомогою свого стеку: https://medium.com/@kienlt.qn/my-devops-journey-with-jenkins-argocd-and-gitops-tools-e61a57201361
Манифест оновлено тут: https://github.com/BlackMetalz/k8s-manifest
І це дуже корисно для виявлення деяких видів витоків (деякі API токени, які я використовував для тестування xD)
Звіт про витоки в Git
Сканер Trivy
Деякі дублікати коду та перевірки покриття за допомогою Sonarqube, але я не зміг зараз створити тестові функції для них, тому пропустив сканування коду (мій CICD pipeline це підтримує xD)
Quality Gate: Failed (Coverage on New Code is less than 80.00%)
Висновки
- Я тільки почав вивчати Golang, щоб створювати щось нове, що не написано на Python.
- Я багато чого навчився і запам'ятав з базових понять Go, таких як:
- Функції повинні починатися з великої літери, якщо ви хочете їх зробити публічними.
- модульний підхід, не буду все вміщувати в один файл main.go xD
- тип struct — це круто
- і ще багато іншого..
- Хоча код все ще базовий, я гордий ним як системний адміністратор (DevOps на мою думку — це культура роботи або менталітет)
- У мене є лише ідея створювати інструменти, решта підтримується та покривається ChatGPT/Copilot/ClaudeAI xD (я очікував, що закінчу це за 2 місяці, але не думав, що зможу зробити все за 11 днів)
- Використовувати Jira — це чудово для відстеження прогресу
Панель інструментів Jira
- Є кілька моментів, які ще можна покращити:
- Додати підтримку отримання логів та подій Pod для кількох кластерів k8s.
- Додати базову аутентифікацію для цього.
- Додати UI для CURD користувачів та маппінгу сервісів.
Перекладено з: Kube Notify Plus- Enhanced notify as webhook for alert manager