LINUX.ORG.RU

Сообщения WoozyMasta

 

PSI (Pressure Stall Information) для оффтопика

Приветствую!

⚠️ Disclaimer

Сразу хочу извинится, что вопрос по оффтопику, но этот вопрос смогут понять скорее всего только пользователи онтопика.

В гугле видимо меня забанили, найти не смог, а про форточки забыл я как про страшный сон. Да, и скорее всего выговориться просто нужно.

Суть проблемы, есть куча подвластных мне виртуалок (суммарно ядер на 300 и 0.8 Tb ОЗУ) работающих в не зоне моих полномочий, на серверах Hyper-V. Виртуалки неистово тупят, гипервизор крадёт все ресурсы, я даже боюсь представить насколько сильно они перепроданы. С одного запроса в простую веб-морду, порядка 30 GET на статику всякую и пару запросов в БД, в гостевой RHEL на CPU наблюдаю IO wait 100%. Естественно, когда туда идут коллеги работать по своим задачам, всё дико тупит и IO в потолке постоянно, мне кидают предъявы. Обидно.

Несколько недель у меня идут ожесточённые бои с админом офтопика. Я говорю - «ты душишь мои виртуалки», а он в ответ - «у меня всё работает, на против виртуалки горит зелёная лампочка».

Так вот, захотелось мне попросить, у него метрики по типу PSI Pressure Stall Information, во первых ему доказать, где и почему он не прав, а во вторых использовать это как аргумент к руководству. Но вот, что именно просить у него (в виндовой терминологии) я не знаю.

Работаем мы все в одной организации, и всё насквозь пропитано бюрократией, просто так, что то поменять здесь сложно. Да и админ скорее не из вредности, а просто по не опытности не может с этим, что-то сделать.


Если знает кто ответ, можете поделиться ссылкой на нужный мне документ. А коли мимо проходили, можете накинуть пару баек про виртуализацию на оффтопике и какие батхерты имели, и как с ними справлялись.

Всем добра.

 , , ,

WoozyMasta
()

CoreDNS и NXDOMAIN

Всем привет, я хз, что происходит.

Есть CoreDNS и домен кубера main.tld.com и рекурсивная DNS запись *.main.tld.com ведущая на лоад балансер.

Что бы в поды возвращалась рекурсивная запись используется template в конфиге CoreDNS.

    .:53 {
        errors
        health {
           lameduck 5s
        }
        ready
        kubernetes main.tld.com in-addr.arpa ip6.arpa {
           pods insecure
           fallthrough in-addr.arpa ip6.arpa
           ttl 30
        }
        prometheus :9153
        template IN A main.tld.com {
           match ^(?P<a>[a-zA-Z0-9\-]*)[.]main[.]tld[.]com[.]$
           answer "{{ .Name }} 60 IN A 10.0.1.1"
           fallthrough
        }
        forward . /etc/resolv.conf {
           max_concurrent 1000
        }
        cache 30
        loop
        reload
        loadbalance
    }

В итоге проблема, при выполнении nslookup dev.main.tld.com в ответ получаю IP адрес и ошибку:

** server can't find dev.main.tld.com: NXDOMAIN

В template дополнительно добавить rcode NXDOMAIN не могу, можно только или answer или rcode

dig или getent нормально возвращают IP без возмущений, проблема только в nslookup, в связи с чем aspnet приложения не хотят резолвить имена (java, go, python работают на ура)

Куда копать?

Сразу скажу в DNS я не силен, как сюда добавить NXDOMAIN?

 , , ,

WoozyMasta
()

Помоги перенести скрипт bash -> sh

Здравствуй, мой дорогой, уважаемый друг!

У меня возникили трудности при написании скрипта на shell, я так сильно привык к bash, что немного вошел в ступор и надеюсь на твою помощь.

Задача

Имеем:

export APP_NAME='test'
export APP_DESCRIPTION='Test app'
export APP_VERSION='beta'
export APP_COMMIT_HASH='000000000'
# и черт пойми еще какие APP_* могут быть
export PROJECT_DIR='./src'

