Denis
Подобный выхлоп должен быть от всех срвисов. Но если такого эффекта, нет то возможно что то с kube-proxy
Denis
Там в k8s доке есть статья про траблшутинг сервисов. Может поможет
Dmitrii
Там в k8s доке есть статья про траблшутинг сервисов. Может поможет
То есть, за установку правильных маршрутов в iptables отвечает kube-proxy, я правильно понял?
Denis
То есть, за установку правильных маршрутов в iptables отвечает kube-proxy, я правильно понял?
Он отвечает за маршрутизацию трафика к подам насколько я понимаю..Правила все находятся на ноде-мастере, кубе прокси их читает и приводит в действие
Andrey
по поводу aws ebs - как то криво получается у меня типа красиво multi az а ebs коннектится только в своей az чет не могу понять как нормально сделать
Huan
привет всем. кто-то может помочь с кластером? не поднимается etcd
Huan
вываливается ошибка: May 28 11:27:15 kube-master1 kernel: [ 196.074966] etcd invoked oom-killer: gfp_mask=0x24000c0, order=0, oom_score_adj=0 May 28 11:27:15 kube-master1 kernel: [ 196.074970] etcd cpuset=64aee0c535498766036b1b9f1138cd62c9bbdde2a5d68841f044c9c303ec4619 mems_allowed=0 May 28 11:27:15 kube-master1 kernel: [ 196.074982] CPU: 3 PID: 3394 Comm: etcd Not tainted 4.4.0-119-generic #143-Ubuntu May 28 11:27:15 kube-master1 kernel: [ 196.075168] [ 3394] 0 3394 2757699 133213 287 6 0 0 etcd May 28 11:27:15 kube-master1 kernel: [ 196.075171] Memory cgroup out of memory: Kill process 3394 (etcd) score 1018 or sacrifice child May 28 11:27:15 kube-master1 kernel: [ 196.075242] Killed process 3394 (etcd) total-vm:11030796kB, anon-rss:523764kB, file-rss:9088kB May 28 11:27:16 kube-master1 systemd[1]: etcd.service: Main process exited, code=exited, status=137/n/a
Huan
Дык прям в тексте - не хватает памяти, пришёл оом и пристрелил etcd.
это я понял. но не могу понять почему. работал кластер месяц и сегодня перестал. на этом хосто только мастер кубера крутится
Oleg
это я понял. но не могу понять почему. работал кластер месяц и сегодня перестал. на этом хосто только мастер кубера крутится
Потребление памяти линейно зависит от количества данных. etcd, я так понимаю, в кубере. Какие лимиты выставлены?
Huan
добавил своп и заработало. но после ребута кубер разве поднимется?
Anonymous
Господа, всем доброго времени суток! Подскажите, пожалуйста, есть ли способ зафорсить присвоение IP-адреса при создании внутреннего лоадбалансера в GKE? Ситуация следующая: Развернул в GKE кластер Hadoop, и пытаюсь создать внутренний лоадбалансер со статическим IP, чтобы смотрел на YARN RM UI. Но беда в том, что при обращении на yarn_ip:8088 ничего не происходит, но при этом всё живо и если перейти по yarn_ip:8088/cluster - веб-интерфейс отлично открывается. Беда в том, что в силу того, что UI ничего не отвечает по умолчанию с голого порта (без path дальнейшего) - гугл не хочет присваивать ему статический IP (даже с типом Internal). И в итоге так и висит в pending: hadoop-yarn-ui LoadBalancer 10.31.244.25 <pending> 8088:32075/TCP Собственно, вопрос: возможно ли или в ямле с сервисом как-то прописать дальнейший path, или же зафорсить присвоение IP? Спасибо огромное!
Anonymous
На всякий случай, сам лоадбалансер:
Anonymous
apiVersion: v1 kind: Service metadata: name: hadoop-yarn-ui annotations: cloud.google.com/load-balancer-type: "Internal" labels: app: "hadoop" component: "yarn-resourcemanager" version: "2.7.3" environment: "dev" type: "service" subtype: "internal" spec: type: LoadBalancer loadBalancerIP: 10.100.1.140 ports: - port: 8088 name: web selector: app: "hadoop" component: "yarn-resourcemanager" version: "2.7.3" environment: "dev"
Oleg
делал все по дефолту, разворачивал через kubespray
Мне это говорит ровно ни о чем. Либо у вас стоит лимит на etcd, либо не хватает памяти на машине. Свопить etcd - очень плохая идея.
Silver 👻
Кстати, а сколько рекомендуется памяти на мастере при, скажем, 200 подах
Silver 👻
А при 1000?
Dmitrii
за привоз правил на ноду
Миша, ну вот смотри, какая ситуёвина. По советам местных проследовал полностью по методичке дебага сервисов: https://kubernetes.io/docs/tasks/debug-application-cluster/debug-service/ Результат такой. На мастере: root@kube-master:~# iptables -t nat -nvL | grep 10.96.0.10 0 0 KUBE-MARK-MASQ udp — * * !192.168.0.0/16 10.96.0.10 /* kube-system/kube-dns:dns cluster IP */ udp dpt:53 0 0 KUBE-SVC-TCOU7JCQXEZGVUNU udp — * * 0.0.0.0/0 10.96.0.10 /* kube-system/kube-dns:dns cluster IP */ udp dpt:53 0 0 KUBE-MARK-MASQ tcp — * * !192.168.0.0/16 10.96.0.10 /* kube-system/kube-dns:dns-tcp cluster IP */ tcp dpt:53 0 0 KUBE-SVC-ERIFXISQEP7F7OF4 tcp — * * 0.0.0.0/0 10.96.0.10 /* kube-system/kube-dns:dns-tcp cluster IP */ tcp dpt:53 root@kube-master:~# dig @10.96.0.10 hostnames.default.svc.cluster.local +short 10.110.47.131 На слейве — всё то же самое, только dig отваливается по таймауту.
Dmitrii
правила iptables для hostnames при этом есть на всех нодах (и мастере, и миньонах)
Andrey
правила iptables для hostnames при этом есть на всех нодах (и мастере, и миньонах)
Ну хорошо, а с самой сетью точно все нормально? Настройки cni проверь
Andrey
Что используешь?
Дмитрий Харитонов
правила iptables для hostnames при этом есть на всех нодах (и мастере, и миньонах)
Сходи неткатом на сервис днс с люого хоста, затем сходи неткатом на докеровый айпишник контейнера с dns, затем сходи неткатом на айпишник контнйнера днс с хоста на котором этот контейнер поднят. Тогда уже будет ясно на чём затык.
Дмитрий Харитонов
Можно для начала не неткатом, а дигом.
Dmitrii
Сходи неткатом на сервис днс с люого хоста, затем сходи неткатом на докеровый айпишник контейнера с dns, затем сходи неткатом на айпишник контнйнера днс с хоста на котором этот контейнер поднят. Тогда уже будет ясно на чём затык.
Да, становится и правда яснее. kuber@kube-master:~$ kubectl get service —all-namespaces | grep kube-dns kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 20d home:~$ nc -vv 10.73.64.167 53 DNS fwd/rev mismatch: cfg != cfg.crptech.local cfg [10.73.64.167] 53 (domain) open любой хост: any-host:~$ nc -vv 10.96.0.10 53 <завис/пусто> однако если через udp: any-host:~$ nc -uvv 10.96.0.10 53 Connection to 10.96.0.10 53 port [udp/domain] succeeded! С мастера (где поднят kube-dns): kube-master:~$ nc -vv 192.168.221.203 10053 (внутренний ip контейнера) Connection to 192.168.221.203 10053 port [tcp/*] succeeded! kube-master:~$ nc -vv 10.96.0.10 53 (clusterIP сервиса) Connection to 10.96.0.10 53 port [tcp/domain] succeeded!
Dmitrii
Значит, подозрение на то, что tcp на 53й порт что-то зарубает.
Dmitrii
Что используешь?
calico использую, настраивал по официальной инструкции
Михаил
8.8.8.8 пингуется
Глупый вопрос, а что в resolv.conf в поде?
Dmitrii
Глупый вопрос, а что в resolv.conf в поде?
Да вроде корректно: nameserver 10.96.0.10 search default.svc.cluster.local svc.cluster.local cluster.local crptech.local options ndots:5
Евгений Семашко
Всем привет! провожу опрос от компании Synapse, кому интересно, пройдите, пожалуйста https://goo.gl/forms/iqaPnItOHHf3dQJ72
Lex
/report
Дмитрий Харитонов
Дмитрий Харитонов
Да, становится и правда яснее. kuber@kube-master:~$ kubectl get service —all-namespaces | grep kube-dns kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 20d home:~$ nc -vv 10.73.64.167 53 DNS fwd/rev mismatch: cfg != cfg.crptech.local cfg [10.73.64.167] 53 (domain) open любой хост: any-host:~$ nc -vv 10.96.0.10 53 <завис/пусто> однако если через udp: any-host:~$ nc -uvv 10.96.0.10 53 Connection to 10.96.0.10 53 port [udp/domain] succeeded! С мастера (где поднят kube-dns): kube-master:~$ nc -vv 192.168.221.203 10053 (внутренний ip контейнера) Connection to 192.168.221.203 10053 port [tcp/*] succeeded! kube-master:~$ nc -vv 10.96.0.10 53 (clusterIP сервиса) Connection to 10.96.0.10 53 port [tcp/domain] succeeded!
Кароче так, если с любого хоста udp порт днс по айпишнику контейнера доступен, а по сервисному нет, то проблема в kube-proxy. Если с любого хоста днс не доступен по контейнерному айпишнику, то проблема в провайдере сети. Calico у тебя вроде. Хотя у меня была какая-то такая же ошибка, и я поборол её включив маскарадинг на интерфейсе провайдера сети(у меня weave) на серваке мастера.
Dmitrii
Пофиг на tcp. Главное чтобы udp ходило
я не уверен, что оно ходит. мне тут справедливо заметили, что при использовании nc -u всё-таки что-то надо послать, иначе это ни о чём. киваем на calico, отдебажить не смогли долго медитировал на iptables, пока ничего не понял
bebebe
дебажить неработающий dns в k8s это давнишняя народная забава
bebebe
Не легче hosts прибить?
это было не приемлемо
Denis
Кто нибуть использовал helm-value-store ? С etcd или consul?
Dmytro
Я их руками пишу и стараюсь не допускать дублирования
а что плохого в дублировании? Уже ж вроде до программистов дошло что DRY не всегда хорошая идея и лучше продублировать чем иметь сильную связность. Тут у тебя такая же проблема, лучше в каждом env отдельно выписать значения чем делать так чтобы разые env зависели от какие-то общих констант (которые потом коллега поменялс лучайно для дев и поломал прод)
Silver 👻
Правильное переиспользование в 90% случаев эффективнее, КМК.
Dmytro
То есть, если у меня 5 сред, то и ямлов для деплоймента тоже 5? Не кажется слабо масштабируемым решением?
кажется отлично масштабируемым решение со слабой связностью. У меня 25 сред сейчас, 25 value.yaml * количество микросервисов
Silver 👻
Что за value.yaml? Можно подробнее?
Dmytro
Ок. Опишу более детально. Есть около 40 сервисов (часть своих, часть легаси). У каждого из них есть свои конфиги (свои можно переписать на ENV, но это будет долго). Сейчас есть сервис хранения и раздачи конфигов. При подъеме сервиса дергаем курлом конфиг и поднимаемся. Вроде все отлично, но меня смущает безопасность и сама идеология. Хотелось бы отказаться от этого сервиса с конфигами и хранить их как-то более правильно.
я бы предложил следующее: 1. сделать helm chart на каждый сервис 2. каждый helm chart должен все что надо этому сервису получать через values.yaml 3. прокидывать значения из values.yaml в deployment через env (+ env value from secret и секреты для секретов) 4. дальше в контейнере(рах) каждого деплоймента в entrypoint.sh из этих переменных окружения генерить конфиги
Dmytro
Ваще если конфиг никогда во время жизни приложения не меняется, то конфигмапы ок
+1, в таком случае можно весь конфиг этот передать через values.yaml и потом хелмом создать конфигмап и данные из values положить в конфигмап
Dmytro
В нашем случае конфиг статический и меняется сильно редко. Дергаем при старте из сервиса и сохраняем внутри контейнера.
тогда тем более при создании чарта будет норм, плюс аннотация https://github.com/kubernetes/helm/blob/master/docs/charts_tips_and_tricks.md#automatically-roll-deployments-when-configmaps-or-secrets-change
Dmytro
И еще момент, никто не извращался так: нужно поднять еще один кластер монги, есть мысль добавить worker ноды и на них не через куб поставить монгу. Профит - легко подключить к мониторингу, минусы …?
если облако и захотите динамически создаваемые PV - куб пока не умеет их в XFS форматировать, плюс еще кучу sysctl надо накрутить чтобы монга лучше себя чувствовала включая huge pages, эти настройки будут действовать на всю ноду и другие приложения на этой ноде могут от этих настроек пострадать. если это не страшно для вас то в-целом можно, у меня 3 реплсета монги так крутится в виде statefulset уже больше года в проде
Dmytro
Имеется в виду ситуация, когда deployment потребляет конфиг, конфиг меняется, а deployment (точнее, поды) нужно передёргивать руками
если есть хелм то https://github.com/kubernetes/helm/blob/master/docs/charts_tips_and_tricks.md#automatically-roll-deployments-when-configmaps-or-secrets-change
Mikhail
Неа, нету. Но, видимо, будет
Dmytro
а можно ли прикрутить s3 bucket как shared storage?
можно но очень же медленно будет
Dmytro
по поводу aws ebs - как то криво получается у меня типа красиво multi az а ebs коннектится только в своей az чет не могу понять как нормально сделать
а можно поподробнее в чем проблема? нужно иметь ноды в каждой AZ и тогда будет маунтить на корректную ноду (куб PV manager для AWS все это умеет, там есть кое-какие баги но сначала хотелось бы понять какой кейс)
Dmytro
Кстати, а сколько рекомендуется памяти на мастере при, скажем, 200 подах
все сильно индивидуально, зависит от частоты деплоя и т.п. Из того что я наблюдаю в своих кластерах - мастеру надо хотя бы 2 цпу, иначе будут рандомные тормоза и т.п.
Silver 👻
Ну скажем, два-три деплоя в неделю
Silver 👻
4 гиг должно хватать же?
Dmytro
Правильное переиспользование в 90% случаев эффективнее, КМК.
это какой-то подход из 90 и книг Александреску про C++...
Dmytro
Что за value.yaml? Можно подробнее?
это входные параметры для хелм, я писал ниже
Silver 👻
Угу, уже понял
Dmytro
Спасибо... Helm я чет пока не осилил. Какое-то оно слишком перемудреное, ИМХО.
да нет же ничего мудреного, по сути те же yaml файлики но еще плюс шаблонизатор, значения для шаблонизатора приходят через values - т.е. по сути входные данные. Другими словами, мы делаем portable приложение, все деплойменты, сервисы, секреты и т.д. будут созданы хелмом, чтобы установить приложение несколько раз нужно передать нужны пераметры через yaml. Ну и по дублированию, конечно когда конфиг будет генерироваться как конфигмап хелмом или внутри entrypoint.sh все значения которые одинаковые для всех env можно прямо в хелм чарте или entrypoint.sh захардкодить
Silver 👻
Это теория, которая проста и понятна. Но вот доку для старта нормальную я так и не нашел. Чтоб по шагам.
Silver 👻
Всё какое-то странное
Dmytro
Извиняюсь что вмешиваюсь Вы как отдаете values.yaml хэлму? Обычным способом?
через stdin, генерирую с помощью руби темплейта (часть значений генерируется на основе имени неймспейса, пароли и т.п. беру из passwordstore, и еще часть значений вытаскиваются на лету из cloudformation stack outputs) - и вот этот сгенерированный yaml через stdin подсовывается команде helm
Silver 👻
Ладно. Со временем разберусь
Silver 👻
Я только неделю куб кручу
Dmytro
4 гиг должно хватать же?
мастер имеется ввиду чисто мастер или там еще и etcd бежит? У меня etcd отдельно, мастера c4.large/c5.large т.е. 2 цпу 4 гига рам - уже полтора года как работает норм, деплоим каждый день несколько раз на неймспейс, т.е. штук 20-30 деплоев в день на кластер бывает, бывает и больше
Dmytro
фух, дочитал, сорри за стену текста
Silver 👻
Там все
Silver 👻
Но идею понял
Silver 👻
Спасибо за советы
Dmytro
Ладно. Со временем разберусь
туториал по хелму? у них неплохая дока же, и как пример для старта своего приложения глянуть какой-то чарт попроще из комьюнити, где один деплоймент один сервис
Dmytro
Там все
тогда никак не оценить, ведь в etcd лежат все конфигмапы, секреты и т.д. и это все в оперативе
Dmytro
у вас может быть 10 подов а конфигмапы многомегабайтные