Updates rtfm.co.ua 🇺🇦 – Telegram
Updates rtfm.co.ua 🇺🇦
723 subscribers
35 photos
457 links
Канал @rtfm - новые посты на https://rtfm.co.ua.
Обсуждения - группа @rtfmco https://t.me./rtfmco
Download Telegram
AWS: Database Migration Service – обзор и пример миграции self-hosted MariaDB в AWS Aurora RDS

В общем-то – продолжение эпопеи с миграцией приложения из Digital Ocean в Amazon Web Services. В посте Kubernetes: нагрузочное тестирование и high-load тюнинг — проблемы и решения мы тестировали работу самого приложения в Kubernetes, следующая задача – перенести базу данных. Сейчас база данных проекта находится в Digital Ocean, на обычном дроплете с Linux и MariaDB.…

https://rtfm.co.ua/aws-database-migration-service-obzor-i-primer-migracii-self-hosted-mariadb-v-aws-aurora-rds/
AWS: Database Migration Service, часть 2 – нет AUTO_INCREMENT и индексов. Фиксы для “foreign key constraint fails” и логов CloudWatch

Продолжение поста AWS: Database Migration Service — обзор и пример миграции self-hosted MariaDB в AWS Aurora RDS. И всё было хорошо, пока мы не запустили первые тесты, которые начали отваливаться с ошибками: [2020-08-28 17:13:02] local.ERROR: SQLSTATE[HY000]: General error: 1364 Field ‘id’ doesn’t have a default value Начинаем проверять таблицы, и видим, что поле ID потеряло…

https://rtfm.co.ua/aws-database-migration-service-chast-2-net-auto_increment-i-indeksov-fiksy-dlya-foreign-key-constraint-fails-i-logov-cloudwatch/
Redis: Master-Slave репликация и запуск в Kubernetes

Задача – запустить Redis в Kubernetes. Используем Master-Slave репликацию и Sentinel для мониторинга и failover. См. Redis: репликация, часть 2 — Master-Slave репликация, и Redis Sentinel. Contents Redis cluster vs Redis replicationВарианты запуска Redis в KubernetesHelm chart deployRedis Options Redis cluster vs Redis replication См. Redis: репликация, часть 1 — обзор. Replication vs Sharding. Sentinel…

https://rtfm.co.ua/redis-master-slave-replikaciya-i-zapusk-v-kubernetes/
Kubernetes: Evicted поды и Quality of Service для подов

Имеется Kubernetes кластер, работает на AWS Elactic Kubernetes Service. В кластере запущено приложение, которое в целом работает без проблем, но система мониторинга периодически сообщает, что: Проверяем поды: kk -n eks-prod-1-web-projectname-admin-backend-ns get podNAME                                                   READY   STATUS    RESTARTS   AGEbttrm-web-projectname-admin-backend-64648597fc-9j29n   1/1     Running   0          43mbttrm-web-projectname-admin-backend-64648597fc-kptjj   1/1     Running   0          43mbttrm-web-projectname-admin-backend-7f4b5bdb4c-wlbjf   0/1     Evicted   0          12dbttrm-web-projectname-admin-backend-8478d778f9-5mrnc   0/1     Evicted   0          15d Два пода оказались в Evicted статусе – начинаем разбираться. Contents Kubernetes requests и limitsKubernetes pods QoS classesNode tolerationsСсылки по теме Kubernetes requests и limits В Kubernetes мы…

https://rtfm.co.ua/kubernetes-evicted-pody-i-quality-of-service-dlya-podov/
Helm: reusable чарт – named templates, и общий чарт для нескольких приложений

Проект активно развивается, Kubernetes прижился, и всё больше наших сайтов запускается в нём. И со временем возникла вполне ожидаемая проблема, которая уже озвучивалась в самом начале нашего “путешествия” в Helm: пошаговое создание чарта и деплоймента из Jenkins – как быть с манифестами Kubernetes и шаблонами Helm для нескольких приложений? Особенно остро она встала сейчас, когда…

https://rtfm.co.ua/helm-reusable-chart-named-templates-i-obshhij-chart-dlya-neskolkix-prilozhenij/
AWS: Glue – ошибка AWS S3 connect timed out, и cross-region connections

Есть AWS Glue job, которая должна загрузить данные в AWS S3 в другом регионе. Джоба падает с ошибкой: ERROR [Executor task launch worker for task 39] executor.Executor (Logging.scala:logError(91)): Exception in task 6.1 in stage 2.0 (TID 39) com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.SdkClientException: Unable to execute HTTP request: Connect to projectname-dwh.s3.eu-west-1.amazonaws.com:443 [projectname-dwh.s3.eu-west-1.amazonaws.com/52.218.112.104] failed: connect timed out Причину искал долго, потому…