На bash-е сделал так:

#!/bin/bash
for k in ${!APP_*}; do
  grep -q "^$k" "$PROJECT_DIR/.env" && \
    sed -i "s|^$k=.*|$k=${!k}|" "$PROJECT_DIR/.env" || \
    printf '%s=%s\n' "$k" "${!k}" >> "$PROJECT_DIR/.env"
done

Очень нужно перенести на shell, там где это будет работать - товарищ майор запрещает использовать bash. На скорую руку сделал так:

#!/bin/sh
vars=$(env | grep -o '^APP_.*=' | tr -d '=')
for k in $vars; do
  eval "v=$k"
  grep -q "^$k" "$PROJECT_DIR/.env" && \
    sed -i "s|^$k=.*|$k=$v|" "$PROJECT_DIR/.env" || \
    printf '%s=%s\n' "$k" "$v" >> "$PROJECT_DIR/.env"
done

Проблема

  • eval == зло
  • сложное получение списка названий переменных

Изящный способ то существует?

Скорее всего env и eval можно заменить на set, но решил спросить у тебя, может быть подскажешь что-то более практически и эстетически верное.

Решение

Всем спасибо за помощь!

Пока оставил в таком виде:

#!/bin/sh
cat /proc/self/environ | tr -d '\n' | tr '\0' '\n' | \
grep '^APP_[a-zA-Z0-9_-]*=.*$' | \
while IFS='=' read -r k v; do
  grep -q "^$k" "$PROJECT_DIR/.env" && \
    sed -i "s|^$k=.*|$k=\"$v\"|" "$PROJECT_DIR/.env" || \
    printf '%s="%s"\n' "$k" "$v" >> "$PROJECT_DIR/.env"
done

 , ,

WoozyMasta
()

Nginx, if http_user_agent ~* curl не определять error_page

Привет!
Есть условный include конфиг с error_page для всего, но бывает это создает проблемы тем, что затирает ответы в разных API где статус > 400 и есть полезная информация в теле ответа.

error_page 400 /400.html;
error_page 401 /401.html;
error_page 402 /402.html;
...
error_page 503 /503.html;
error_page 504 /504.html;
error_page 505 /505.html;

location /errorpage {
        alias /usr/share/nginx/errorpage;
        allow all;
}

location ~ /(10[0-3]|2[02][1-9]|30[1-8]|4[0125][0-9]|50[0-9])\.html {
        root /usr/share/nginx/errorpage;
        allow all;
        internal;
}

Хочу к примеру, что бы если user agent = curl, то директивы error_page не определялись. Только как это сделать правильно я пока не понял, в идеале бы еще без if условий реализовать.

Что то по типу такого представляю себе:

if ($http_user_agent !~* (curl|wget)) {
  error_page 400 /400.html;
  error_page 401 /401.html;
  error_page 402 /402.html;
...
  error_page 503 /503.html;
  error_page 504 /504.html;
  error_page 505 /505.html;
}

Может быть кто решал уже такую задачу или знает ответ?

Спасибо.

 , ,

WoozyMasta
()

Цикл в цикле или вложеный в словарь список

Привет!

Пишу, я значит, простую (казалось) роль для создания пользователей и групп на узлах в сети, копирование ключей и т.п.

Вот пример вводной конфигурации:

users:
  woozymasta:
    enabled: yes
    sudoers: yes
    comment: 'Woozy Masta'
    group: 'ops'
    shell: '/bin/bash'
    groups: [ sudo, wheel, docker, lxd, adm ] # Зоопарк дистрибутивов
  
  some_user:
    enabled: yes

ОК, первые шаги идут, пользователь создан, теперь нужно добавить группы и только те что есть на узле.

Казалось не проблема, получмем список групп, если желаемой группы нет в списке то её просто не добавляем к пользователю.

- name: Get available groups list
  getent:
    database:     'group'
    split:        ':'

