👉Из статьи вы узнаете, как устроены сети в Docker и чем отличаются стандартные сети от пользовательских.
👉На практических примерах показано, как контейнеры находят друг друга по имени, как работает изоляция сетей и как при необходимости подключать контейнер к нескольким сетям.
👉Статья будет полезна для понимания базовой сетевой модели Docker и её практического применения.
Статья: https://sysadminium.ru/networks-in-docker/
👉На практических примерах показано, как контейнеры находят друг друга по имени, как работает изоляция сетей и как при необходимости подключать контейнер к нескольким сетям.
👉Статья будет полезна для понимания базовой сетевой модели Docker и её практического применения.
Статья: https://sysadminium.ru/networks-in-docker/
Sysadminium
Сети в Docker - Sysadminium
Из статьи вы узнаете, как устроены сети в Docker, зачем нужны пользовательские сети и как с их помощью изолировать и связывать контейнеры
👍5
👉Иногда возникает необходимость выяснить, как настроен сервер, который настраивали не вы. Вам нужно узнать, какие пакеты были установлены в системе и как они были настроены.
👉В этом вам может помочь утилита debsums. Её можно установить на любую deb-подобную систему (Debian, Ubuntu, Proxmox, Devuan):
Затем выполняете:
Из вывода вы узнаете, какие конфиги для установленных пакетов были изменены.
👉Утилита проверяет не только пакеты установленные из репозиториев. Любой пакет, установленный через dpkg будет проверен. Главное, чтобы пакет содержал checksums (а их может и не быть). Обычно в
А чтобы вывести список пакетов, у которых нет checksums, можно выполнить:
👉Кстати, утилита найдет не только установленное и настроенное ПО. Она также сможет определить, если в системе появились повреждённые или изменённые патчами приложения (вероятно, вредоносное ПО).
👉В этом вам может помочь утилита debsums. Её можно установить на любую deb-подобную систему (Debian, Ubuntu, Proxmox, Devuan):
sudo apt install debsums
Затем выполняете:
debsums -ca
-c - вывести только изменённые файлы;-a - проверить все файлы.Из вывода вы узнаете, какие конфиги для установленных пакетов были изменены.
👉Утилита проверяет не только пакеты установленные из репозиториев. Любой пакет, установленный через dpkg будет проверен. Главное, чтобы пакет содержал checksums (а их может и не быть). Обычно в
/var/lib/dpkg/info/ хранятся контрольные суммы пакетов. То есть в этом каталоге лежит файл вида имя_пакета.md5sums - именно в нём утилита ищет контрольные суммы.А чтобы вывести список пакетов, у которых нет checksums, можно выполнить:
debsums -l
👉Кстати, утилита найдет не только установленное и настроенное ПО. Она также сможет определить, если в системе появились повреждённые или изменённые патчами приложения (вероятно, вредоносное ПО).
👍7
Когда процесс завершает свою работу, он освобождает все свои ресурсы, но не освобождает свой PID (Process ID) в таблице процессов. Ядро отправляет родительскому процессу сигнал SIGCHLD, сообщая о завершении. Родитель должен считать статус завершения дочернего процесса (через
Отрезок времени между завершением процесса и освобождением его PID, называется состоянием Zombie 🧟. Процесс может остаться в состоянии Zombie, если родительский процесс жив, но не делает
Если родительский процесс завершится раньше дочернего, дочерний процесс будет переусыновлён процессом с PID=1 (init/systemd) 👶➡️👨👦. После чего именно он будет обрабатывать статус дочернего процесса, когда тот завершится.
Zombie-процессы не потребляют ресурсы (RAM/CPU) 💤, но занимают PID. Если исчерпать все PID, запуск новых процессов станет невозможен 🚫. В современных системах pid_max ≈ 4 млн, поэтому это возможно только при баге 🐞 или fork-бомбе 💣.
Zombie-процесс нельзя убить сигналами, так как он уже и так мёртв ☠️. А очистка возможна только через родительский процесс:
1️⃣ Находим zombie-процессы:
2️⃣ Определяем родителя:
3️⃣ Смотрим на родительский процесс:
4️⃣ Пытаемся завершить родительский процесс:
Если не помогло, действуем жёстче⚠️:
В этом случае все его дочерние процессы будут переусыновлены init/systemd, который и очистит PIDs Zombie.
Если же родителем является PID=1, то это уже баг системы, и поможет только перезагрузка 🔄.
Оцените пост лайком. Для меня это ценно! 👍
wait()), после чего ядро освобождает PID.Отрезок времени между завершением процесса и освобождением его PID, называется состоянием Zombie 🧟. Процесс может остаться в состоянии Zombie, если родительский процесс жив, но не делает
wait().Если родительский процесс завершится раньше дочернего, дочерний процесс будет переусыновлён процессом с PID=1 (init/systemd) 👶➡️👨👦. После чего именно он будет обрабатывать статус дочернего процесса, когда тот завершится.
Zombie-процессы не потребляют ресурсы (RAM/CPU) 💤, но занимают PID. Если исчерпать все PID, запуск новых процессов станет невозможен 🚫. В современных системах pid_max ≈ 4 млн, поэтому это возможно только при баге 🐞 или fork-бомбе 💣.
Zombie-процесс нельзя убить сигналами, так как он уже и так мёртв ☠️. А очистка возможна только через родительский процесс:
1️⃣ Находим zombie-процессы:
ps -eo pid,ppid,state,cmd | awk '$3=="Z"'
2️⃣ Определяем родителя:
ps -o ppid= <Child PID>
3️⃣ Смотрим на родительский процесс:
ps auxww | grep <Parent PID>
4️⃣ Пытаемся завершить родительский процесс:
kill -s SIGCHLD <Parent PID>
Если не помогло, действуем жёстче⚠️:
kill -9 <Parent PID>
В этом случае все его дочерние процессы будут переусыновлены init/systemd, который и очистит PIDs Zombie.
Если же родителем является PID=1, то это уже баг системы, и поможет только перезагрузка 🔄.
Оцените пост лайком. Для меня это ценно! 👍
👍19
✅Получить размер базы данных (вместо
✅Посмотреть перечень таблиц в базе:
✅Размер таблицы:
✅Самая большая таблица в текущей базе:
✅Перечень подключенных пользователей:
✅Текущая активность пользователя:
✅При настройке postgresql нужно править конфиг с параметрами. После правки некоторых параметров нужно перезагружать службу, а для некоторых хватает reload. Чтобы понять, какие параметры требуют перезапуска, можно использовать такую команду. Вы получите postmaster, если требуется restart. В примере я проверяю параметр shared_buffers.
✅Выполнить Vacuum и Analyze по всем базам (с помощью утилиты vacuumdb, а не консоли psql):
Спасибо что читаете😊 и ставите 👍
current_database() можем указать имя нужной базы):SELECT pg_size_pretty(pg_database_size(current_database()));
✅Посмотреть перечень таблиц в базе:
\dt
✅Размер таблицы:
SELECT pg_size_pretty(pg_relation_size('table_name'));✅Самая большая таблица в текущей базе:
SELECT
table_schema,
table_name,
pg_size_pretty(pg_total_relation_size(table_schema || '.' || table_name)) AS total_size
FROM
information_schema.tables
WHERE
table_schema NOT IN ('pg_catalog', 'information_schema')
AND table_type = 'BASE TABLE'
ORDER BY
pg_total_relation_size(table_schema || '.' || table_name) DESC
LIMIT 1;
✅Перечень подключенных пользователей:
# SELECT datname,usename,client_addr,client_port FROM pg_stat_activity;
✅Текущая активность пользователя:
SELECT datname FROM pg_stat_activity WHERE usename = 'postgres';
✅При настройке postgresql нужно править конфиг с параметрами. После правки некоторых параметров нужно перезагружать службу, а для некоторых хватает reload. Чтобы понять, какие параметры требуют перезапуска, можно использовать такую команду. Вы получите postmaster, если требуется restart. В примере я проверяю параметр shared_buffers.
SELECT name, context FROM pg_settings WHERE name = 'shared_buffers';
✅Выполнить Vacuum и Analyze по всем базам (с помощью утилиты vacuumdb, а не консоли psql):
vacuumdb -U postgres --all --analyze
Спасибо что читаете😊 и ставите 👍
👍15
Я решил немного отойти от серьёзных тем и передохнуть. Несколько следующих постов будут про простые Linux игры, доступные в репозиториях Mint/Ubuntu. Но уже скоро новая статья про Docker😀
✔️Quadrapassel - классический тетрис с графическим интерфейсом. Падающие фигуры, сбор линий и постепенное ускорение. Игра похожа на оригинальный Tetris.
Устанавливается из стандартных репозиториев Mint/Ubuntu:
✔️Quadrapassel - классический тетрис с графическим интерфейсом. Падающие фигуры, сбор линий и постепенное ускорение. Игра похожа на оригинальный Tetris.
Устанавливается из стандартных репозиториев Mint/Ubuntu:
sudo apt update
sudo apt install quadrapassel
👍6
📌В этой статье познакомимся с Docker Compose — инструментом для создания многоконтейнерных систем с помощью одного конфигурационного файла.
✅Docker Compose — это инструмент для подготовки и запуска многоконтейнерных систем. Он позволяет с помощью одного файла описать всю инфраструктуру приложения и затем запустить её одной командой. Таким образом, вместо ручного запуска десятков контейнеров, вы получаете централизованное и управляемое описание всего стека.
С помощью Docker Compose можно:
🔹Описать все сервисы (контейнеры) в одном файле docker-compose.yml.
🔹Запустить весь стек одной командой: docker compose up.
🔹Docker Compose автоматически создаёт сеть, тома и настраивает проброс портов.
🔹В результате, становится легко масштабировать сервисы, пересобирать контейнеры и работать с логами.
✅Docker Compose — это инструмент для подготовки и запуска многоконтейнерных систем. Он позволяет с помощью одного файла описать всю инфраструктуру приложения и затем запустить её одной командой. Таким образом, вместо ручного запуска десятков контейнеров, вы получаете централизованное и управляемое описание всего стека.
С помощью Docker Compose можно:
🔹Описать все сервисы (контейнеры) в одном файле docker-compose.yml.
🔹Запустить весь стек одной командой: docker compose up.
🔹Docker Compose автоматически создаёт сеть, тома и настраивает проброс портов.
🔹В результате, становится легко масштабировать сервисы, пересобирать контейнеры и работать с логами.
👍9
📌Я создал на сайте страничку.
👉Она содержит полную иерархию всех материалов сайта: от рубрик к статьям. Используйте для быстрой и удобной навигации по сайту.
👉Она содержит полную иерархию всех материалов сайта: от рубрик к статьям. Используйте для быстрой и удобной навигации по сайту.
👍18
👉В статье будет рассказано про инструмент OOM Killer — который призван уберечь систему от зависания в случае нехватки физической памяти, путём завершения какого-то процесса и освобождения его памяти.
👉Любой запущенный процесс в системе потребляет оперативную память. И если память заканчивается, то система может, либо зависнуть, либо завершить один из её процессов. И чтобы система не зависла, в ней существует механизм, который отвечает за завершение процессов в случае нехватки памяти — OOM Killer (Out-Of-Memory Killer).
👉OOM Killer выбирает процесс для завершения смотря на баллы oom_score. А именно, при нехватки памяти, будет завершён процесс с наибольшим количеством баллов oom_score.
👉Любой запущенный процесс в системе потребляет оперативную память. И если память заканчивается, то система может, либо зависнуть, либо завершить один из её процессов. И чтобы система не зависла, в ней существует механизм, который отвечает за завершение процессов в случае нехватки памяти — OOM Killer (Out-Of-Memory Killer).
👉OOM Killer выбирает процесс для завершения смотря на баллы oom_score. А именно, при нехватки памяти, будет завершён процесс с наибольшим количеством баллов oom_score.
Sysadminium
OOM Killer в Linux :)
В статье будет рассказано про инструмент OOM Killer - который призван уберечь систему от зависания в случае нехватки физической памяти, путём завершения какого-то процесса и освобождения его памяти.
👍5
✅Здесь мы разбираем продвинутые инструкции в Dockerfile: HEALTHCHECK — для проверки работы приложения, LABEL — для добавления меток, ARG — для автоматизации, SHELL — для изменения оболочки.
👉Если мы собираем самодостаточный контейнер, который не будет зависеть от docker-compose.yml, то лучше сделать HEALTHCHECK прям в Dockerfile. А если мы не собираем свой образ, а просто используем уже готовый образ в docker-compose.yml, тогда имеет смысл настроить HEALTHCHECK там.
👉LABEL позволяет добавлять произвольные теги: автор, версия, описание, лицензия и т.д. Используется для документации, аудита, автоматизации.
👉Аргументы (ARG) позволяют передавать значения во время сборки (docker build), например, версию ПО, режим (dev/prod), конфиги.
👉По умолчанию команды RUN, CMD, ENTRYPOINT выполняются через /bin/sh -c. Но можно задать свою оболочку, например, /bin/bash. Для этого используем - SHELL.
👉Если мы собираем самодостаточный контейнер, который не будет зависеть от docker-compose.yml, то лучше сделать HEALTHCHECK прям в Dockerfile. А если мы не собираем свой образ, а просто используем уже готовый образ в docker-compose.yml, тогда имеет смысл настроить HEALTHCHECK там.
👉LABEL позволяет добавлять произвольные теги: автор, версия, описание, лицензия и т.д. Используется для документации, аудита, автоматизации.
👉Аргументы (ARG) позволяют передавать значения во время сборки (docker build), например, версию ПО, режим (dev/prod), конфиги.
👉По умолчанию команды RUN, CMD, ENTRYPOINT выполняются через /bin/sh -c. Но можно задать свою оболочку, например, /bin/bash. Для этого используем - SHELL.
👍7
В этой статье я демонстрирую создание и управление виртуальной машиной на Proxmox VE 8 с помощью консольной команды qm. Вероятно, на Proxmox VE 9 всё работает так же, но я этого пока не проверял.
👉Например создать виртуальную машину можно с помощью такой команды:
Остальные примеры можете посмотреть в статье📝.
👉Например создать виртуальную машину можно с помощью такой команды:
qm create 110 \
--name "vm-test" \
--memory 1024 \
--cores 1 \
--ostype l26 \
--scsi0 data:10 \
--cdrom nfs-store:iso/debian-12.8.0-amd64-netinst.iso \
--net0 model=virtio,bridge=vmbr0
Остальные примеры можете посмотреть в статье📝.
👍6😱1
📌Иногда требуется сконвертировать виртуальный диск из ESXi для использования в PVE.
Обратите внимание, эта заметка ориентирована на ZFS. Если у вас LVM-thin или другой тип хранилища, то команды конвертации могут отличаться.
От ESXi у вас обычно есть два файла:
🔹<имя>.vmdk - это дескриптор (текстовый файл, который содержит метаданные о формате). Для конвертации (qemu-img convert) нужно использовать именно этот файл - он содержит ссылку на файл с данными.
🔹<имя>-flat.vmdk - файл с данными, который нужно положить в один каталог с первым файлом.
В Proxmox VE я для хранилища дисков виртуальных машин использую ZFS. А ZFS использует для дисков тома (zvol), которые предоставляют блочное устройство без файловой системы. Именно поэтому при конвертации я использую формат RAW.
Продолжение👇
Обратите внимание, эта заметка ориентирована на ZFS. Если у вас LVM-thin или другой тип хранилища, то команды конвертации могут отличаться.
От ESXi у вас обычно есть два файла:
🔹<имя>.vmdk - это дескриптор (текстовый файл, который содержит метаданные о формате). Для конвертации (qemu-img convert) нужно использовать именно этот файл - он содержит ссылку на файл с данными.
🔹<имя>-flat.vmdk - файл с данными, который нужно положить в один каталог с первым файлом.
В Proxmox VE я для хранилища дисков виртуальных машин использую ZFS. А ZFS использует для дисков тома (zvol), которые предоставляют блочное устройство без файловой системы. Именно поэтому при конвертации я использую формат RAW.
Продолжение👇
Итак, для начала создаём виртуальную машину на Proxmox VE. При создании нужно выбрать аналогичные настройки тем, что были на ESXi.
🔹Очень важно правильно выбрать тип диска (IDE / SATA / SCSI). Иначе система на виртуальной машине может не стартовать.
🔹На ESXi обычно используется сетевой адаптер VMXNET3/E1000. На PVE можно выбрать e1000.
Затем, убедимся, что размер zvol не меньше чем виртуальный размер VMDK, это делается с помощью команды:
Желательно чтобы размер был даже немного больше (на 1-2GB), чтобы избежать ошибки при конвертации.
После этого, конвертируем виртуальный диск (vmdk) в zvol, который был создан для новой виртуальной машины на PVE.
❗️Виртуальная машина на PVE в этот момент должна быть выключена.
❗️Путь /dev/zvol/... зависит от имени пула и VMID. В моём случае zpool=data, а vmid=110.
🔹Очень важно правильно выбрать тип диска (IDE / SATA / SCSI). Иначе система на виртуальной машине может не стартовать.
🔹На ESXi обычно используется сетевой адаптер VMXNET3/E1000. На PVE можно выбрать e1000.
Затем, убедимся, что размер zvol не меньше чем виртуальный размер VMDK, это делается с помощью команды:
# qemu-img info "<имя>.vmdk"
Желательно чтобы размер был даже немного больше (на 1-2GB), чтобы избежать ошибки при конвертации.
После этого, конвертируем виртуальный диск (vmdk) в zvol, который был создан для новой виртуальной машины на PVE.
❗️Виртуальная машина на PVE в этот момент должна быть выключена.
# qemu-img convert -f vmdk -O raw "<имя>.vmdk" /dev/zvol/data/vm-110-disk-0
❗️Путь /dev/zvol/... зависит от имени пула и VMID. В моём случае zpool=data, а vmid=110.
👍5
В этой статье я опишу, как выполнить расширение диска и файловой системы виртуальной машины Linux на Proxmox VE 8. Разберу 2 кейса: простое расширение файловой системы Ext4, и расширение LVM с разделом XFS.
Допустим нам не хватает места для хранения файлов в виртуальной машине. Proxmox VE 8 и 9 легко даёт расширить диск виртуальной машины, особенно если в качестве хранилища используется ZFS. Но просто расширить диск виртуальной машины мало, нужно ещё внутри расширить файловую систему. О том как это делается читайте в этой статье.
Допустим нам не хватает места для хранения файлов в виртуальной машине. Proxmox VE 8 и 9 легко даёт расширить диск виртуальной машины, особенно если в качестве хранилища используется ZFS. Но просто расширить диск виртуальной машины мало, нужно ещё внутри расширить файловую систему. О том как это делается читайте в этой статье.
Sysadminium
Расширение диска VM (Linux) на Proxmox VE 8 - Sysadminium
В этой статье я опишу, как выполнить расширение диска и файловой системы виртуальной машины Linux на Proxmox VE 8. Разберу 2 кейса: простое расширение файловой системы Ext4, и расширение LVM с разделом XFS.
👍8
📌В этой статье описаны инструменты для сканирования образов Docker на уязвимости: docker scan и trivy. Но основное внимание уделено именно trivy.
👍9
tune2fs - стандартная утилита Linux для настройки параметров файловых систем семейства ext (ext2, ext3, ext4). Позволяет изменять критические параметры без переформатирования тома.Основные возможности:
🔹Настройка интервалов проверки fsck (по количеству монтирований или времени).
🔹Изменение метки тома (label).
🔹Регулировка процента зарезервированных блоков.
🔹Просмотр детальной информации о ФС.
🔹Управление параметрами журналирования (для ext3/ext4).
Продолжение ниже👇
👍7
👉Просмотр всех параметров ФС:
👉Проверка fsck каждые 20 монтирований или раз в 7 дней:
- Если указать нули, то это отключит автоматические проверки.
👉Изменение метки тома:
👉Включение/отключение журналирования (требует размонтирования):
💡Для изменения параметров корневой ФС (
$ sudo tune2fs -l /dev/sda1
👉Проверка fsck каждые 20 монтирований или раз в 7 дней:
$ sudo tune2fs -c 20 -i 7d /dev/sda1
tune2fs 1.47.0 (5-Feb-2023)
Setting maximal mount count to 20
Setting interval between checks to 604800 seconds
$ sudo tune2fs -l /dev/sda1 | egrep "Check interval|Maximum mount"
Maximum mount count: 20
Check interval: 604800 (1 week)
- Если указать нули, то это отключит автоматические проверки.
👉Изменение метки тома:
$ sudo tune2fs -L "root" /dev/sda1
tune2fs 1.47.0 (5-Feb-2023)
$ sudo tune2fs -l /dev/sda1 | grep "volume name"
Filesystem volume name: root
👉Включение/отключение журналирования (требует размонтирования):
$ sudo tune2fs -O has_journal /dev/sda1 # включить
$ sudo tune2fs -O ^has_journal /dev/sda1 # отключить
💡Для изменения параметров корневой ФС (
/) используйте загрузку с LiveCD.👍7