Posts By: Фомин Сергей

Kubelet: Observed a panic: «invalid memory address or nil pointer dereference»

При добавлении CPU на ноду, kubelet не запускается, в логах видим ошибку, если выбрать последние записи:

journalctl -u kubelet -n 1000
Observed a panic: "invalid memory address or nil pointer dereference" (runtime error: invalid memory address or nil pointer dereference

Проблема в том что скорее всего kubelet запущен с опцией –cpu-manager-policy=static, который фиксирует конфигурацию по CPU в файле /var/lib/kubelet/cpu_manager_state:

cat /var/lib/kubelet/cpu_manager_state
{"policyName":"static","defaultCpuSet":"0-9","checksum":688938613}

Конфиг kubelet:

/etc/systemd/system/kubelet.service

Продолжить чтение

Антуан де Сент-Экзюпери «Маленький принц»

Люди забираются в скорые поезда, но они сами не понимают, чего они ищут, поэтому они не знают покоя, бросаются то в одну сторону, а то в другую… И все напрасно… Глаза слепы. Искать надо сердцем.

Отладка при неудачном деплое в Kubernetes c Helm Hook в GitLab CI

Используемое ПО: Gitlab CI, Helm, Docker, Kubernetes
Цель: в случае неудачного деплоя, получить информацию о проблеме в CI, а не ходить в k8s или Kibana руками и не смотреть логи подов
Вводная: для деплоя в кластер Kubernetes используется Helm версии 3 и Gitlab CI, отдельный сервер для сборки (не DinD), с которого доступен Kubernetes API. Данный вариант основан на ключе Helm –atomic, который осуществляет автоматический откат неудавшегося релиза. Идея в том, чтобы не запускать отдельно helm rollback, а использовать Hook с аннотацией pre-delete, которая перед удалением релиза запустит под и соберет логи с NOT READY подов, а далее с помощью after_script выведет данные логи в CI.

К реализации…

Продолжить чтение

Тюнинг Direct I/O в OpenVZ контейнерах

По умолчанию запись во все файлы, открытые без флага O_DIRECT, осуществляется через write-back cache. Это не только уменьшает latency (время ожидания) записи данных на диск для приложения (системный вызов write() завершится, как только данные будут скопированы в write-back cache, не дожидаясь реальной записи на диск), но и позволяет планировщику I/O ядра эффективнее распределять ресурсы диска между процессами, группируя I/O запросы от приложений.

При этом некоторые категории приложений, например, базы данных, сами эффективно управляют записью своих данных, выполняя большие последовательные I/O запросы. Поэтому зачастую такие приложения открывают файлы с флагом O_DIRECT, который указывает ядру писать данные в такой файл, минуя write-back cache, напрямую из памяти пользовательского приложения. В случае работы одной базы данных на хосте такой подход оказывается эффективнее, чем запись через кэш, поскольку I/O запросы от базы данных уже выстроены оптимальным образом и нет необходимости в дополнительном копировании памяти из пользовательского приложения в write-back cache.

В случае работы нескольких контейнеров с базами данных на одном хосте данное предположение оказывается неверным, так как планировщик I/O в ядре Linux не может оптимально распределять ресурсы диска между приложениями, использующими Direct I/O. Поэтому по умолчанию в ядре OpenVZ Direct I/O для контейнеров выключено, и все данные пишутся через write-back cache. Это вносит небольшие накладные расходы в виде дополнительного копирования памяти из пользовательского приложения в write-back cache, при этом позволяя планировщику I/O ядра эффективнее распределять ресурсы диска.

Продолжить чтение

MAC OSX – SSH Error «No matching key exchange method found.»

На MacOS Mojave при подключении к CentOS 6 по SSH можно получить ошибку:

MacBook:~ sf$ ssh root@10.10.10.1
Unable to negotiate with 10.10.10.1 port 22: no matching key exchange method found. Their offer: diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1

Решением проблемы является добавление в конфиг /etc/ssh/ssh_config:

sudo vi /etc/ssh/ssh_config 

Host 10.10.10.1
  KexAlgorithms +diffie-hellman-group1-sha1

Продолжить чтение

CentOS 6: обновление корневых сертификатов

Все кто не перешел на новый CentOS 7 сталкиваются с различными проблемами устаревания ПО, когда новых версий уже нет, а старые не работают как нужно, одна из проблем – ошибка SSL при работе с внешними сервисами, например Яндекс.Почта, ошибка выглядит следующим образом:

Error: SSL_connect returned=1 errno=0 state=error: certificate verify failed

Решение для CentOS 6:

update-ca-trust force-enable
curl https://www.certum.pl/CA.pem > /etc/pki/ca-trust/source/anchors/certum_pl_CA.pem
update-ca-trust extract

Kubernetes. Установка Minikube на MacOS

На MacOS, Minikube использует VirtualBox как гипервизор по-умолчанию, который мы будем использовать в данной статье. Однако, если вы желаете использовать xhyve гипервизор для запуска Minikube VM, тогда, при запуске, вам нужно будет добавить –vm-driver=xhyve

Далее, мы научимся как устанавливать Minikube на MacOS:

  • Установите VirtualBox на MacOS.
  • Установите Minikube
  • Мы можем скачать последнюю версию с официальной страницы minikube. Однажды скачав, нам нужно сделать ее исполняемой и скопировать в PATH.

    curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.24.1/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
    

    Продолжить чтение

    Установка и настройка сертификатов Let’s Encrypt

    На сегодняшний день, бесплатные SSL-сертификаты довольно часто используются в работе сайтов, их использование оправдано в тех случаях, когда мы желаем сделать свой сайт более безопасным и тем самым повысить его рейтинг со стороны SEO.

    До недавних пор большой популярностью пользовались сертификаты от SlartSSL и WoSign, однако, многие браузеры перестали им доверять и большинство сайтов оказалось с нерабочими, но валидными SSL-сертификатами. Толку от них нет, если пользователь видит ошибку при открытии сайта, если бы не решение от Let’s Encrypt, то в нашем арсенале остался бы только один вариант – покупать сертификат :)

    Итак, приступим к установке и настройке Let’s Encrypt:

    rpm -ihv http://rpms.southbridge.ru/southbridge-rhel6-stable.rpm
    yum clean all
    yum install letsencrypt -y
    

    Продолжить чтение