- name: Add additional groups to user if group exsist
  user:
    name:         "{{ item.key }}"
    groups:       "{{ item.value.groups | default('') }}"
    append:       yes
  loop: '{{ users|dict2items }}'
  when: item.value.groups.key in getent_group

Но на проверке when: item.value.groups.key in getent_group падаем с логичной ошибкой, что в списке нет такого атрибута как ключ.

The conditional check 'item.value.groups.key in ansible_facts.getent_group' failed. The error was: error while evaluating conditional (item.value.groups.key in ansible_facts.getent_group): 'list object' has no attribute 'key'

Но вот как решить эту задачу так и не понял, subelements крутил по всякому, join-ом и map-ом пытался обработать, в json даже превращал, как только не куртил но успеха не добился.

Помогите пожалуйста эту проверку сделать правильно. ignore_errors не использую, должно же быть элегантное решение.

 , ,

WoozyMasta
()

Центральное хранилище и распределение SSH публичных ключей

Приветствую.

Вновь задумался о центральной хранилке и менеджере пабкеев, для себя представляю ansible сценарий и длинный конфиг с сопоставлением пользователь/группа_пользователей и хост/группа_хостов. Велосипед же очередной, но, а разве есть альтернативы? Де еще бы и с web интерфейсом, а в идеале интегрировать с каким нибудь keycloak.

LDAP, Kerberos, PAM, etc. только усложняет задачу и не везде есть

Кто может посоветовать что-то дельное? Гугл по прежнему ведет или на проприаритарщину или на окаменелости жизнедеятельности мамонта.

Спасбо.

 ,

WoozyMasta
()

Проба на Python

Приветствую.

Вот многие кричат что bash ненужен, бери python. Взял, и без опыта что то да состряпал.

Вот прям чувствую башизм в питоне, что сделал так, что не так, хочу критики и советов.

https://github.com/WoozyMasta/smtp-test

Помогите дельнымы советами, что бы в следующи раз делал лучше. Спасибо.

 ,

WoozyMasta
()

Bare-metall k8s vs AKS

Приветствую.

Тут мне прилетело сверху задание, описать плюсы Bare-metall Kubernetes против Azure Kubernetes.

Суть в том, что если не обосную на языке менеджеров почему AKS хуже, заставят юзать AKS и azure stack. А я не хочу! Но одного «не хочу мало».

Пока унылое сравнение выходит, как то так:

K8SAKS
Можно на любой платформеТолько Azure
Дохрена реализаций сетиТолько одобренные Azure
Выбор Enterprise сектораВыбор Small-Business сектора

Может кто накинет вбросов чем свой собственный K8S лучше AKS? Только пожалуйста, не просто ненужно!, а может быть хоть какие то обоснованные +/-.

И я хотел бы еще сказать, что AKS это вендорлок, но это не так, а как доказать обратное?)


Еще проблема, что все это нужно отдать на птичьем языке. Надеюсь осилю.

Спасибо.

 , , ,

WoozyMasta
()

Порекомендуйте NAS

Приветствую.

Подскажите кто в теме, хочу для дома NAS без навязчивой проприаритарщины, в идеале:

  • симпатична коробка
  • 1-2шт. rg45 100/1000
  • корзина на 2-4 диска
  • возможно отдельный отсек для ssd, может m2 (для системы)
  • возможность расширения RAM
  • не шумный
  • x86-64 возможно atom или celeron, а может и ARM если оно пригодно для этих задач
  • плюсом будет наличие GPIO/UART/RS-232 но не обязательно

Хочется самому поставить любимый дистрибутив, правильную фс и lvm, зашифровать как мне нужно диски, настроить шары, почтовый сервер на 3 учетки, небольшой бложек и gitea.

Расчитываю на бюджетный вариант, возможно DIY kit, но с радостью посмотрю и на топ сегмент.

Прошу поделиться ссылками или порекомендовать производителя.

Спасибо)

 , ,

WoozyMasta
()

k8s, kworker съедает pid-ы

