𝚔𝚟𝚊𝚙𝚜
да, я вот уже в серьез задумался :)
в данный момент kubernetes используется для stateless сервисов, хочется так-же и statefull базы данных в нем запускать
𝚔𝚟𝚊𝚙𝚜
бинго!
𝚔𝚟𝚊𝚙𝚜
Я тут немного пораскинул мозгами - это ведь реально просто реализовать. Kubernetes и сущность StatefulSet отлично для этого подходит.
Понадобится всего лишь простенький скрипт на мастере.
Скрипт будет раз в короткий промежуток времени запускать kubectl get nodes и в случае обнаружения дефектной ноды выполнять fencing для нее, после этого удалять statefull pod'ы, что бы Kubernetes перезапустил их на других нодах.
𝚔𝚟𝚊𝚙𝚜
Keep it short and simple
Vitalii
Поделюсь болью:
В hyperkube 1.8 изменили базовый образ. Из-за этого в kubelet-wrapper, который используется в CoreOS сломался port-forward: socat просто зависает.
Фикса в coreos stable пока нет: https://github.com/coreos/coreos-overlay/pull/2839
Будьте бдительны! Не убивайте почти 2 дня на дебаг, как я:)
Logan
А статус етцд что говорит?
𝚔𝚟𝚊𝚙𝚜
А статус етцд что говорит?
etcd говорит что все впорядке,
а api-server сыпет ошибками вроде:
E1106 18:25:48.000712 1 status.go:62] apiserver received an error that is not an metav1.Status: rpc error: code = Internal desc = transport is closing
I1106 18:25:48.000903 1 trace.go:76] Trace[2097119868]: "Create /api/v1/namespaces" (started: 2017-11-06 18:25:43.915292783 +0000 UTC) (total time: 4.085589052s):
Trace[2097119868]: [4.007451233s] [4.002336898s] About to store object in database
E1106 18:25:48.005714 1 client_ca_hook.go:78] rpc error: code = Internal desc = transport is closing
E1106 18:25:50.467650 1 status.go:62] apiserver received an error that is not an metav1.Status: rpc error: code = Internal desc = transport is closing
I1106 18:25:50.468250 1 trace.go:76] Trace[271110128]: "Create /api/v1/nodes" (started: 2017-11-06 18:25:49.810669425 +0000 UTC) (total time: 657.561839ms):
Trace[271110128]: [657.561839ms] [657.364054ms] END
Oleg
кто пользует kube-lego?
Logan
Я хочу попробовать. Но пока не понял, как скрестить его с трафиком
G72K
Vitalii
Линуса на них нехватает
Насчёт Линуса:)
node_exporter начал падать с panic из nfs collector после обновления ядра до 4.13. Я пока не смотрел, что не так, но явно формат вывода из /proc поменялся
Vitalii
https://docs.google.com/document/d/1ti1Qjt7DKoRThdXWQxHmeRVqjeseOJgNIPBX_H0Sf0Q/edit#
Oleg
Есть желание в игровом кластере развернуть nfs прямо в докере для pv. Например на этом https://hub.docker.com/r/fuzzle/docker-nfs-server/. Норм или есть вариант получше?
G72K
https://docs.google.com/presentation/d/1xeagoDn-6kQ6FPdfX9IlD5MjWalW2o8PeCt20DEfFpg/mobilepresent?slide=id.g272b78446f_0_221
G72K
bebebe
так, а какой модный способ смотреть логи мертвых подов?
нужно менять backend для логов в k8s? типа fluentd, или каковы тренды?
Anton
я чет ссыкую какой то docker logging driver использовать, который по сети отправляет логи. припоминаю что с gelf были ситуации когда контейнер не запускался изза недоступности logstash
Max
Anton
переключили в json, точно не помню, кажется машина с logstash по сети не была доступна. но осадочек остался
Салтыдык
я тоже не стал заморачиваться, собираю логи filebeat'ом
Anton
для fluentd нагугливается https://github.com/moby/moby/issues/15757
где вроде пофиксили поведение, если fluentd недоступен - контейнер запустится всеравно
Anton
в общем, k8s складывает json журналы в /var/log/containers и единственная проблемма - это длинные имена. было бы круто иметь в json поле с именем контейнера, чтобы не думать как с этими именами потом разбираться
Anton
вроде как есть log tag options, чтобы в json больше сыпалось и этого будет достаточно наверное, еще даже не проверял
Max
а если logstash на той же машине?
Anton
на каждой поднимать будешь вручную (вне k8s)?
Max
почему в ручную, например в ECS, еще одним контейнером
Салтыдык
Anton
насчет json-log, достаточно к запуску докер демона добавить --log-opt=labels=io.kubernetes.container.name,io.kubernetes.pod.name,io.kubernetes.pod.namespace и можно будет видеть в json что за нэймспейс\под\контейнер.
я лично предпочел бы ни от чего не зависеть, а уж json логи сливать можно куда захочешь
Anton
ну прост по json то удобнее будет запрос строить
Anton
выглядит потом как то так:
{
"log":"I1107 12:12:36.135370 7 controller.go:313] ingress backend successfully reloaded...\n",
"stream":"stderr",
"attrs":{
"io.kubernetes.container.name":"nginx-ingress-controller",
"io.kubernetes.pod.name":"nginx-ingress-controller-kphcg",
"io.kubernetes.pod.namespace":"default"
},
"time":"2017-11-07T12:12:36.135491879Z"
}
Салтыдык
у меня так:
1. filebeat слушает логи, передаёт их в logstash + путь до файла лога
2. logstash гроком парсит имя лога, накидывает поля каждой записи лога + превращает лог из json в поля
3. закатывает в эластик
Салтыдык
в названии лога есть и имя, и id, и namespace
Anton
ага
Anton
тут только с мультилайном беда в этой схеме
Салтыдык
откуда тут мультилайн? это ж json
Max
сразу в json писать, не парся гроком
Салтыдык
всё, что не закодировано в json — не json
Anton
вот я и говорю, что мультилайновые стэктрейсы придется писать куда то мимо stdout\stderr
Салтыдык
ну это уже у каждого своя магия, мы вроде используем go-zap для логгирования. Если мне не изменяет память, то там стектрейс энкодится
Anton
ну в общем не беда вроде, можно в таких подах держать по агенту для журналов.
писать в hostPath как то не оч, хоть можно и переиспользовать агент, который отправляет логи контейнеров
Anton
тоесть его не прочесть глазами? =)
Салтыдык
для чужих компонентов нужно писать свои правила
Салтыдык
Anton
Салтыдык
grok и json
𝚔𝚟𝚊𝚙𝚜
Кто нибудь про RozoFS что-нибудь слышал/пробовал?
https://github.com/rozofs/rozofs
G72K
Vitalii
Я регуляркой в grsylog расковыриваю нэймспэйс, имя пода и контейнера из полного имени контейнера, которые создаёт kubelet
Mihail
мы логи пока храним и смотрим с помощью https://github.com/flant/loghouse
Anton
Да, в inspect на уровне докера видно кое что с уровня k8s)
Таймураз
Думаю, что /spam
Zloy-Dobry
/spam
Zloy-Dobry
/report
Zloy-Dobry
Нот воркинг
Sergey
Logan
думаю, что мировая ядерная война будет последней. Совокупной мощи арсеналов хватит, чтобы уничтожить планету пару десятков раз.
Sergey
да лан
Sergey
планета хоть вздохнет с облегчением
Logan
при условии что от нее что-то останется
Sergey
останется
Алексей
/spam
Anonymous
@DenisIzmaylov
Lev
https://prometheus.io/blog/2017/11/08/announcing-prometheus-2-0/
Lev
https://github.com/prometheus/prometheus/releases/tag/v2.0.0
Artemiy
Решили с amazon s3 переехать на google cloud storage. По докам, Google Cloud Storage XML API совместим с s3. был ли у кого-то опыт переезда? нужно ли менять клиентов на сервисах?
Ivan
Всем привет!
Кто нибудь смотрел на etcd operator?
https://github.com/coreos/etcd-operator/blob/master/README.md
У меня возник вопрос))
Вот тут по мануалу предполагается поднимать кластер етцд в кубернете...
Но для старта кубернета требуется кластер етцд)))
А как поднять кубер на кластере етцд, управляемом этим оператором?
Anton
static pods наверное используются. kubelet когда стартует, поднимает их
Anton
я не смотрел, прост наугад =)
Ivan
ну я поднимаю на железе CoreOS и при старте кубера использую етцд, вшитые в CoreOS.
там в последней версии корки уже етцд версии 3 идёт
Ivan
ну что, есть у кого какие мысли?
Ivan
M
ну тогда наверное есть варианты, но я не пробовал так
Anonymous
кто-нибудь ставил prometheus operator? там 3 реплики прометеуса если создать они автоматом сумеют в кластер определиться, или рандомно каждый будет пулить метрики отдельно себе?
G72K
G72K
Maksim
G72K
Да