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