Приветствую.
Может сталкивался кто или подскажите как анализировать данную проблему?

Есть кубер:

VERSION   OS-IMAGE                KERNEL-VERSION               CONTAINER-RUNTIME
v1.15.3   CentOS Linux 7 (Core)   3.10.0-862.11.6.el7.x86_64   docker://18.9.6

Иногда при обновлении образов получаю

Failed create pod sandbox: rpc error: code = Unknown desc = failed to start sandbox container for pod "ecpmz-7579f86c7c-rjt4b": Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "process_linux.go:297: getting the final child's pid from pipe caused \"EOF\"": unknown

Считаю процессы:

ps aux | wc -l
1024

Смотрю настройки:

cat /proc/sys/kernel/pid_max
131072
cat /proc/sys/user/max_user_namespaces 
10240
cat /proc/sys/fs/file-max
1624080

grep Limit /usr/lib/systemd/system/docker.service
LimitNOFILE=1048576
LimitNPROC=infinity
LimitCORE=infinity

ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 64025
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65535
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 256957
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Видимо лимит пидов у докера свой. Съедает пиды kworker, плодиться куча после чего исчезают и все работает в штатном режиме.

...
root        801  0.0  0.0      0     0 ?        R    12:43   0:00 [kworker/0:253]
root        802  0.0  0.0      0     0 ?        S    12:43   0:00 [kworker/0:254]
...

Проходит немного времени и пиды исчезают.

В dmesg тихо. Пробовал perf record/report но ничего не понял, куда смотреть и как искать проблему.

Может дело в версии докера? Но на KVM виртуалках все ок, на виртулаках в Azure (это не я, меня заставили) такая беда, версии и RPMки идентичны и из одного места.

 , , , ,

WoozyMasta
()

pipe в фоне, как получить rc всех элементов пайпа и pid

Привет.

Есть pipe который запускаем в фоне, необходимо получить $PIPESTATUS элементов пайпа и pid фонового таска. Как реаизовать данную затею?

Хватило пока на вот это, но не работает.

{(command1 | command2 | command3) &}; pid=($! ${PIPESTATUS[@]})

Помогите пожалуйста. vodz

 

WoozyMasta
()

RPM createrepo и Nginx 403 для новых пакетов

Приветствую, словил жёсткий затуп, прошу помощи прояснить проблему.

Есть RPM репозиторий в CentOS7, все работает как положено, добавил новые пакеты и для них в ответ 403, права везде одинаковы.

( Конфиги и проверка )

Nginx conf ok, даже сделал reboot и очистил /var/cache/nginx.

