Рассматривается же запуск Postgres/Neon на ноде куба, т.е. тарифицируется нода куба, а не запущенные поды/контейнеры на ней. Если действительно это запускается в кубе, то к стоимости ноды придется добавить сумму за использование S3. Если 10 rps, то выходит копейки за месяц, если же 100+ rps, то сумма за использование S3 уже будет начинать ощущаться. В какой-то момент и Neon начнет "затыкаться", это произойдет сильно раньше, чем постоянно работающий Postgres.
Neon выглядит интересно, но кейсы использования его более узки, чем нативная Postgres.
поднятие Compute из idle приводит к апдейту c нужным конфигом, а не к созданию нового пода
Так если он и так поднят и как выше написал, мы платим за целую ноду куба, то какой профит от него вне бессерверных контейнерах?
Критерий успеха прост: idle-время значимо, а бизнес доволен, когда платит только за активные минуты.
А бизнесу никто не сказал, что теперь каждый запрос к БД (S3) будет не бесплатным? Выглядит так, что на нагруженных проектах, нововведение приведет к увеличению ежемесячного счёта в облаке
«Пробуждение» compute из idle-состояния занимает сотни миллисекунд
Которая в итоге выльется в 1-2 секунды. Т.к. трафик не будет направлен в под до тех пор, пока тот не перейдет в состояние "Ready". Все пробы в Kubernetes имеют минимальное значение 1 сек.
from math import gcd
from sympy import primefactors
def is_primitive_root(g, p):
if gcd(g, p) != 1:
return False
order = p - 1
for q in primefactors(order):
if pow(g, order // q, p) == 1:
return False
return True
def min_primitive_root(p):
for g in range(2, p):
if is_primitive_root(g, p):
return g
if __name__ == '__main__':
sess_const = 23 # Большое простое число (в реальности 2048+ бит)
pr = min_primitive_root(sess_const) # Первообразный корень по модулю sess_const
a = 6 # Секретный ключ Алисы
A = pow(pr, a, sess_const) # Публичный ключ Алисы (отправляется Бобу).
b = 15 # Секретный ключ Боба
B = pow(pr, b, sess_const) # Публичный ключ Боба (отправляется Алисе)
K_alice = pow(B, a, sess_const)
K_bob = pow(A, b, sess_const)
print(f"Публичные параметры: p = {sess_const}, g = {pr}")
print(f"Алиса: приватный a = {a}, публичный A = {A}")
print(f"Боб: приватный b = {b}, публичный B = {B}")
print(f"Общий секретный ключ у Алисы: {K_alice}")
print(f"Общий секретный ключ у Боба: {K_bob}")
Здесь есть подробное объяснение как это работает, но без подготовки это скорее всего не осилить. Тут можно закончить словами автора: Всё, что вам нужно понять на данном этапе, – это то, что технология работает
После прочтения Асимметричное шифрование и ECDH магия осталась магией из-за пропущенного процесса вычисления общего секретного ключа. Потому что
Голову можно ломать долго и безрезультатно, пока не поймем, что такое асимметричное шифрование и протоколы обмена ключами.
Если не погружаться в самые дебри, то:
У Алисы есть приватный ключ (a) и публичный ключа (A). Публичный ключ высчитывается из приватного ключа A = a x G
У Боба так же приватный (b) и публичный (B = b x G)
G – это базовая точка на эллиптической кривой, общая для всех. Алиса и Боб заранее договорились какую кривую будут использовать. За нас уже всё посчитано, точка описана в стандарте, просто берем её оттуда.
Алиса и Боб обменялись публичными ключами и каждый из них умножает свой приватный ключ на публичный ключ собеседника:
Алиса: a x B => a x (b x G) = ab x G
Боб: b x A => b x (a x G) = ba x G => ab x G
Вот и вся "магия" получения общего секретного ключа
Можете попробовать pyinstaller. Он соберет только необходимые файлы для вашего приложения в один бинарь. Решение спорное, но вроде все ваши потребности закрывает и более безопасным способом
Gitlab и Verdaccio можно сконнектить через OpenID и не мучаться с паролями в htpasswd. Даст возможность использовать CI_JOB_TOKEN в джобах и авторизовываться в web-интерфейсе по кнопке
Какие-то абстрактные цифры про средний пробег в 20 км в день. Мне ребенка в школу отвезти и забрать это почти 20 км. Так же у нас холодно, 2 недели было -25 ... -30, это дополнительный расход.
Не хватает зарядки за ночь от розетки, покрывающий мой дневной расход/пробег!!! Зарядка от розетки позволяет реже бывать на зарядной станции. А про очередь и время зарядки проще промолчать. С розеткой мне повезло, удалось договориться с УК чтобы подключиться у охранника.
Доя экстренных случаев есть быстрые зарядки до 500 КВт
Беру свои слова назад, оказывается уже давно добавили кэширование. На каталогах cluster и third_party первое чтение чуть больше секунды (mac mini i7 2012), остальные 60 мс. Как раз последний раз смотрел Gitea не за долго до этого коммита и там было сильно печально.
github тоже частично на рубях писан и работает вполне быстро. Он как и gitlab под капотом использует libgit2. Gitea и Gogs по сути обертки для си-шного бинаря git.
не провисает практически совсем
Попробуйте поиграться с репой Kubernetes. У Gitea и Gogs нет кэширования истории коммитов, потому они на больших репах, с длинной историей, будут сильно проигрывать по производительности Gitlab-у, но будут значительно быстрее Gitflic))
Правите конфиг kube-proxy: mode: "ipvs". На каждой ноде куба появляется интерфейс kube-ipvs0 со всеми ip сервисов. Т.е. все кубо-сервисы доступны по этим ip на любой ноде куба.
Добавляете на своем маршрутизаторе маршрут до servceCIDR указав шлюзом любую ноду куба, ipvs с flannel разберутся сами (у меня ещё OSPF был чтобы можно было не писать маршруты до podCIDR нод, дает возможность ходить напрямую в нужный pod)
> nslookup kubernetes.default.svc.cluster.local `k -n kube-system get svc kube-dns -o jsonpath='{.spec.clusterIP}'`
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: kubernetes.default.svc.cluster.local
Address: 10.96.0.1
> echo 'nameserver 10.96.0.10' >> /etc/resolv.conf
> ping kubernetes.default.svc.cluster.local
PING kubernetes.default.svc.cluster.local (10.96.0.1): 56 data bytes
64 bytes from 10.96.0.1: icmp_seq=0 ttl=64 time=7.359 ms
64 bytes from 10.96.0.1: icmp_seq=1 ttl=64 time=8.558 ms
64 bytes from 10.96.0.1: icmp_seq=2 ttl=64 time=10.363 ms
64 bytes from 10.96.0.1: icmp_seq=3 ttl=64 time=5.093 ms
^C
--- 10.96.0.1 ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 5.093/7.843/10.363/1.914 ms
стенды ходят в сервисы, поды ходят куда направите. Можно смапить внешний сервис через Service без селектора с Endpoints или externalName
То, что многие люди называют Docker—образами, на самом деле является образами в формате Open Container Initiative (OCI).
ТО, что многие называют Docker—образами, является Docker V2 Schema 2. OCI, базирующийся на кодовой базе Docker, но по факту сильно отличающийся от Docker V2.
В статье описан опыт применения NJS. Само решение было реализовано за год до релиза в CE-версии (13.3) и даже до появления его в EE-версии и скорее всего сейчас не используется. Собственно это и послужило мотивацией для написания статьи
Мы ведь про облака?
Рассматривается же запуск Postgres/Neon на ноде куба, т.е. тарифицируется нода куба, а не запущенные поды/контейнеры на ней. Если действительно это запускается в кубе, то к стоимости ноды придется добавить сумму за использование S3. Если 10 rps, то выходит копейки за месяц, если же 100+ rps, то сумма за использование S3 уже будет начинать ощущаться. В какой-то момент и Neon начнет "затыкаться", это произойдет сильно раньше, чем постоянно работающий Postgres.
Neon выглядит интересно, но кейсы использования его более узки, чем нативная Postgres.
Так если он и так поднят и как выше написал, мы платим за целую ноду куба, то какой профит от него вне бессерверных контейнерах?
А бизнесу никто не сказал, что теперь каждый запрос к БД (S3) будет не бесплатным? Выглядит так, что на нагруженных проектах, нововведение приведет к увеличению ежемесячного счёта в облаке
Которая в итоге выльется в 1-2 секунды. Т.к. трафик не будет направлен в под до тех пор, пока тот не перейдет в состояние "Ready". Все пробы в Kubernetes имеют минимальное значение 1 сек.
число может быть любым простым. Этот скрипт у меня давно уже и вроде как он писан на основе какого-то учебного пособия, скорее всего цифры оттуда
более простого объяснения не знаю
Здесь есть подробное объяснение как это работает, но без подготовки это скорее всего не осилить.
Тут можно закончить словами автора:
Всё, что вам нужно понять на данном этапе, – это то, что технология работает
После прочтения Асимметричное шифрование и ECDH магия осталась магией из-за пропущенного процесса вычисления общего секретного ключа. Потому что
Если не погружаться в самые дебри, то:
У Алисы есть приватный ключ (a) и публичный ключа (A). Публичный ключ высчитывается из приватного ключа A = a x G
У Боба так же приватный (b) и публичный (B = b x G)
G – это базовая точка на эллиптической кривой, общая для всех. Алиса и Боб заранее договорились какую кривую будут использовать. За нас уже всё посчитано, точка описана в стандарте, просто берем её оттуда.
Алиса и Боб обменялись публичными ключами и каждый из них умножает свой приватный ключ на публичный ключ собеседника:
Алиса: a x B => a x (b x G) = ab x G
Боб: b x A => b x (a x G) = ba x G => ab x G
Вот и вся "магия" получения общего секретного ключа
Можете попробовать pyinstaller. Он соберет только необходимые файлы для вашего приложения в один бинарь. Решение спорное, но вроде все ваши потребности закрывает и более безопасным способом
если следовать настройкам из доки яндекса, то доступны все
https://hashicorp-releases.yandexcloud.net/terraform-provider-aws/
Без ВПН можно использовать зеркала Яндекс и Селектел (возможно не только их)
Как это развернуть у себя?
Если это пошаговое how-to, то где шаги для воспроизведения?
Какие плюсы по сравнению с Gitea Actions или Drone?
Почему это называется "платформа"?
В голосовалке отсутствует ещё один вариант
Gitlab и Verdaccio можно сконнектить через OpenID и не мучаться с паролями в htpasswd. Даст возможность использовать CI_JOB_TOKEN в джобах и авторизовываться в web-интерфейсе по кнопке
Я не из США или ЕС
Какие-то абстрактные цифры про средний пробег в 20 км в день. Мне ребенка в школу отвезти и забрать это почти 20 км. Так же у нас холодно, 2 недели было -25 ... -30, это дополнительный расход.
Не хватает зарядки за ночь от розетки, покрывающий мой дневной расход/пробег!!! Зарядка от розетки позволяет реже бывать на зарядной станции. А про очередь и время зарядки проще промолчать. С розеткой мне повезло, удалось договориться с УК чтобы подключиться у охранника.
в Москве возможно и есть)
остается сделать пару манипуляций: подогнать авто к розетке на 19-ом этаже и зарядить за ночь от обычной розетки 85 кВт аккумулятор
Беру свои слова назад, оказывается уже давно добавили кэширование. На каталогах cluster и third_party первое чтение чуть больше секунды (mac mini i7 2012), остальные 60 мс. Как раз последний раз смотрел Gitea не за долго до этого коммита и там было сильно печально.
github тоже частично на рубях писан и работает вполне быстро. Он как и gitlab под капотом использует libgit2. Gitea и Gogs по сути обертки для си-шного бинаря git.
Попробуйте поиграться с репой Kubernetes. У Gitea и Gogs нет кэширования истории коммитов, потому они на больших репах, с длинной историей, будут сильно проигрывать по производительности Gitlab-у, но будут значительно быстрее Gitflic))
Правите конфиг kube-proxy: mode: "ipvs". На каждой ноде куба появляется интерфейс kube-ipvs0 со всеми ip сервисов. Т.е. все кубо-сервисы доступны по этим ip на любой ноде куба.
Добавляете на своем маршрутизаторе маршрут до servceCIDR указав шлюзом любую ноду куба, ipvs с flannel разберутся сами (у меня ещё OSPF был чтобы можно было не писать маршруты до podCIDR нод, дает возможность ходить напрямую в нужный pod)
стенды ходят в сервисы, поды ходят куда направите. Можно смапить внешний сервис через Service без селектора с Endpoints или externalName
Nginx и flannel на стендах больше не нужен
Выводы
Это, слегка костыльное, решение
kube-proxy: mode: "ipvs" + статическая маршрутизация == вся статья
Название статьи должно содержать слова: "Пожалуйста" "пишите" "shell-скрипты" "правильно"
ТО, что многие называют Docker—образами, является Docker V2 Schema 2. OCI, базирующийся на кодовой базе Docker, но по факту сильно отличающийся от Docker V2.
Likewise, Docker contributed the Docker V2 Image specification to act as the basis of the OCI image specification.
Установите skopeo, выполните команды и сравните результаты: