Forwarded from Пятничный деплой
Возможно, некоторые слышали или использовали такой замечательный инструмент как postman, так вот - его можно использовать для генерации документации https://medium.com/@olotintemitope/how-to-generate-your-api-documentation-in-20-minutes-4e0072f08b94  #api #postman
  
  Medium
  
  How to generate your API documentation with Postman in 20 minutes
  Developers sometimes spend a couple of weeks building an API and maybe another week writing the documentation, and this can be…
  Forwarded from Пятничный деплой
В статье с громким названием просто best practice для построения своих api (причем самых базовых) https://medium.com/better-programming/restful-api-design-step-by-step-guide-2f2c9f9fcdbf #api
  
  Medium
  
  RESTful API Design — Step By Step Guide
  The (Somewhat) definitive guide to building better APIs
  1. Building stuff with the Kubernetes API (part 1) — Exploring API objects https://medium.com/programming-kubernetes/building-stuff-with-the-kubernetes-api-1-cc50a3642
2. Building stuff with the Kubernetes API (Part 2) — Using Java https://medium.com/programming-kubernetes/building-stuff-with-the-kubernetes-api-part-2-using-java-ceb8a5ff7920
3. Building stuff with the Kubernetes API (Part 3) — Using Python https://medium.com/programming-kubernetes/building-stuff-with-the-kubernetes-api-part-3-using-python-aea5ab16f627
4. Building stuff with the Kubernetes API (Part 4) — Using Go https://medium.com/programming-kubernetes/building-stuff-with-the-kubernetes-api-part-4-using-go-b1d0e3c1c899
#k8s #kubernetes #API
  
  2. Building stuff with the Kubernetes API (Part 2) — Using Java https://medium.com/programming-kubernetes/building-stuff-with-the-kubernetes-api-part-2-using-java-ceb8a5ff7920
3. Building stuff with the Kubernetes API (Part 3) — Using Python https://medium.com/programming-kubernetes/building-stuff-with-the-kubernetes-api-part-3-using-python-aea5ab16f627
4. Building stuff with the Kubernetes API (Part 4) — Using Go https://medium.com/programming-kubernetes/building-stuff-with-the-kubernetes-api-part-4-using-go-b1d0e3c1c899
#k8s #kubernetes #API
Medium
  
  Building stuff with the Kubernetes API (part 1) — Exploring API objects
  Kubernetes is a formidable platform on (and with) which you can create all sorts of tools. Fortunately, there are many options when it…
  Forwarded from Make. Build. Break. Reflect.