Непонятно совсем(

 , ,

WoozyMasta
()

k8s offline registry

Приветствую.

Стала перед мной такая задача:

Есть изолированная сеть, доступа к интернету нет, совсем.
На хосты в сети ансиблом разворачивается кластер k8s из локального rpm репо.
Не понятно как быть с докер образами, пока что использую docker save/load, а хочется все устанавливать из локального docker registry.

Сразу оговорюсь что опыт работы с кубером поверхностный.

Вопросы:

  • Можно ли как-то запушить все нужные образы в registry с исходными именами и тегами, а не docker push localhost.localdomain:5000/alpine? К примеру может быть что-то наподобии tar xf docker-image.tar -C /var/lib/registry
  • Как избавится от возможных проблем с деплоем подов? Допустим мне дали compose.yml, я его конвертирую при помощи kompose и отдаю kubectl apply. Как k8s поймет, что когда публичный registry недоступен ему следует взять образ из приватного registry (он подключен)?
  • Возможно ли выполнить инициализацию кластера из приватного registry, не пойму как это объяснить kubectl

Может сталкивался кто с таким? Господа, буду признателен за содействие и направление на путь истинный.

 , , ,

WoozyMasta
()

sed дописать в начало строки используя регулярку

Приветствую.

Так работает:

echo -e "one\ntwo\nthree\ntwo\none" | sed -e '/^tw/s/^/#/g'
# or
echo -e "one\ntwo\nthree\ntwo\none" | sed -e 's/^tw/#&/g'

Так не работает:

echo -e "one\ntwo\nthree\ntwo\none" | sed -e '/\(^tw|^th\)/s/^/#/g'
# or
echo -e "one\ntwo\nthree\ntwo\none" | sed -e 's/^\(tw|th\)/#&/g'

Как правильно использовать выражения в такой конструкции?

Спасибо.

 

WoozyMasta
()

Ansible increment hostname number

Приветствую.

Хочу нодам выдавать имена с порядковым номером, но чёт ни как(

---
- name: Increment variable
  set_fact: node_number={{ node_number | int + 1 }}

- name: Change node hostname
  hostname:
    name: "{{ hostname_node }}{{ node_number }}"

в итоге

TASK [kubernetes/node : Increment variable] ******************************************************************************************
task path: ~/roles/kubernetes/node/tasks/main.yml:2
Friday 31 May 2019  17:34:43 +0300 (0:00:01.000)       0:00:23.367 ************ 
ok: [10.100.100.181] => {"ansible_facts": {"node_number": "1"}, "changed": false}
ok: [10.100.100.182] => {"ansible_facts": {"node_number": "1"}, "changed": false}

TASK [kubernetes/node : Cheange node hostname] ***************************************************************************************
task path: ~/roles/kubernetes/node/tasks/main.yml:5
Friday 31 May 2019  17:34:44 +0300 (0:00:00.062)       0:00:23.430 ************ 
ok: [10.100.100.181] => {"ansible_facts": {"ansible_domain": "", "ansible_fqdn": "k8s-n1", "ansible_hostname": "k8s-n1", "ansible_nodename": "k8s-n1"}, "changed": false, "name": "k8s-n1"}
ok: [10.100.100.182] => {"ansible_facts": {"ansible_domain": "", "ansible_fqdn": "k8s-n1", "ansible_hostname": "k8s-n1", "ansible_nodename": "k8s-n1"}, "changed": false, "name": "k8s-n1"}

 

WoozyMasta
()

Удаленный ключ для автоматической расшифровки тома

Приветствую.

Вопрос теоретического характера, ничего не реализовано и не воплощено в жизнь, просто сбор мнений и анализ возможностей.

Представьте себе ситуацию. Есть сервер с шифрованными томами, при запуске хочется автоматического старта для сервера без запроса пароля.

  • Сервер сам идет curl-ом к https://keyserv.loc/srv1-token используя plain-auth.
  • Сам же сервер keyserv.loc пускает к себе в location srv1-token только с адреса сервера srv1.
  • На сервере ключей keyserv.loc есть telegram бот который дает возможность удалить пароль от тома или приостановить выдачу, а после двух запросов в 1 час вовсе просит подтверждения для выдачи пароля.

С этим кажется все ясно, но как заставить dm-crypt luks брать пароль из выхлопа скрипта, и какие есть на это таймауты?

Велосипед конечно не гарантирует безопасность, возможно есть какие другие решения?

Возможно ли такой метод расширить fail-safe usb? Сервер ключей недоступен, на экране ничего не предлагает ввести, но воткнув чудо usb флешку сервер стартует.

---------------

Где и что почитать, какие есть идеи?

 , , ,

WoozyMasta
()

Proxmox, нужен ли?

Здравствуйте. Хочу услышать ваше мнение на риторический вопрос, «Proxmox зло?»

Имеется четверка неплохих серверов, установлен LXD кластер и KVM, никакие контейнеры/виртуалки еще не развернуты, билд меня устраивает, настроен и готов к внедрению.

Но, офисная иерархия и склад ума начальника IT остались в 90х, все видели только windows и esxi, сотрудники IT боятся шела и требуют от меня GUI с рюшечками, ибо когда я уйду они ничего не смогут сделать (скорее это правда).

Я задумался уступить, смотрю на proxmox и опасаюсь, а вдруг:

  • Я кошерно напишу конфиг сервиса X, весь опишу коментами, а кто-то из гуишки отметит какой-то чекбокс и весь мой конфиг канет в лету. Полагаю такое вполне возможно.
  • Возможно логика разработчиков proxmox идет параллельно моей и мои хотелки не удастся реализовать не поломав одно из двух.
  • Баги, косяки, и прочие прелести?

Да и хотелось бы никаких апачи и лишних пакетов, можно ли как то не собирая по крупицам установить толкько нужное?

Мою компетентность в вопросе о proxmox можно условно взять на отметке нуля, прочитал статью на вики по диагонали. Одного только virt-manager it отделу не хватит.

Сервера:

  • lvm over mdadm raid 2шт
  • lvm over lsi sas 2шт
  • 1g сеть за персональным mikrotik разные интерфейсы в разные бриджи
  • ceph или drdb не планируется

 , ,

WoozyMasta
()

Заблокировать отправку почты из локальной сети

Здравствуйте.

Есть сеть, в которой имеются неподконтрольные пользователи с разными девайсами. Кто-то явно шлет спам, возможно заражен, а может просто издеваются. Хочу заблокировать отправку почты из локальной сети всем кроме почтового сервера, ищу решение и надеюсь судари подскажут православное решение задачи.

Имеется прозрачный squid и mikrotik. Вот думаю как сие реализовать. Пока что смотрю в сторону layer 7 в mikrotik, но не пойму как элегантно реализовать.

Заранее спасибо за дельные советы по треду.

 ,

WoozyMasta
()

Yahoo spamassassin, непонятный мне фильтр.

Здравствуйте, yahoo начал футболить письма,

 pts rule name              description
---- ---------------------- --------------------------------------------------
 0.0 URIBL_BLOCKED          ADMINISTRATOR NOTICE: The query to URIBL was blocked.
                            See
                            http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block
                             for more information.

-1.0 ALL_TRUSTED            Passed through trusted hosts only via SMTP
 0.0 HTML_FONT_LOW_CONTRAST BODY: HTML font color similar or identical to
                            background
 0.0 HTML_MESSAGE           BODY: HTML included in message
 0.8 HTML_IMAGE_RATIO_02    BODY: HTML has a low ratio of text to image area
 2.5 UNICODE_OBFU_ASC       Obfuscating text with unicode
 2.2 FORGED_MSGID_YAHOO     Message-ID is forged, (yahoo.com)
 0.1 FROM_EXCESS_BASE64     From: base64 encoded unnecessarily

С HTML_IMAGE_RATIO_02 и UNICODE_OBFU_ASC это все отдел маркетинга и 1С кодирующая в base64 письма. Тут ничего менять не буду.

Вот непонятно как исправить вот это:

 2.2 FORGED_MSGID_YAHOO     Message-ID is forged, (yahoo.com)
появились совсем недавно, неделю назад где-то.

Я то понимаю что yahoo никому не нужен, и это всего 0.001% от почтового трафика, но всё же)

 ,

WoozyMasta
()

SSH RemoteCommand

Приветствую!

Собственно хочу сразу в контейнере оказаться выполнив ssh %container_name%

В контейнере ssh может не оказаться, проксирование и портфорвард не предлагать.

В ~/.ssh/config воткнул это:

Host mycontainer
     HostName 10.10.0.51
     User woo
     RemoteCommand /usr/bin/lxc exec mycontainer bash

ничего не происходит, lxc хочет иметь управляющий терминал, руками используя -t все ок.

ssh 10.10.0.51 -t "/usr/bin/lxc exec mycontainer bash"

Вопросы:

  • 1 - Не вижу впритык как в конфиге ssh указать использование аргумента -t
  • 2 - Как бы так изловчится что бы не плодить для каждого контейнера правило в конфиге (ну очень много их), а к примеру задать массив имен и подставлять команду, по типу:
    Host [foo bar baz]
         HostName 10.10.0.51
         User woo
         RemoteCommand /usr/bin/lxc exec $Host bash
    

 ,

WoozyMasta
()

RSS подписка на новые темы