Архив метки: Kubernetes

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

26 октября 2020
 

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

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:… Читать далее »

Redis: Master-Slave репликация и запуск в Kubernetes

23 сентября 2020
 

 Задача — запустить Redis в Kubernetes. Используем Master-Slave репликацию и Sentinel для мониторинга и failover. См. Redis: репликация, часть 2 — Master-Slave репликация, и Redis Sentinel. Redis cluster vs Redis replication См. Redis: репликация, часть 1 — обзор. Replication vs Sharding. Sentinel vs Cluster. Топология Redis и Choose between Redis Helm Chart and Redis Cluster… Читать далее »

Kubernetes: нагрузочное тестирование и high-load тюнинг — проблемы и решения

25 августа 2020
 

 Вообще, этот пост планировался в виде небольшой заметки о том, как использовать NodeAffinity для Kubernetes Pod: Но, как это часто бывает — за одним потянулось другое, за другим третье — и в результате вышел очередной длиннопост в свободном стиле. Итак, собирался я написать про NodeAffinity, как вдруг подумал — а как будет себя вести Kubernetes… Читать далее »

Helm: secrets плагин не дешифрует данные

18 августа 2020
 

 Имеется токен аутентификации для Gitlab, используя который Kubernetes должен вытянуть образы из приватного Docker registry в Gitlab. Однако, поды остаются в статусе ErrImagePull, а в events записывается событие об ошибке логина в Gitab: Warning Failed 7m37s (x4 over 8m57s) kubelet, ip-10-3-47-58.us-east-2.compute.internal Failed to pull image «registry.gitlab.com/[…]:178662158»: rpc error: code = Unknown desc = Error response… Читать далее »

Helm: dependencies aka subcharts — обзор и пример

14 августа 2020
 

 Имеется Helm chart, который запускает API-бекенд нашего приложения, для работы которого требуется memcached. Что бы не создавать отдельный деплоймент и не добавлять в Jenkins вторую джобу с helm install — добавим memcached как dependency для нашего чарта: тогда при установке самого приложения, Helm загрузит архив с чартом memcached, и установит его вместе с чартом нашего… Читать далее »

Instana: мониторинг Kubernetes-кластера

12 августа 2020
 

 В дополнение к нашему Prometheus, который осуществляет общий мониторинг всех ресурсов, веб-разработчики попросили подключить им Instana. Из того, что нам сейчас интересно — Instana умеет мониторить Kubernetes кластера, и отдельные веб-сайты. Для мониторинга кластера будем запускать DaemonSet, который создаст поды с Instana-агентами на каждой рабочей ноде. А для мониторига веб-сайта — разработчики подключат библиотеку в… Читать далее »