Max
то тут я хз
Max
у меня такой задачки не было
Rainbow
можно пушить все, кроме html, потому что остальное с хешами. Но могут выстрелить когда-то
Rainbow
В смысле сначала все кроме html, а его в конце
Andrey
@alexesDev вам нужно "атомарное" копирование в S3? Может, тогда использовать два бакета, на манер blue/green деплоев?
Rainbow
@alexesDev вам нужно "атомарное" копирование в S3? Может, тогда использовать два бакета, на манер blue/green деплоев?
просто так переключаться между бакетами нельзя. Старые ассеты нужны, если в текущем 404
Andrey
а если старые файлы затираются?
Rainbow
а если старые файлы затираются?
там только html может затереться, остальные с хешами (могут, но крайне редко)
Andrey
ну тогда копируйте старый бакет в новый, потом в новый новые файлы, потом подменяете бакет
Й
Как-то у вас все сложно
Rainbow
blue/green + общая помойка. Примерно то, о чем писал. Только почему-то готовых решений нет
Rainbow
Как-то у вас все сложно
gatsby генерирует статические html страницы, но после загрузки js - становится SPA и остальные страницы создаются через JS 😁 Это на порядок круче SSR, который раньше использовал, если контент не обновляется пользователями или обновляется в приватных или редких случах
Andrey
Сопоставление с корректными версиями js можно в стадию автотеста засунуть
Andrey
Перед пушем в прод
Rainbow
Проблема только отдать корретные html файлы не раньше времени. Тут вопрос почему нет готового 😐 Вроде частый кейс.
Rainbow
Я хотел использовать netlify и забить. Только выходит 2к страниц и netlify это не нравится.
Andrey
а чего именно готового хочется? вы в s3 пихаете зависимые на уровне приложения файлы без указания зависимостей. Как оно вам стелепатит, что копировать сначала, что потом?
Rainbow
Я хочу s3 как источник и daemonset, чтобы на каждом хосте была помойка, которая init контейнером выкачивается 😐
Andor
сначла опечатался девопес, а сейчас думаю, что это не опечатка
Andrey
да ещё что вам одновременно надо и новых клиентов и старых обслуживать
Rainbow
да ещё что вам одновременно надо и новых клиентов и старых обслуживать
за этим и нужна общая помойка с 2-5 последними версиями. Старым клиентам нужны только старые js|css файлы
Andrey
почему у старых клиентов старая версия html доступна, а старые версии js - нет?
Andrey
может, expiration надо грамотно настроить?
Rainbow
почему у старых клиентов старая версия html доступна, а старые версии js - нет?
потому что вчера открыл страницу, а сегодня продолжил
Andrey
вчера открыл страницу, js не подгрузилось?
Andrey
Через куки
Rainbow
вчера открыл страницу, js не подгрузилось?
js разбит на чанки, там не 1 файл
Andrey
Со сроком действия
Rainbow
старый чанк в какой-то момент захочет другой старый чанк и у меня ошибки
Andrey
форсировать обновление html тогда. Понятно, что это на уровне приложения делать надо, но нельзя же всё на инфру спихивать
Andrey
помойка из статики из разных версий может вызвать подземные стуки
Rainbow
Я написал, что хочу s3 как источник + daemonset который initcontainer выкачивает текущий бид в помойку.
Rainbow
Т.е. хеши нормально работают. Старая же практика, ещё с ранних версий rails
Rainbow
/assets/ в expires max
Andrey
ну не знаю. У меня копирование "поверх" всегда отторжение вызывало.
Andrey
как rsync без --delete
Rainbow
ну не знаю. У меня копирование "поверх" всегда отторжение вызывало.
я думаю так делать aws cp s3://... v5 cp -r v5/* помойка И отдача try_files v5 помойка
Andrey
да, это я понял.
Rainbow
Только опять же проблема, что новая нода - пустая помойка 😐
Rainbow
ceph решил бы проблему, только я не буду делать ceph ради статики xD
Rainbow
Хранить помойку на s3 + ttl - во.
Rainbow
А CRD юзать просто как сигнал выкачать нужную версию + обновить помойку + домены, подпапки для веток в деве и тп.
𝚔𝚟𝚊𝚙𝚜
лучше dd if=/dev/null of=/dev/sda
Из /dev/null бесполезно читать
Andor
почему? он сразу EOF вернёт
Andor
либо нули
Andor
надо в реализацию смотреть
𝚔𝚟𝚊𝚙𝚜
Потому что это /dev/null, за нулями это в соседний /dev/zero
𝚔𝚟𝚊𝚙𝚜
Вспоминается цитатка: > ага, ты ещё как BSDobermann сделай "mv file.avi /dev/null" и потом удивляйся, почему у тебя "mplayer /dev/null" кино кажет и этот /dev/null весит 640 мегов)
Andor
почему? он сразу EOF вернёт
сразу EOF конечно root@21e204234603:/# dd if=/dev/null of=/testme bs=1 count=1024 0+0 records in 0+0 records out 0 bytes copied, 7.57e-05 s, 0.0 kB/s root@21e204234603:/# du -b /testme 0 /testme
Alexey
Коллеги, подскажите по следующей проблеме: нода куба переезжала в другую сеть и, видимо, не вполне корректно была остановлена. В логе kubelet ошибки вида Error response from daemon: stat /var/lib/docker/overlay2/5c2..: no such file or directory, в выводе docker ps запущенных контейнеров нет, kubectl get pods -o wide | grep nodename подов не возвращает. Перезапуск docker/kubelet проблему не решил. Подскажите, что делать?
Отделение Bereke Bank
Удали ноду из кластера и добавь заново
Отделение Bereke Bank
Раз там ничего нет
Andrei
у меня configmap делает кончиг для nginx потом deployment использует этот кончиг. Pod стартает с новым конфигом только нехватает команды /usr/sbin/nginx -s reload , как его применить? В deployment?
Andrei
kubectl delete pod -l app=my-nginx если нет бешенных условий работы конечно
нуу так себе решение nginx -s reload нельзя как нить в pod сделать?
Rainbow
нуу так себе решение nginx -s reload нельзя как нить в pod сделать?
это нормальное решение в стиле k8s, если оно не делает больно.
Andor
любое решение нормальное, если оно не делает больно
Rainbow
вообще обычно делают configmap с рандомным именем и apply на deployment с новым конфигом, оно само рестартует по rolling update
Rainbow
* и обычно это автоматом делает тул для деплоя вроде helm (надеюсь, что да xD) или kustomize
Andrei
spec: containers: - name: command-demo-container image: nginx command: ['nginx', '-s', 'reload'] не прокатит?
𝚔𝚟𝚊𝚙𝚜
нуу так себе решение nginx -s reload нельзя как нить в pod сделать?
Nginx можно с SIGHUP kill'ять тогда он конфиг перечитает
Andor
lol
Rainbow
И даже это не сильно круто. ingress-nginx ушел от такого по максимуму. Это к слову, что так делать - тоже не круто. Делайте restart любым способом и все.
Rainbow
У вас в контейнере по хорошему должен быть 1 воркер. Если вы массово будете делать reload на паре контейнеров - печаль.
Vadim
Мне кажется вместо нытья на полтора полтора уже вполне написать свою релоадилку нгинкса
Rainbow
Мне кажется вместо нытья на полтора полтора уже вполне написать свою релоадилку нгинкса
больше велосипедов приятно поддерживать, особенно если не нужны.
Михаил
rke nginx reload
ты жирный
Etki
тоже мне новость
Rainbow
вот теперь я вижу что ты опытный девопс
Не думаю. На приличную ЗП как devopsа не возьмут, тем более linux админом. А все ИМХО от 6 лет разработки и поддержки часто меняющегося ПО одной компании (когда fulltime, когда только вечерами) без космических расходов на команду.
G72K
вчера открыл страницу, js не подгрузилось?
Именно. Без http2 preload js подгружается по мере надобности
Vadim
https://wecode.wepay.com/posts/scds-battle-of-containerization sidecars vs. daemonsets
Rainbow
И с http2 тоже, если специально не пушить
Rainbow
@evvProFfeSsoRr Пока тут новый сервис писал. Я фиг знает как можно поддерживать идентичное окружение на dev|prod, потому что огромные расхождения начинаются уже с Dockerfile. Dev: FROM node:10.8-alpine WORKDIR /app COPY package.json yarn.lock .babelrc /app/ RUN yarn Prod FROM node:10.8-alpine as build WORKDIR /app COPY package.json yarn.lock /app/ RUN yarn COPY . /app/ RUN yarn babel src --out-dir lib FROM node:10.8-alpine RUN apk add --no-cache tini ENTRYPOINT ["/sbin/tini", "--"] WORKDIR /app ADD package.json yarn.lock /app/ RUN yarn --production COPY --from=build /app/lib /app/src CMD ["node", "/app/src/index.js"] В файлах окрестратора примерно такие же отличия. Пару строк в dev и 20-50 в проде.