https://rtfm.co.ua/aws-glue-oshibka-aws-s3-connect-timed-out-i-cross-region-connections/
Kubernetes: запуск SQL-миграций – Kubernetes Job и Helm hook

Имеется проект, которому во время деплоя надо выполнить SQL-миграции. Для запуска миграций надо склонировать репозиторий из Github, и затем выполнить собственно миграции, которые в нём хранятся. Сейчас у нас для этого используются Kubernetes initContainers, причём два – сначала один, с git, клонирует репозиторий с миграциями в Kubernetes Volume, второй с sql-migrate – запускает из этого…

https://rtfm.co.ua/kubernetes-zapusk-sql-migracij-kubernetes-job-i-helm-hook/
Kubernetes: Service, балансировка нагрузки, kube-proxy и iptables

Задался я вопросом – а как вообще в Kubernetes происходит балансировка нагрузки между подами? Т.е, есть у нас внешний Load Balancer. За ним – Service. За ним – Pod. Что происходит, когда мы из мира получаем пакет, а у нас несколько подов – как пакеты между ними распределяются? Contents kube-proxyUser space proxy modeiptables proxy modeIPVS…

https://rtfm.co.ua/kubernetes-service-balansirovka-nagruzki-kube-proxy-i-iptables/
Linux: настройка LEMP – NGINX, PHP, MySQL, SSL, мониторинг, логи, и миграция RTFM

Собрался наконец-то перенести RTFM а Debian 10, решил делать без автоматизации – будем поднимать стандартный LEMP для хостинга WordPress руками. Что-то похожее последний раз писалось в 2016 – Debian: установка LEMP — NGINX + PHP-FPM + MariaDB, на этот раз получился более полный обзор процесса. Когда-то делал автоматизацию для настройки сервера под RTFM, но последний раз…

https://rtfm.co.ua/linux-nastrojka-lemp-nginx-php-mysql-ssl-monitoring-logi-i-migraciya-rtfm/
Kubernetes: Ingress, ошибка 502, readinessProbe и livenessProbe

Имеется приложение на Go, API-бекенд. Периодически начинает возвращать 502 ошибку, хотя сам под работает и в статусе Running. Что бы рассмотреть, как и почему Ingress и Service могут возвращать 502, и как работают readinessProbe и livenessProbe в Kubernetes Deployment – напишем простой веб-сервер на Go, в котором опишем два ендпоинта – один будет возвращать нормальный…

https://rtfm.co.ua/kubernetes-ingress-oshibka-502-readinessprobe-i-livenessprobe/
Kubernetes: обновление DNS в Route53 при создании Ingress

Задача: при создании Ingress ресурса – создавать запись на DNS, которая будет привязана к URL создаваемого Ingress, потому что сейчас это приходится делать руками для каждого нового Application Load Balancer, который создаётся из Ingress через ALB Ingress controller. Для решения – используем ExternalDNS, который будет ходить в наш AWS Route53, и добавлять записи. Документация на…

https://rtfm.co.ua/kubernetes-obnovlenie-dns-v-route53-pri-sozdanii-ingress/
Kubernetes: ServiceAccounts, JWT-токены, аутентификация и RBAC-авторизация

Для аутентицикации и авторизации в Kubernetes имеются такие понятия как User Accounts и Service Accounts. User Accounts – профили обычных пользователей, используемые для доступа к клатеру снаружи кластера, тогда как Service Accounts используются для аутентификации сервисов внутри кластера. ServiceAccounts предназначены для предоставления идентификатора, используя который Kubernetes Pod, а точнее контейнер(ы) в нём, могут быть аутенифицированы…

https://rtfm.co.ua/kubernetes-serviceaccounts-jwt-tokeny-autentifikaciya-i-rbac-avtorizaciya/
ArgoCD: обзор, запуск, настройка SSL, деплой приложения

ArgoCD помогает деплоить приложения в Kubernetes, используя GitOps подход, т.е. когда приложения, конфиги, манифесты и тому подобные данных хранятся в Git-репозитории. Поддерживает работу с “голыми” манифестами Kubernetes, kustomize, ksonnet, jsonnet и то, чем пользуемся мы – Helm-шаблонами. ArgoCD запускает свой контроллер в Kubernetes-кластере, и отслеживает изменения в Git-репозиториях, синхронизируя приложения в кластере с их манифестами…

https://rtfm.co.ua/argocd-obzor-zapusk-nastrojka-ssl-deploj-prilozheniya/
ArgoCD: деплой Helm-чарта и работа с Helm Secrets через AWS KMS

В предыдущем посте ArgoCD: обзор, запуск, настройка SSL, деплой приложения потрогали ArgoCD, запустили тестовый инстанс, и задеплоили приложение из его готовых примеров. Но наша цель – деплоить наши Helm-чарты, а потому посмотрим, как это можно сделать. Самое интересное ожидаемо коснулось работы с Helm secrets. Пришлось покостылить, но в результате всё заработало так, как и ожидалось.…

https://rtfm.co.ua/argocd-deploj-helm-charta-i-rabota-s-helm-secrets-cherez-aws-kms/
Ansible: модуль community.kubernetes и установка Helm-чарта с ExternalDNS

В посте Kubernetes: обновление DNS в Route53 при создании Ingress выполнили ручную установку ExternalDNS, и посмотрели, как он работает – пора добавить автоматизацию его установки на кластера. В роли Configuration Management Tool у нас используется Ansible, для которого существует модуль community.kubernetes – используем его. Вообще, есть много модулей для работы с Helm, например – helm…

https://rtfm.co.ua/ansible-modul-community-kubernetes-i-ustanovka-helm-charta-s-externaldns/
ArgoCD: CIOps vs GitOps и деплой приложения из TravisCI

Штош, пришло время подумать о том, как мы будем деплоить наши приложения. Сейчас у нас используются Github-репозитории с кодом и Helm-шаблонами, и Jenkins. Билд в Jenkins в большинстве проектов запускается вручную, после чего: Jenkins-джоба клонирует репозиторий с кодом и манифестами, билдит Docker-образ пушит его в Docker Hub вызывает helm upgrade --install, которому через --set передаёт…

https://rtfm.co.ua/argocd-ciops-vs-gitops-i-deploj-prilozheniya-iz-travisci/
Prometheus: Alertmanager Web UI и Silence алертов

Частота отправки активных алертов из Alertmanager определяется параметром repeat_interval в файле /etc/alertmanager/config.yml. У нас этот интервал задан в 15 минут, в результате чего в Slack каждые 15 минут приходят уведомления обо всех активных алертах в системе. Но некоторые алерты это такие себе “known issue”, когда о проблеме мы знаем, девелоперы её взяли в работу для…

https://rtfm.co.ua/prometheus-alertmanager-web-ui-i-silence-alertov/
Logz.io: сбор логов из Kubernetes – fluentd vs filebeat

У нас для сбора логов из Kubernetes-кластера и их просмотра используется Logz.io (есть и локальный Loki). Конкретно сбором и отправкой логов занимается Fluentd-под на каждой WorkerNode, которые деплоятся из DaemonSet в его дефотной конфигурации, см. документацию logzio-k8s. Столкнулся с проблемой, что эти поды используют слишком много CPU – до 3000 millicpu, при том, что на…

https://rtfm.co.ua/logz-io-sbor-logov-iz-kubernetes-fluentd-vs-filebeat/
Linux: Mutt и Neomutt – консольный почтовый клиент

Mutt, и его “наследник” Neomutt – консольный почтовый клиент, MUA – Mail User Agent. Поддерживает чтение и получение почты по IMAP/POP3, отправку по SMTP. Ниже рассмотрим настройку IMAP и SMTP для обычного почтового сервера (не Gmail, хотя принципиальной разницы нет) на примере Freehost.com.ua, плюс примеры настроек для отображения списка каталогов в ящике и цветовой схемы.…

https://rtfm.co.ua/linux-mutt-i-neomutt-konsolnyj-pochtovyj-klient/
Yandex.Tank: нагрузочное тестирование

Кроме горячолюбимых Apache Bench и JMeter имеется интересная утилита Yandex Tank. Ей давно пользуются наши QA, пришло время и мне его потрогать для проверки одной проблемы с Kubernetes, о которой поговорим в следующем посте. В этом – посмотрим на базовые возможности Yandex.Tank. Из особенно приятного – в отличии от Apache Bench выводит статистику по кодам…

https://rtfm.co.ua/yandex-tank-nagruzochnoe-testirovanie/
Kubernetes: NGINX/PHP-FPM graceful shutdown – избавляемся от 502 ошибок

Имеется PHP-приложение, работает в Kubernetes в подах с двумя контейнерами – NGINX и PHP-FPM. Проблема: во время скейлинга приложения начинают проскакивать 502 ошибки. Т.е. при остановке подов – некорректно отрабатывает завершение подключений. Рассмотрим процесс остановки подов вообще, и особенности NGINX и PHP-FPM в частности. Тестировать будем приложение в AWS Elastic Kubernetes Service с помощью Yandex.Tank.…

https://rtfm.co.ua/kubernetes-nginx-php-fpm-graceful-shutdown-izbavlyaemsya-ot-502-oshibok/