Updates rtfm.co.ua 🇺🇦 – Telegram
Updates rtfm.co.ua 🇺🇦
722 subscribers
35 photos
457 links
Канал @rtfm - новые посты на https://rtfm.co.ua.
Обсуждения - группа @rtfmco https://t.me./rtfmco
Download Telegram
Helm: helm-secrets – шифрование sensitive данных с AWS KMS и деплой из Jenkins

В продолжение поста Helm: пошаговое создание чарта и деплоймента из Jenkins – теперь нам надо добавить шифрование данных, что бы не хранить пароли и различные приватные ключи в открытом виде в Github-репозиториях – даже пусть и приватных. Судя по гуглу, чуть ли не единственный вариант – это использование helm-secrets (а подскажите в комментариях – кто…

https://rtfm.co.ua/helm-helm-secrets-shifrovanie-sensitive-dannyx-s-aws-kms-i-deploj-iz-jenkins/
Kubernetes: ClusterIP vs NodePort vs LoadBalancer, Services и Ingress – обзор, примеры

Для сетевого взаимодействия Kubernetes предоставляет четыре типа Service-ресурсов – ClusterIP (дефолтный), NodePort, LoadBalancer и ExternalName, плюс ресурс Ingress. В этом посте разберём каждый из них, и попробуем их в работе. Документация по типам – Publishing Services (ServiceTypes). Рассматривается в основном AWS, потому учитываем, что сеть у нас – AWS VPC, балансировщики нагрузки – AWS ALB/CLB,…

https://rtfm.co.ua/kubernetes-clusterip-vs-nodeport-vs-loadbalancer-services-i-ingress-obzor-primery/
Kubernetes: мониторинг кластера с Prometheus Operator

В продолжение поста Kubernetes: мониторинг с Prometheus, в котором мы настроили мониторинг вручную, и более-менее разобрались с тем, как оно всё внутри работает – теперь попробуем прикрутить Prometheus Operator из Helm-репозитория. Напомню, задача – поднять Prometheus и все необходимые експортёры в AWS Elastic Kubernetes Cluster, и с него через /federation передавать метрики на наш “центровой”…

https://rtfm.co.ua/kubernetes-monitoring-klastera-s-prometheus-operator/
Prometheus: yet-another-cloudwatch-exporter – сбор метрик AWS CloudWatch

Сейчас в Prometehus мы собираем метрики из AWS CLoudWatch с помощью CloudWatch exporter от самого AWS, см. Prometheus: CloudWatch exporter — сбор метрик из AWS и графики в Grafana, однако, у него есть несколько недостатков: написан на Java, тяжёлый – грузит хост мониторнига не подтягивает все теги использует GetMetricStatistics для получения метрик умеет собирать метрики…

https://rtfm.co.ua/prometheus-yet-another-cloudwatch-exporter-sbor-metrik-aws-cloudwatch/
Neo4j: graph database – запуск в Docker и примеры работы с Cypher QL

В отличии от традиционной RDMS (Relational Database Management System – реляционная база данных), у которой в первую очередь играют роли данные, в Graph Database связи между данными имеют большее значение, и выделены в отдельные объекты, что даёт лучшую производительность, особенно при больших объёмах данных с множеством взаимосвязанных объектов, и делает управление такой базой более гибким.…

https://rtfm.co.ua/neo4j-graph-database-zapusk-v-docker-i-primery-raboty-s-cypher-ql/
Kubernetes: PersistentVolume и PersistentVolumeClaim – обзор и примеры

Для работы с дисками для данных, которые должны храниться постоянно, Kubenetes предоставляет два типа ресурсов – PersistentVolume и PersistentVolumeClaim. PersistentVolume – непосредственно система хранения, раздел на жёстком диске, например AWS EBS, подключенном к одному из EC2, и с точки зрения этого кластера является таким же ресурсом как, например, рабочая нода. PersistentVolumeClaim – запрос от пользователя…

https://rtfm.co.ua/kubernetes-persistentvolume-i-persistentvolumeclaim-obzor-i-primery/
Neo4j: запуск в Kubernetes

В предыдущем посте – Neo4j: graph database — запуск в Docker и примеры работы с Cypher QL – мы запустили Neo4j в Docker, и познакомлись с его архитекторой и языком запросов CQL. Следующая задача – запустить сервер баз данных в Kubernetes. Используем Neo4j Community Edition, запускать будем в виде одного инстанса (т.к. поддержка кластеризации только…

https://rtfm.co.ua/neo4j-zapusk-v-kubernetes/
Kubernetes: HorizontalPodAutoscaler – обзор и примеры

Kubernetes HorizontalPodAutoscaler, как видно из названия, предназначен для автоматического скейлинга Kubernetes Pods в кластере, которые управляются ReplicationController, Deployment или ReplicaSet контроллерами, основываясь на их метриках потребления ресурсов – CPU, память и т.д. Кратко его рассматривали в посте Kubernetes: запуск metrics-server в AWS EKS для Kubernetes Pod AutoScaler, теперь разберёмся с доступными метриками. Для HPA доступны…

https://rtfm.co.ua/kubernetes-horizontalpodautoscaler-obzor-i-primery/
Helm: dependencies aka subcharts – обзор и пример

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

https://rtfm.co.ua/helm-dependencies-aka-subcharts-obzor-i-primer/
Kubernetes: нагрузочное тестирование и high-load тюнинг – проблемы и решения

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

https://rtfm.co.ua/kubernetes-nagruzochnoe-testirovanie-i-high-load-tyuning-problemy-i-resheniya/
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/