#kubernetes  #secrets #api
(заметка не несёт никакой ценности, лишь мысли)
Иногда, для самого себя, я провожу теоретические, вперемешку с практическими, изыскания.
Выбираю узкопрофильную тему и ковыряю, пока не дохожу до кишков.
Это может быть знания зачем
Практической ценности такие изыскания обычно не имеют, это больше любопытство и разминка для ума. Лишь иногда попадаются настоящие "бриллианты".
Мне захотелось узнать, а какие есть способы, чтобы снизить нагрузку на Kubernetes API.
Все мы знаем про кучу операторов, которые не хило нагружают апишку, но что, если снизить средствами самого кубера?
У нас есть несколько
https://kubernetes.io/docs/reference/using-api/api-concepts/
Знания и поиск по документации привел к тому, что есть
То есть каждый раз при этих действиях идёт
Сам по себе секрет, просто лежащий в кубере, никакой нагрузки не несёт.
Пока secret не примонтирован(как переменная или файл) и пока не было рестарта/скейла/редеплоя, апишку никто не дёргает.
Однако при активном скейлинге (все мои проекты), это прям попадание в точку.
Да, вочей хватает.
Затем мои поиски вывели на отличную опцию
https://kubernetes.io/docs/concepts/configuration/secret/#secret-immutable
С этой опцией нельзя поменять значение секрета. Его можно только реплейснуть или удалить и создать с нуля.
Копнув дальше, я узнал, что тут можно немного снизить нагрузку из-за интересного механизма.
"О господи! Оно!" - подумал я. Это было нечто новое, захотелось сразу использовать. И сразу в проде😀 
Начал смотреть какие есть реализации:
- исправление своих чартов, чтобы секреты были иммутабл и были хуки(иначе при редеплое и изменении секрета хелм упадёт с ошибкой).
- написание мутейшн хука или оператора, который все задеплоенные секреты помечает сразу иммутабл, а все команды переучить, чтобы в их чартах были хуки
В целом неплохая картина: немного изменил флоу в командах по релизам, добавил хуки, все секреты в кубе иммутабл и получаем:
- меньше латенси WATCH и CONNECT запросов (проверено, кубер 1.33, Linode)
- меньшее количество WATCH запросов (проверено, кубер 1.33, Linode + AWS)
- меньше памяти в ETCD. Это теоретически, большинство клауд провайдеров не дают прямой доступ к метрикам ETCD(я тестировал на AWS + linode), а потому доказать не могу. Барметал с нуля поднимать лень, так что пусть это окажется лишь теорией.
Всё выглядит как сказка, а что на деле?
Тут я вспомнил, что работал в замечательном банке с синим логотипом, и там до сих пор во всех департаментах работают очень крутые инженеры (всем привет, кто читает, вы солнышки❤️).
Тема интересная, заменшил в паблик чате @kubernetes_ru и меня тут же спустили на землю.
Оказалось что ребята это уже пробовали у себя и быстро от этого ушли.
Беда в том , что если такой
Проверил - да, у меня есть много секретов общих для нескольких деплойментов.
Безусловно это ставит крест на моей задумке, баги мне не нужны ради 1.5-3% экономии нагрузки.
Ладно, время на изыскания вышло, эх, и на этот раз не бриллиант.😭 
(заметка не несёт никакой ценности, лишь мысли)
Иногда, для самого себя, я провожу теоретические, вперемешку с практическими, изыскания.
Выбираю узкопрофильную тему и ковыряю, пока не дохожу до кишков.
Это может быть знания зачем
EXPOSE в докер файле и на что это влияет, какая разница между cgroup v1 и cgroup v2 или различия хранилищ для больших данных и миллиардов мелких файлов по 6 KB.Практической ценности такие изыскания обычно не имеют, это больше любопытство и разминка для ума. Лишь иногда попадаются настоящие "бриллианты".
Мне захотелось узнать, а какие есть способы, чтобы снизить нагрузку на Kubernetes API.
Все мы знаем про кучу операторов, которые не хило нагружают апишку, но что, если снизить средствами самого кубера?
У нас есть несколько
VERBs.https://kubernetes.io/docs/reference/using-api/api-concepts/
Знания и поиск по документации привел к тому, что есть
WATCH запрос, который идёт каждый раз от kubelet, когда стартует под или скейлится или происходит редеплой через любую из стратегий, при использовании секрета кубернетиса.То есть каждый раз при этих действиях идёт
WATCH.Сам по себе секрет, просто лежащий в кубере, никакой нагрузки не несёт.
Пока secret не примонтирован(как переменная или файл) и пока не было рестарта/скейла/редеплоя, апишку никто не дёргает.
Однако при активном скейлинге (все мои проекты), это прям попадание в точку.
Да, вочей хватает.
sum by (verb) (rate(apiserver_request_total{ cluster=~"$cluster"}[$__rate_interval]))Затем мои поиски вывели на отличную опцию
immutable в секретах (вру, я слышал и знал о ней раньше, но прям в проде не использовал).https://kubernetes.io/docs/concepts/configuration/secret/#secret-immutable
С этой опцией нельзя поменять значение секрета. Его можно только реплейснуть или удалить и создать с нуля.
Копнув дальше, я узнал, что тут можно немного снизить нагрузку из-за интересного механизма.
"если секрет иммутабл, то кублет(с каждой ноды) не делает WATCH запрос в апишку".
"О господи! Оно!" - подумал я. Это было нечто новое, захотелось сразу использовать. И сразу в проде
Начал смотреть какие есть реализации:
- исправление своих чартов, чтобы секреты были иммутабл и были хуки(иначе при редеплое и изменении секрета хелм упадёт с ошибкой).
- написание мутейшн хука или оператора, который все задеплоенные секреты помечает сразу иммутабл, а все команды переучить, чтобы в их чартах были хуки
В целом неплохая картина: немного изменил флоу в командах по релизам, добавил хуки, все секреты в кубе иммутабл и получаем:
- меньше латенси WATCH и CONNECT запросов (проверено, кубер 1.33, Linode)
sum(rate(apiserver_request_duration_seconds_sum{job=~"kubernetes-apiservers|apiserver", cluster=~"$cluster"}[$__rate_interval])) by (verb)
/
sum(rate(apiserver_request_duration_seconds_count{job=~"kubernetes-apiservers|apiserver", cluster=~"$cluster"}[$__rate_interval])) by (verb)- меньшее количество WATCH запросов (проверено, кубер 1.33, Linode + AWS)
sum by (verb) (rate(apiserver_request_total{ cluster=~"$cluster"}[$__rate_interval]))- меньше памяти в ETCD. Это теоретически, большинство клауд провайдеров не дают прямой доступ к метрикам ETCD(я тестировал на AWS + linode), а потому доказать не могу. Барметал с нуля поднимать лень, так что пусть это окажется лишь теорией.
Всё выглядит как сказка, а что на деле?
Тут я вспомнил, что работал в замечательном банке с синим логотипом, и там до сих пор во всех департаментах работают очень крутые инженеры (всем привет, кто читает, вы солнышки❤️).
Тема интересная, заменшил в паблик чате @kubernetes_ru и меня тут же спустили на землю.
Оказалось что ребята это уже пробовали у себя и быстро от этого ушли.
Беда в том , что если такой
immutable секрет замонитирован на ноде более, чем в один под(разные деплойменты) то такой секрет не подтянется при изменим даже при рестарте.Проверил - да, у меня есть много секретов общих для нескольких деплойментов.
Безусловно это ставит крест на моей задумке, баги мне не нужны ради 1.5-3% экономии нагрузки.
Ладно, время на изыскания вышло, эх, и на этот раз не бриллиант.
Please open Telegram to view this post
    VIEW IN TELEGRAM