Forwarded from DevOps
Media is too big
VIEW IN TELEGRAM
Курс по Kubernetes
Пакетный менеджер Helm
Мониторинг и логирование в Kubernetes
Постоянные хранилища в Kubernetes
Сеть в Kubernetes
Kubernetes. Управление доступом (RBAC)
КМБ-5 | Вебинар 3. Kubernetes. Архитектура, основные компоненты
КМБ-5 | Вебинар 2. Сети и хранилища в Docker
КМБ-5 | Вебинар 1. Что такое Docker
КМБ-5 | Вводный вебинар. Организационные моменты курса
https://www.youtube.com/playlist?list=PLqVZIPeC5H0mmPBUm0VjKM446-4YITIBJ
#devops #девопс #Kubernetes
Подпишись 👉@i_DevOps
Пакетный менеджер Helm
Мониторинг и логирование в Kubernetes
Постоянные хранилища в Kubernetes
Сеть в Kubernetes
Kubernetes. Управление доступом (RBAC)
КМБ-5 | Вебинар 3. Kubernetes. Архитектура, основные компоненты
КМБ-5 | Вебинар 2. Сети и хранилища в Docker
КМБ-5 | Вебинар 1. Что такое Docker
КМБ-5 | Вводный вебинар. Организационные моменты курса
https://www.youtube.com/playlist?list=PLqVZIPeC5H0mmPBUm0VjKM446-4YITIBJ
#devops #девопс #Kubernetes
Подпишись 👉@i_DevOps
👍3
Forwarded from DevOps
Kilo is a multi-cloud network overlay built on WireGuard and designed for Kubernetes (k8s + wg = kg)
https://github.com/squat/kilo
#devops #девопс #Kubernetes
Подпишись 👉@i_DevOps
https://github.com/squat/kilo
#devops #девопс #Kubernetes
Подпишись 👉@i_DevOps
👍1👎1
Forwarded from DevOps
Media is too big
VIEW IN TELEGRAM
Курс молодого бойца по Kubernetes. 1 поток.
Что такое Docker. Сети и хранилища в Docker
Kubernetes. Архитектура и основы компонентов
Kubernetes. Сеть и постоянные хранилища
DevOps & CI/CD
https://www.youtube.com/playlist?list=PLqVZIPeC5H0kCWA8hjf97JPOuyCSS_rSU
#devops #девопс #Kubernetes
Подпишись 👉@i_DevOps
Что такое Docker. Сети и хранилища в Docker
Kubernetes. Архитектура и основы компонентов
Kubernetes. Сеть и постоянные хранилища
DevOps & CI/CD
https://www.youtube.com/playlist?list=PLqVZIPeC5H0kCWA8hjf97JPOuyCSS_rSU
#devops #девопс #Kubernetes
Подпишись 👉@i_DevOps
👍6
Forwarded from DevOps
Представляем glaball для управления множеством GitLab-инстансов
В наиболее популярном случае иметь множество инсталляций GitLab — это антипаттерн. Однако обстоятельства бывают разными: специализация нашего бизнеса привела к тому, что мы администрируем десятки self-hosted GitLab-инстансов обслуживаемых клиентов. Периодически у нас возникает потребность проделать какие-то действия на всех GitLab’ах сразу, чтобы не тратить время на многократное повторение рутинных операций. Все началось с необходимости мониторинга за критическими обновлениями для GitLab. Но аппетиты росли: со временем нам уже хотелось искать по содержимому файлов во всех инсталляциях или даже создавать пользователей.
Расскажем о том, как мы решили эти задачи в рамках внутренней разработки, которую теперь публикуем как Open Source-проект под названием glaball.
#devops #девопс #GitLab
Подпишись 👉@i_DevOps
В наиболее популярном случае иметь множество инсталляций GitLab — это антипаттерн. Однако обстоятельства бывают разными: специализация нашего бизнеса привела к тому, что мы администрируем десятки self-hosted GitLab-инстансов обслуживаемых клиентов. Периодически у нас возникает потребность проделать какие-то действия на всех GitLab’ах сразу, чтобы не тратить время на многократное повторение рутинных операций. Все началось с необходимости мониторинга за критическими обновлениями для GitLab. Но аппетиты росли: со временем нам уже хотелось искать по содержимому файлов во всех инсталляциях или даже создавать пользователей.
Расскажем о том, как мы решили эти задачи в рамках внутренней разработки, которую теперь публикуем как Open Source-проект под названием glaball.
#devops #девопс #GitLab
Подпишись 👉@i_DevOps
👍1
Forwarded from DevOps
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Update. Ansible На Русском Языке 2
Часть 1 https://xn--r1a.website/i_DevOps/143
11- Переменные - Debug, Set_fact, Register
12- Блоки и Условия – Block-When
13- Циклы – Loop, With_Items, Until, With_fileglob
14- Шаблоны - Jinja Template
15- Создание Ролей - Roles
16- Внешние переменные - extra-vars
17- Использование Import, Include
18- Перенаправление выполнения Task из Playbook на определённый сервер - delegate_to
19- Перехват и Контроль ошибок
20- Хранение Секретов - ansible-vault
#devops #Ansible #девопс
Подпишись 👉@i_DevOps
Часть 1 https://xn--r1a.website/i_DevOps/143
11- Переменные - Debug, Set_fact, Register
12- Блоки и Условия – Block-When
13- Циклы – Loop, With_Items, Until, With_fileglob
14- Шаблоны - Jinja Template
15- Создание Ролей - Roles
16- Внешние переменные - extra-vars
17- Использование Import, Include
18- Перенаправление выполнения Task из Playbook на определённый сервер - delegate_to
19- Перехват и Контроль ошибок
20- Хранение Секретов - ansible-vault
#devops #Ansible #девопс
Подпишись 👉@i_DevOps
🔥3👍2🤡1
Forwarded from DevOps
Шпаргалка docker
Install DOCKER
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
Info and Registry
docker info - Информация обо всём в установленном Docker
docker history - История образа
docker tag - Дать тег образу локально или в registry
docker login - Залогиниться в registry
docker search - Поиск образа в registry
docker pull - Загрузить образ из Registry себе на хост
docker push - Отправить локальный образ в registry
Container Management
docker ps -а - Посмотреть все контейнеры
docker start container-name - Запустить контейнер
docker kill/stop container-name - Убить (SIGKILL) /Остановить (SIGTERM) контейнер
docker logs --tail 100 container-name - Вывести логи контейнера, последние 100 строк
docker inspect container-name - Вся инфа о контейнере + IP
docker rm container-name - Удалить контейнер (поле каждой сборки Dockerfile)
docker rm -f $(docker ps -aq) - Удалить все запущенные и остановленные контейнеры
docker events container-name
docker port container-name - Показать публичный порт контейнера
docker top container-name - Отобразить процессы в контейнере
docker stats container-name - Статистика использования ресурсов в контейнере
docker diff container-name - Изменения в ФС контейнера
Images
docker build -t my_app . - Билд контейнера в текущей папке, Скачивает все слои для запуска образа
docker images / docker image ls - Показать все образы в системе
docker image rm / docker rmi image - Удалить image
docker commit <containerName/ID> lepkov/debian11slim:version3- Создает образ из контейнера
docker insert URL - вставляет файл из URL в контейнер
docker save -o backup.tar - Сохранить образ в backup.tar в STDOUT с тегами, версиями, слоями
docker load - Загрузить образ в .tar в STDIN с тегами, версиями, слоями
docker import - Создать образ из .tar
docker image history --no-trunc - Посмотреть историю слоёв образа
docker system prune -f - Удалит все, кроме используемого (лучше не использовать на проде, ещё кстати из-за старого кеша может собираться cтарая версия контейнера)
Run
docker run -d -p 80:80 -p 22:22 debian:11.1-slim sleep infinity (--rm удалит после закрытия контейнера, --restart unless-stopped добавит автозапуск контейнера) - Запуск контейнера интерактивно или как демона/detached (-d), Порты: слева хостовая система, справа в контейнере, пробрасывается сразу 2 порта 80 и 22, используется легкий образ Debian 11 и команда бесконечный сон
docker update --restart unless-stopped redis - добавит к контейнеру правило перезапускаться при закрытии, за исключением команды стоп, автозапуск по-сути
docker exec -it container-name /bin/bash (ash для alpine) - Интерактивно подключиться к контейнеру для управления, exit чтобы выйти
docker attach container-name - Подключиться к контейнеру чтоб мониторить ошибки логи в реалтайме
#devops #docker #девопс
Подпишись 👉@i_DevOps
Install DOCKER
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
Info and Registry
docker info - Информация обо всём в установленном Docker
docker history - История образа
docker tag - Дать тег образу локально или в registry
docker login - Залогиниться в registry
docker search - Поиск образа в registry
docker pull - Загрузить образ из Registry себе на хост
docker push - Отправить локальный образ в registry
Container Management
docker ps -а - Посмотреть все контейнеры
docker start container-name - Запустить контейнер
docker kill/stop container-name - Убить (SIGKILL) /Остановить (SIGTERM) контейнер
docker logs --tail 100 container-name - Вывести логи контейнера, последние 100 строк
docker inspect container-name - Вся инфа о контейнере + IP
docker rm container-name - Удалить контейнер (поле каждой сборки Dockerfile)
docker rm -f $(docker ps -aq) - Удалить все запущенные и остановленные контейнеры
docker events container-name
docker port container-name - Показать публичный порт контейнера
docker top container-name - Отобразить процессы в контейнере
docker stats container-name - Статистика использования ресурсов в контейнере
docker diff container-name - Изменения в ФС контейнера
Images
docker build -t my_app . - Билд контейнера в текущей папке, Скачивает все слои для запуска образа
docker images / docker image ls - Показать все образы в системе
docker image rm / docker rmi image - Удалить image
docker commit <containerName/ID> lepkov/debian11slim:version3- Создает образ из контейнера
docker insert URL - вставляет файл из URL в контейнер
docker save -o backup.tar - Сохранить образ в backup.tar в STDOUT с тегами, версиями, слоями
docker load - Загрузить образ в .tar в STDIN с тегами, версиями, слоями
docker import - Создать образ из .tar
docker image history --no-trunc - Посмотреть историю слоёв образа
docker system prune -f - Удалит все, кроме используемого (лучше не использовать на проде, ещё кстати из-за старого кеша может собираться cтарая версия контейнера)
Run
docker run -d -p 80:80 -p 22:22 debian:11.1-slim sleep infinity (--rm удалит после закрытия контейнера, --restart unless-stopped добавит автозапуск контейнера) - Запуск контейнера интерактивно или как демона/detached (-d), Порты: слева хостовая система, справа в контейнере, пробрасывается сразу 2 порта 80 и 22, используется легкий образ Debian 11 и команда бесконечный сон
docker update --restart unless-stopped redis - добавит к контейнеру правило перезапускаться при закрытии, за исключением команды стоп, автозапуск по-сути
docker exec -it container-name /bin/bash (ash для alpine) - Интерактивно подключиться к контейнеру для управления, exit чтобы выйти
docker attach container-name - Подключиться к контейнеру чтоб мониторить ошибки логи в реалтайме
#devops #docker #девопс
Подпишись 👉@i_DevOps
👍11
Forwarded from DevOps
Media is too big
VIEW IN TELEGRAM
DevSecOps. Общее погружение
Зачем включать ИБ в дружную команду DevOps? Как сделать интеграцию максимально простой и понятной для всех участников DevSecOps. На вебинаре рассказали о том какие технологии используются в DevSecOps, зачем они нужны и как правильно их встроить в автоматизированный конвейер разработки.
Подробно обсудили:
• Наше видение современного ИТ в крупной компании – фреймворк ключевых элементов
• Обзор ключевых элементов DevSecOps Toolchain: что делает каждое решение
• Автоматизация ИБ: на что обращать внимание при выборе технологий
• DevOps и DevSecOps контур: автоматизация и защита разработки
• Onboarding: базовые советы при интеграции ИБ-решений в pipeline
Кому интересно:
• ИТ-специалистам, которые хотят узнать об изменениях в процессе разработки со стороны службы ИБ
• Разработчикам, которые хотят взглянуть на DevSecOps глазами ИБшника
• Руководителям, которые регулярно вовлечены в конфликты подразделений Разработки – ИБ – Эксплуатации
• Для тех, кто знает, что такое ИБ, но впервые слышит про DevSecOps
#devops #девопс #DevSecOps
Подпишись 👉@i_DevOps
Зачем включать ИБ в дружную команду DevOps? Как сделать интеграцию максимально простой и понятной для всех участников DevSecOps. На вебинаре рассказали о том какие технологии используются в DevSecOps, зачем они нужны и как правильно их встроить в автоматизированный конвейер разработки.
Подробно обсудили:
• Наше видение современного ИТ в крупной компании – фреймворк ключевых элементов
• Обзор ключевых элементов DevSecOps Toolchain: что делает каждое решение
• Автоматизация ИБ: на что обращать внимание при выборе технологий
• DevOps и DevSecOps контур: автоматизация и защита разработки
• Onboarding: базовые советы при интеграции ИБ-решений в pipeline
Кому интересно:
• ИТ-специалистам, которые хотят узнать об изменениях в процессе разработки со стороны службы ИБ
• Разработчикам, которые хотят взглянуть на DevSecOps глазами ИБшника
• Руководителям, которые регулярно вовлечены в конфликты подразделений Разработки – ИБ – Эксплуатации
• Для тех, кто знает, что такое ИБ, но впервые слышит про DevSecOps
#devops #девопс #DevSecOps
Подпишись 👉@i_DevOps
👍5
Forwarded from DevOps
Как диагностировать проблемы соединения в Kubernetes при помощи Mizu
Стоит попробовать Mizu – это ПО для мониторинга Kubernetes-трафика. Программа может сильно упростить ежедневную диагностику сетей, да и жизнь в целом.
Одна из наиболее частых задач, с которыми сталкиваются администраторы Kubernetes по ходу тестирования и дебаггинга – проверка коммуникаций между компонентами внутри сети. Далее
Original
#devops #девопс #Mizu #Kubernetes
Подпишись 👉@i_DevOps
Стоит попробовать Mizu – это ПО для мониторинга Kubernetes-трафика. Программа может сильно упростить ежедневную диагностику сетей, да и жизнь в целом.
Одна из наиболее частых задач, с которыми сталкиваются администраторы Kubernetes по ходу тестирования и дебаггинга – проверка коммуникаций между компонентами внутри сети. Далее
Original
#devops #девопс #Mizu #Kubernetes
Подпишись 👉@i_DevOps
👍2
Forwarded from DevOps
Как войти в запущенный Docker-контейнер и почему так делать не надо
Иногда интересно: что же происходит внутри Docker-контейнера
Если коротко отвечать на первую часть вопроса, хватит одной команды docker: docker exec -ti {{ container name }} /bin/sh
#devops #девопс #Docker
Подпишись 👉@i_DevOps
Иногда интересно: что же происходит внутри Docker-контейнера
Если коротко отвечать на первую часть вопроса, хватит одной команды docker: docker exec -ti {{ container name }} /bin/sh
#devops #девопс #Docker
Подпишись 👉@i_DevOps
Telegraph
Как войти в запущенный Docker-контейнер и почему так делать не надо
Иногда интересно: что же происходит внутри Docker-контейнера Если коротко отвечать на первую часть вопроса, хватит одной команды docker: docker exec -ti {{ container name }} /bin/sh – так мы запустим в интерактивном режиме команду /bin/sh (shell, командная…
👍4
Forwarded from DevOps
Как определить DNS в контейнерах Docker
Когда вы развертываете контейнер в сети, если он не может найти DNS-сервер, определенный в файле /etc/resolv.conf, по умолчанию он будет использовать DNS, настроенный для хоста.
Это может быть хорошо и удобно для определенных ситуаций.
Но что если (возможно, по соображениям безопасности) вы не хотите, чтобы ваши контейнеры использовали тот же DNS, что и хосты. Далее
#devops #девопс #Docker
Подпишись 👉@i_DevOps
Когда вы развертываете контейнер в сети, если он не может найти DNS-сервер, определенный в файле /etc/resolv.conf, по умолчанию он будет использовать DNS, настроенный для хоста.
Это может быть хорошо и удобно для определенных ситуаций.
Но что если (возможно, по соображениям безопасности) вы не хотите, чтобы ваши контейнеры использовали тот же DNS, что и хосты. Далее
#devops #девопс #Docker
Подпишись 👉@i_DevOps
Telegraph
Как определить DNS в контейнерах Docker
Когда вы развертываете контейнер в сети, если он не может найти DNS-сервер, определенный в файле /etc/resolv.conf, по умолчанию он будет использовать DNS, настроенный для хоста. Это может быть хорошо и удобно для определенных ситуаций. Но что если (возможно…
👍4
Forwarded from DevOps
Naml - это инструмент управления конфигурацией для описания конфигурации Kubernetes в Go. Имеет хороший инструмент для преобразования YAML в Go.
https://github.com/kris-nova/naml
#devops #девопс #Kubernetes
Подпишись 👉@i_DevOps
https://github.com/kris-nova/naml
#devops #девопс #Kubernetes
Подпишись 👉@i_DevOps
GitHub
GitHub - krisnova/naml: Convert Kubernetes YAML to Golang
Convert Kubernetes YAML to Golang. Contribute to krisnova/naml development by creating an account on GitHub.
👍4🤯2
Forwarded from DevOps
Kubernetes
How to Install Kubernetes via minikube on Windows Server 2019 Hyper V
How to deploy a Nginx application in Kubernetes using minikube on Windows Server 2019
How to run multiple minikube clusters and multiple node kubernetes cluster
How to install a single node Kubernetes cluster on Ubuntu using Minikube
#devops #девопс #Kubernetes
Подпишись 👉@i_DevOps
How to Install Kubernetes via minikube on Windows Server 2019 Hyper V
How to deploy a Nginx application in Kubernetes using minikube on Windows Server 2019
How to run multiple minikube clusters and multiple node kubernetes cluster
How to install a single node Kubernetes cluster on Ubuntu using Minikube
#devops #девопс #Kubernetes
Подпишись 👉@i_DevOps
👍3
Forwarded from DevOps
Стратегии деплоймента
Сделайте реализацию blue/green стратегии деплоймента для Kubernetes на основе деплойментов, сервиса и ingress’а и опишите как переключать версии.
#devops #девопс #Kubernetes
Подпишись 👉@i_DevOps
Сделайте реализацию blue/green стратегии деплоймента для Kubernetes на основе деплойментов, сервиса и ingress’а и опишите как переключать версии.
### Конфигурация ingress'а
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: / spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app-service
port:
number: 80
### Сервис
apiVersion: v1
kind: Service
metadata:
name: app-service
spec:
selector:
app: app
color: blue
ports:
- protocol: TCP
port: 80
targetPort: 8080
### Деплоймент синей версии
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-blue
labels:
app: app
color: blue
spec:
replicas: 1
selector:
matchLabels:
app: app
color: blue
template:
metadata:
labels:
app: app
color: blue
spec:
containers:
- name: app
image: docker.registry.io/app:1.0.0
ports:
- containerPort: 8080
### Деплоймент зелёной версии
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-green
labels:
app: app
color: green
spec:
replicas: 1
selector:
matchLabels:
app: app
color: green
template:
metadata:
labels:
app: app
color: green
spec:
containers:
- name: app
image: docker.registry.io/app:1.0.0
ports:
- containerPort: 8080
### Переключение версий осуществляется путём изменения селекторов в сервисе#devops #девопс #Kubernetes
Подпишись 👉@i_DevOps
👍4
Forwarded from DevOps
Что, если… забыть про безопасность кластера k8s?
Я думаю, многие слышали про громкий инцидент, произошедший с Tesla в 2018 году, когда группа хакеров через консоль Kubernetes смогла получить доступ к аккаунту. После получения доступа ребята изрядно повеселились, настроив майнер в облачном сервисе Amazon Web Services.
У многих людей сразу же возникнут закономерные вопросы “А как они это сделали?” и “Почему многоуважаемые ИБ данной компании не подумали о потенциальной дыре в безопасности?”. Как правило, при разработке любого продукта могут быть лишь две причины возникновения уязвимостей. Первая причина - человеческий фактор. Ведь кто из нас не забывал что-либо в ходе кропотливой работы над проектом или же не откладывал в бэклог решение “не самых срочных вопросов..?”. Вторая причина - отсутствие необходимых компетенций в той или иной области. Далее
#devops #девопс
Подпишись 👉@i_DevOps
Я думаю, многие слышали про громкий инцидент, произошедший с Tesla в 2018 году, когда группа хакеров через консоль Kubernetes смогла получить доступ к аккаунту. После получения доступа ребята изрядно повеселились, настроив майнер в облачном сервисе Amazon Web Services.
У многих людей сразу же возникнут закономерные вопросы “А как они это сделали?” и “Почему многоуважаемые ИБ данной компании не подумали о потенциальной дыре в безопасности?”. Как правило, при разработке любого продукта могут быть лишь две причины возникновения уязвимостей. Первая причина - человеческий фактор. Ведь кто из нас не забывал что-либо в ходе кропотливой работы над проектом или же не откладывал в бэклог решение “не самых срочных вопросов..?”. Вторая причина - отсутствие необходимых компетенций в той или иной области. Далее
#devops #девопс
Подпишись 👉@i_DevOps
👍3
Forwarded from DevOps
Gitlab ci/cd
В прод с помощью GITLAB CI/CD. На простом примере. Основы.
GITLAB CI/CD vs JENKINS. Что выбрать для своих CI CD pipeline?
GITLAB CI CD сокращаем код. Gitlab ci include, extends, reference, remote, local
Docker BUILD в GITLAB CI CD и kubernetes. Как правильно? Бонус настройка gitlab runner
источник
#devops #девопс
Подпишись 👉@i_DevOps
В прод с помощью GITLAB CI/CD. На простом примере. Основы.
GITLAB CI/CD vs JENKINS. Что выбрать для своих CI CD pipeline?
GITLAB CI CD сокращаем код. Gitlab ci include, extends, reference, remote, local
Docker BUILD в GITLAB CI CD и kubernetes. Как правильно? Бонус настройка gitlab runner
источник
#devops #девопс
Подпишись 👉@i_DevOps
👍5
Forwarded from DevOps
15 лучших практик DevSecOps
DevOps – это скорость, гибкость и взаимодействие. Но когда речь заходит о безопасности, команды DevOps часто сталкиваются с уникальными проблемами. От обеспечения безопасности процесса разработки приложений до защиты производственной среды, команды DevOps и DevSecOps должны знать о множестве потенциальных рисков безопасности.
Чтобы помочь вам быть на шаг впереди, мы составили список из 15 лучших практик и проблем безопасности DevOps.
https://itmozg.ru/15-luchshih-praktik-devsecops/
#devops #девопс
Подпишись 👉@i_DevOps
DevOps – это скорость, гибкость и взаимодействие. Но когда речь заходит о безопасности, команды DevOps часто сталкиваются с уникальными проблемами. От обеспечения безопасности процесса разработки приложений до защиты производственной среды, команды DevOps и DevSecOps должны знать о множестве потенциальных рисков безопасности.
Чтобы помочь вам быть на шаг впереди, мы составили список из 15 лучших практик и проблем безопасности DevOps.
https://itmozg.ru/15-luchshih-praktik-devsecops/
#devops #девопс
Подпишись 👉@i_DevOps
👍1
🏗 KVM + Terraform: Поднимаем виртуалки как код
Мы научились управлять KVM через
На сцену выходит Terraform. Обычно его ассоциируют с облаками (AWS, Azure), но он прекрасно работает и с «железным» гипервизором через провайдер
🛠 Что нам понадобится?
1. Установленный Terraform.
2. Плагин-провайдер
3. Образ системы (Cloud Image), например, Ubuntu Cloud.
📄 Пишем рецепт (
Создайте папку, положите туда файл
🚀 Запускаем магию
В терминале переходим в папку с файлом и выполняем три команды:
1.
2.
3.
🤔 А как удалить?
Не нужно вспоминать имена машин и удалять диски вручную. Просто введите:
И Terraform аккуратно зачистит за собой всё, что создал.
💡 Почему это круто?
🩵 Воспроизводимость: Вы можете отправить этот файл коллеге, и он поднимет точно такую же среду.
🩵 Git: Вы храните конфигурацию инфраструктуры в репозитории. Видна история изменений.
🩵 Cloud-Init: В Terraform можно добавить конфигурацию
👇 Коллеги, какой инструмент IaC вы предпочитаете? Terraform, Ansible или, может быть, Pulumi?
#sysadmin #devops #terraform #kvm #iac #automation
📲 Мы в MAX
👉 @sysadminof
Мы научились управлять KVM через
virsh, но если вам нужно поднять 10 одинаковых серверов для тестов, а потом удалить их одной командой - ручной ввод утомляет.На сцену выходит Terraform. Обычно его ассоциируют с облаками (AWS, Azure), но он прекрасно работает и с «железным» гипервизором через провайдер
libvirt.🛠 Что нам понадобится?
1. Установленный Terraform.
2. Плагин-провайдер
dmacvicar/libvirt (стандарт де-факто для KVM).3. Образ системы (Cloud Image), например, Ubuntu Cloud.
📄 Пишем рецепт (
main.tf)Создайте папку, положите туда файл
main.tf и опишите желаемое состояние:
terraform {
required_providers {
libvirt = {
source = "dmacvicar/libvirt"
}
}
}
# 1. Подключаемся к локальному KVM
provider "libvirt" {
uri = "qemu:///system"
}
# 2. Скачиваем образ диска (или берем локальный)
resource "libvirt_volume" "ubuntu_base" {
name = "ubuntu-base.qcow2"
pool = "default"
# Ссылка на официальный Cloud-образ
source = "https://cloud-images.ubuntu.com/minimal/releases/jammy/release/ubuntu-22.04-minimal-cloudimg-amd64.img"
format = "qcow2"
}
# 3. Описываем Виртуальную Машину
resource "libvirt_domain" "my_web_server" {
name = "terraform-vm-01"
memory = "1024"
vcpu = 1
network_interface {
network_name = "default" # NAT сеть libvirt
}
disk {
volume_id = libvirt_volume.ubuntu_base.id
}
console {
type = "pty"
target_port = "0"
target_type = "serial"
}
graphics {
type = "spice"
listen_type = "address"
autoport = true
}
}
🚀 Запускаем магию
В терминале переходим в папку с файлом и выполняем три команды:
1.
terraform init - Скачает провайдер libvirt.2.
terraform plan - Покажет, что именно он собирается создать (DRY RUN).3.
terraform apply - Boom! Скачивается образ, создается диск, запускается VM.🤔 А как удалить?
Не нужно вспоминать имена машин и удалять диски вручную. Просто введите:
terraform destroyИ Terraform аккуратно зачистит за собой всё, что создал.
💡 Почему это круто?
cloud-init (создать пользователя, добавить SSH-ключ, установить пакеты при первом старте), чтобы получить полностью готовый сервер, в который даже не нужно заходить.👇 Коллеги, какой инструмент IaC вы предпочитаете? Terraform, Ansible или, может быть, Pulumi?
#sysadmin #devops #terraform #kvm #iac #automation
📲 Мы в MAX
👉 @sysadminof
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
☁️ KVM + Cloud-Init: Настройка сервера «без рук»
В продолжение поста. Мы научились поднимать "железо" через Terraform. Но что толку от запущенной VM, если в нее нужно заходить через VNC-консоль, вручную создавать пользователя, прописывать пароли и ставить
Это медленно и небезопасно.
Решение Cloud-Init. Это стандарт де-факто для инициализации облачных инстансов (AWS, Azure, DigitalOcean), который прекрасно работает и на локальном KVM.
🎯 Задача
При команде
1. Создать VM.
2. Автоматически создать пользователя
3. Закинуть туда ваш публичный SSH-ключ (чтобы заходить без пароля).
4. Установить Nginx и Docker.
📝 Шаг 1. Пишем конфиг (cloud_init.cfg)
Создайте файл
🔗 Шаг 2. Подключаем к Terraform
В наш файл
🚀 Результат: Вы запускаете
Через 30 секунд у вас есть поднятый сервер с установленным Nginx. Вы просто пишете:
...и сразу попадаете внутрь. Никаких паролей, никаких ручных установок.
💡 Важный нюанс: Cloud-Init работает только на специальных Cloud Images (например,
Если вы попытаетесь скормить ему обычный установочный ISO (Desktop/Server installer), магии не произойдет, там нет демона
Коллеги, а вы используете Cloud-Init или по старинке Ansible/Chef/Puppet накатываете настройки уже после того, как машина загрузилась?
#sysadmin #cloudinit #terraform #kvm #devops #automation #linux
📲 Мы в MAX
👉 @sysadminof
В продолжение поста. Мы научились поднимать "железо" через Terraform. Но что толку от запущенной VM, если в нее нужно заходить через VNC-консоль, вручную создавать пользователя, прописывать пароли и ставить
nginx?Это медленно и небезопасно.
Решение Cloud-Init. Это стандарт де-факто для инициализации облачных инстансов (AWS, Azure, DigitalOcean), который прекрасно работает и на локальном KVM.
🎯 Задача
При команде
terraform apply:1. Создать VM.
2. Автоматически создать пользователя
admin.3. Закинуть туда ваш публичный SSH-ключ (чтобы заходить без пароля).
4. Установить Nginx и Docker.
📝 Шаг 1. Пишем конфиг (cloud_init.cfg)
Создайте файл
cloud_init.cfg. Это обычный YAML, который описывает, что нужно сделать внутри ОС при первом старте.
#cloud-config
hostname: my-web-server
fqdn: my-web-server.local
manage_etc_hosts: true
users:
- name: admin
sudo: ALL=(ALL) NOPASSWD:ALL
shell: /bin/bash
ssh_authorized_keys:
- ssh-rsa AAAAB3Nza... (ваш публичный ключ id_rsa.pub)
packages:
- nginx
- htop
- git
runcmd:
- [ systemctl, enable, nginx ]
- [ systemctl, start, nginx ]
- [ echo, "Hello from Cloud-Init!", >, /var/www/html/index.html ]
🔗 Шаг 2. Подключаем к Terraform
В наш файл
main.tf (из прошлого поста) добавляем ресурс диска Cloud-Init. Terraform создаст маленький ISO-образ с нашим конфигом и подключит его как CD-ROM к виртуалке.
# 1. Читаем конфиг
data "template_file" "user_data" {
template = file("${path.module}/cloud_init.cfg")
}
# 2. Создаем диск с настройками
resource "libvirt_cloudinit_disk" "commoninit" {
name = "commoninit.iso"
user_data = data.template_file.user_data.rendered
}
# 3. Цепляем к машине
resource "libvirt_domain" "vm" {
# ... остальные настройки ...
# Самая важная строчка:
cloudinit = libvirt_cloudinit_disk.commoninit.id
# ...
}
🚀 Результат: Вы запускаете
terraform apply.Через 30 секунд у вас есть поднятый сервер с установленным Nginx. Вы просто пишете:
ssh admin@<ip-address>...и сразу попадаете внутрь. Никаких паролей, никаких ручных установок.
💡 Важный нюанс: Cloud-Init работает только на специальных Cloud Images (например,
Ubuntu Cloud, CentOS GenericCloud, Debian Cloud).Если вы попытаетесь скормить ему обычный установочный ISO (Desktop/Server installer), магии не произойдет, там нет демона
cloud-init, который читает конфиг при загрузке.Коллеги, а вы используете Cloud-Init или по старинке Ansible/Chef/Puppet накатываете настройки уже после того, как машина загрузилась?
#sysadmin #cloudinit #terraform #kvm #devops #automation #linux
📲 Мы в MAX
👉 @sysadminof
❤4👍3🤨2🔥1
📊 Мониторинг KVM: Prometheus + Grafana + Node Exporter
Мы подняли парк виртуальных машин. Но как узнать, что на
Строим классический стек мониторинга. Это стандарт индустрии: бесплатно, гибко и выглядит так, что начальство будет в восторге.
🛠 Три мушкетера мониторинга
1. Node Exporter: Агент-шпион. Ставится на каждую Linux-машину (VM). Собирает метрики (CPU, RAM, Disk, Net) и отдает их по HTTP.
2. Prometheus: База данных (TSDB). Периодически опрашивает всех агентов («скрейпит») и сохраняет историю изменений.
3. Grafana: Красивая "морда". Рисует графики, дашборды и шлет алерты в Telegram.
🚀 Шаг 1. Ставим агента (на каждую VM)
На целевой виртуалке скачиваем и запускаем
Самый простой способ - через Systemd, чтобы он стартовал сам.
Создаем юнит
Не забудьте открыть порт 9100 в фаерволе!
💾 Шаг 2. Настраиваем Prometheus (Сервер мониторинга)
На сервере мониторинга в
Перезапускаем Prometheus. Теперь он каждые 15 секунд (по дефолту) ходит к виртуалкам и спрашивает: «Как дела?».
🎨 Шаг 3. Визуализация в Grafana
Заходим в Grafana -> Data Sources -> Add Prometheus.
А теперь магия: не нужно рисовать графики вручную!
1. Идем в Dashboards -> Import.
2. Вводим ID готового дашборда: 1860 (или 11074).
3. Нажимаем Load.
Вуаля! У вас перед глазами полная картина: загрузка ядер, потребление RAM, IOPS дисков и сетевой трафик по каждой машине.
💡 Pro Tip для KVM:
Node Exporter показывает то, что видит сама виртуалка. Но иногда виртуалка "врет" или зависает так, что агент не отвечает.
Чтобы видеть ситуацию снаружи (со стороны гипервизора), поставьте на хост-машину
Он берет метрики напрямую из KVM/QEMU. Вы увидите:
🩵 Реальное потребление CPU (включая Overhead).
🩵 Статус машин (Running/Paused/Shutdown).
🩵 Проблемы с дисками на уровне хоста.
👉 Zabbix или Prometheus? Кто чем пользуется в проде и почему?
#sysadmin #monitoring #prometheus #grafana #devops #linux
📲 Мы в MAX
👉 @sysadminof
Мы подняли парк виртуальных машин. Но как узнать, что на
web-server-01 закончилась память, а db-02 уперлась в полку по CPU? Смотреть htop на каждом сервере не выход.Строим классический стек мониторинга. Это стандарт индустрии: бесплатно, гибко и выглядит так, что начальство будет в восторге.
🛠 Три мушкетера мониторинга
1. Node Exporter: Агент-шпион. Ставится на каждую Linux-машину (VM). Собирает метрики (CPU, RAM, Disk, Net) и отдает их по HTTP.
2. Prometheus: База данных (TSDB). Периодически опрашивает всех агентов («скрейпит») и сохраняет историю изменений.
3. Grafana: Красивая "морда". Рисует графики, дашборды и шлет алерты в Telegram.
🚀 Шаг 1. Ставим агента (на каждую VM)
На целевой виртуалке скачиваем и запускаем
node_exporter.Самый простой способ - через Systemd, чтобы он стартовал сам.
Создаем юнит
/etc/systemd/system/node_exporter.service:
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
Не забудьте открыть порт 9100 в фаерволе!
💾 Шаг 2. Настраиваем Prometheus (Сервер мониторинга)
На сервере мониторинга в
prometheus.yml добавляем наши виртуалки в список целей:
scrape_configs:
- job_name: 'kvm_vms'
static_configs:
- targets:
- '192.168.122.10:9100' # web-server
- '192.168.122.11:9100' # db-server
Перезапускаем Prometheus. Теперь он каждые 15 секунд (по дефолту) ходит к виртуалкам и спрашивает: «Как дела?».
🎨 Шаг 3. Визуализация в Grafana
Заходим в Grafana -> Data Sources -> Add Prometheus.
А теперь магия: не нужно рисовать графики вручную!
1. Идем в Dashboards -> Import.
2. Вводим ID готового дашборда: 1860 (или 11074).
3. Нажимаем Load.
Вуаля! У вас перед глазами полная картина: загрузка ядер, потребление RAM, IOPS дисков и сетевой трафик по каждой машине.
💡 Pro Tip для KVM:
libvirt-exporterNode Exporter показывает то, что видит сама виртуалка. Но иногда виртуалка "врет" или зависает так, что агент не отвечает.
Чтобы видеть ситуацию снаружи (со стороны гипервизора), поставьте на хост-машину
libvirt-exporter.Он берет метрики напрямую из KVM/QEMU. Вы увидите:
👉 Zabbix или Prometheus? Кто чем пользуется в проде и почему?
#sysadmin #monitoring #prometheus #grafana #devops #linux
📲 Мы в MAX
👉 @sysadminof
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤2