Архив за месяц: Октябрь 2020

Kubernetes: Service, балансировка нагрузки, kube-proxy и iptables

30 октября 2020
 

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

Jenkins: деплой Redis и Helm subchart values

29 октября 2020
 

 Задача — содать Jenkins джобу, которая будет деплоить Redis на Dev/Stage/Prod кластера. В посте Redis: Master-Slave репликация и запуск в Kubernetes сделали это вручную, посмотрели что и как вообще запускается и работает — теперь надо автоматизировать. Главный вопрос — как вообще деплоить и передавать параметры? Хочется использовать уже готовый чарт, но в тоже время —… Читать далее »

Kubernetes: запуск SQL-миграций — Kubernetes Job и Helm hook

26 октября 2020
 

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

Git: git clone — fatal: unable to fork и RSA key fingerprint

23 октября 2020
 

 Имеется Docker-образ с установленным Git. Задача — во время запуска контейнера склонировать в него репозиторий. git clone — fatal: unable to fork Во время попытки выполнения git clone в Docker-контейнере — получаем ошибку «unable to fork«: Причина — тут git для аутентификации использует SSH (git@github.com), которого нет в системе: Устанавливаем: The authenticity of host ‘github.com’… Читать далее »

AWS: Glue — ошибка AWS S3 connect timed out, и cross-region connections

22 октября 2020
 

 Есть 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 Причину искал долго, потому… Читать далее »

Helm: reusable чарт — named templates, и общий чарт для нескольких приложений

18 октября 2020
 

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

Kubernetes: дебаг Init containers при запуске SQL-миграций

15 октября 2020
 

 Имеется приложение в Kubernetes. Деплоится из Helm-чарта. При очередном деплое — новые поды не стартуют, а сам деплой падает со стандартной ошибкой «Upgrade «CHARTNAME» failed: timed out waiting for the condition«: wait.go:225: [debug] Deployment is not ready: eks-dev-1-community-api-ns/community-api. 0 out of 3 expected pods are ready upgrade.go:367: [debug] warning: Upgrade «community-api» failed: timed out waiting… Читать далее »

Kubernetes: AWS ALB Ingress Controller — добавление редиректа на другой домен

7 октября 2020
 

 Имеется приложение двух версий — старое и новое, и два домена — старый, и новый. Работает  в AWS Elastic Kubernetes Service, за AWS LoadBalancer, который создаётся из AWS ALB Ingress Controller. Задача — добавить редирект на LoadBalancer со старого домена на новый: старый: dev.api.old-example.com новый: dev.api.new-example.com В самом AWS LoadBalancer это делается через Listener Rules,… Читать далее »

Kubernetes: Evicted поды и Quality of Service для подов

3 октября 2020
 

 Имеется Kubernetes кластер, работает на AWS Elastic Kubernetes Service. В кластере запущено приложение, которое в целом работает без проблем, но система мониторинга периодически сообщает, что: Проверяем поды: Два пода оказались в Evicted статусе — начинаем разбираться. Kubernetes requests и limits В Kubernetes мы имеем возможность ограничить используемые контейнерами ресурсы двумя способами — requests и limits:… Читать далее »