Alexey
нужно слушать или 0.0.0.0. или подсеть твего cni
Andrii
юзать 10.0.2.2 законно?
Andor
100.0.2.2 надо юзать
Maksim
100? Это же не нат сеть? каким макаром адрес стал 100?
Andor
да это так, с прошлой работы воспоминания
Alexey
юзать 10.0.2.2 законно?
зависит от твоего законодательства и религии. ну тогда пробуй подключаться к 10.0.2.2:8000
Alexey
только странно что 10,0,2,2, я думал что на 1 обычно хост заканчивается, ведь это какбы шлюз для подов других
Alexander
Добрый день! Разворачивал k8s на площадке отличной от GCE и аозможно не совсем правильно отключал RBAC для Ci Runner ( https://gitlab.com/gitlab-org/gitlab-runner/issues/2130 ) sh-3.2# kubectl get pods NAME READY STATUS RESTARTS AGE gitlab-gitlab-5dcd88959d-6nwr2 0/1 ContainerCreating 0 10m gitlab-gitlab-postgresql-5fff4f67bb-zqgxx 0/1 ContainerCreating 0 10m gitlab-gitlab-redis-6c88945d56-pw5xm 0/1 ContainerCreating 0 10m gitlab-gitlab-runner-5fc8656997-x86h5 0/1 CrashLoopBackOff 6 10m sh-3.2# kubectl log gitlab-gitlab-runner-5fc8656997-x86h5 W0403 18:54:28.738278 12393 cmd.go:353] log is DEPRECATED and will be removed in a future version. Use logs instead. + cp /scripts/config.toml /etc/gitlab-runner/ + /entrypoint register --non-interactive --executor kubernetes Running in system-mode. ERROR: Registering runner... failed runner=tQtCbx5U status=couldn't execute POST against http://gitlab-gitlab.default:8005/api/v4/runners: Post http://gitlab-gitlab.default:8005/api/v4/runners: dial tcp 10.233.49.219:8005: i/o timeout PANIC: Failed to register this runner. Perhaps you are having network problems sh-3.2# kubectl describe pod gitlab-gitlab-runner-5fc8656997-x86h5 ... Labels: app=gitlab-gitlab-runner pod-template-hash=1974212553 Annotations: <none> Status: Running IP: 10.233.68.51 Controlled By: ReplicaSet/gitlab-gitlab-runner-5fc8656997 Containers: gitlab-gitlab-runner: Container ID: docker://0daccbc35e1eb67be885870bb60bc416f949254b21a774233c2169e4d177713e Image: gitlab/gitlab-runner:alpine-v10.3.0 Image ID: docker-pullable://gitlab/gitlab-runner@sha256:9b1e53a91fc8914c934b9eacf93365c7af97d97514c71b1825f677c8ee2a2369 Port: <none> Command: /bin/bash /scripts/entrypoint State: Waiting Reason: CrashLoopBackOff Last State: Terminated Reason: Error Exit Code: 1 Started: Tue, 03 Apr 2018 18:51:52 +0300 Finished: Tue, 03 Apr 2018 18:52:22 +0300 Ready: False Restart Count: 6 Liveness: exec [/usr/bin/pgrep gitlab.*runner] delay=60s timeout=1s period=10s #success=1 #failure=3 Readiness: exec [/usr/bin/pgrep gitlab.*runner] delay=10s timeout=1s period=10s #success=1 #failure=3 Environment: CI_SERVER_URL: http://gitlab-gitlab.default:8005/ CI_SERVER_TOKEN: <set to the key 'runner-token' in secret 'gitlab-gitlab-runner'> Optional: false REGISTRATION_TOKEN: <set to the key 'runner-registration-token' in secret 'gitlab-gitlab-runner'> Optional: false KUBERNETES_IMAGE: ubuntu:16.04 KUBERNETES_PRIVILEGED: true KUBERNETES_NAMESPACE: default ...Conditions: Type Status Initialized True Ready False PodScheduled True Volumes: var-run-docker-sock: Type: HostPath (bare host directory volume) Path: /var/run/docker.sock HostPathType: scripts: Type: ConfigMap (a volume populated by a ConfigMap) Name: gitlab-gitlab-runner Optional: false default-token-pzl9n: Type: Secret (a volume populated by a Secret) SecretName: default-token-pzl9n Optional: false QoS Class: BestEffort Node-Selectors: <none> Tolerations: <none> Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 12m default-scheduler Successfully assigned gitlab-gitlab-runner-5fc8656997-x86h5 to k8s-node2.gettransfer.cz
Alexander
Normal SuccessfulMountVolume 12m kubelet, k8s-node2.gettransfer.cz MountVolume.SetUp succeeded for volume "var-run-docker-sock" Normal SuccessfulMountVolume 12m kubelet, k8s-node2.gettransfer.cz MountVolume.SetUp succeeded for volume "default-token-pzl9n" Normal SuccessfulMountVolume 12m kubelet, k8s-node2.gettransfer.cz MountVolume.SetUp succeeded for volume "scripts" Normal Started 10m (x4 over 12m) kubelet, k8s-node2.gettransfer.cz Started container Normal Pulled 9m (x5 over 12m) kubelet, k8s-node2.gettransfer.cz Container image "gitlab/gitlab-runner:alpine-v10.3.0" already present on machine Normal Created 9m (x5 over 12m) kubelet, k8s-node2.gettransfer.cz Created container Warning BackOff 2m (x34 over 11m) kubelet, k8s-node2.gettransfer.cz Back-off restarting failed container Коллеги, как быть? Кто сталкивался с деплоем Gitlab Ci средствами helm на bare-metal servers? в чем может быть причина? Может дело в RBAC и если да, то как его отключить "глобально" Спасибо
Vadim
gitlab-gitlab-5dcd88959d-6nwr2 0/1 ContainerCreating 0 10m у вас еще сам гитлаб не поднялся, похоже
Alexander
@vrutkovs да, не могу понять в чем проблема. Ошибки меняются в ходе replase RBAC для helm а
Vlad
А зачем отключать rbac для gitlab-runner?
Vlad
Я запускал с rbac: https://gitlab.com/charts/charts.gitlab.io/blob/master/charts/gitlab-runner/values.yaml ## For RBAC support: rbac: create: true
MRY
Всем привет. Как работает механизм expose если я его делаю на внешний IP, данный внешний IP это IP балансировшика на котором слушается порт ? или как ? просто если у меня 3 воркера и соотвественно мне как то нужно балансить к примеру apache если один из воркеров откажет.
Roman
Сейчас футбол смотрел - там домклик от сбербанка. Это не те ребята, что давно на авитовском митапе были? Никто не знает?
Roman
ну это грусть тогда - придется сверху еще балансер ставить. какой-то вне куба
MRY
BareMetal
Есть варниш и haproxy для балансировки
MRY
тоесть сверху
Roman
haproxy разве не умеет ноду убирать если с ней проблема?
MRY
Я принимаю завпрос предположим на 80 на haproxy а она уже пересылает на воркера запрос. Вопрос в том как на воркере правильно заэкспозить
Roman
Далаете сервис типа NodePort
Vlad
или просто kubectl port-forward
MRY
ok
MRY
попробую
Roman
или просто kubectl port-forward
port-forward это для дебага больше, не очень production. Скорее локально что-то сделать
Dmytro
port-forward он же не балансит а в конкретный под сделает туннель
Dmytro
это вообще не о том
Sergey
80 порт только ингресом вроде
Sergey
Или сервис прикручивать к поду с типом loadbalancer
Sergey
Кстати а чем tcp-services у ингреса не устраивает?
Sergey
Правда можно ли туда 80 порт впихнуть хз, не пробовал
MRY
В итоге все так просто как оказалось, сделал expose как NodePort, на haproxy слушаю 80 посылаю по RR на 3 воркера 32123 (Динамически назначен), вроде как работает, апач отвечает.
Dmytro
проблемы будут потом когда надо больше одного сайта на 80 порту поднять и когда сервис надо будет пересоздать и порт поменяется с 32123 на что-то новое
Roman
Как бороться ???
Я не очень сварщик в bare metal, но в голову приходит схема с consul template. При expose сервиса должен срабатывать хук, который будет генерировать конфиг haproxy и делать reload
Dmytro
Или через хелм хуки накостылить что-то подобное, потому ведь и писали выше что лоадбалансер не в облаке это боль - какого-то коробочного решения нет
Roman
Все так. Если копнуть, то у haproxy кажется был REST API, а у kubernetes сервисы в ENV переменных сидят, можно их оттуда забирать. Но это все боль
Andrey
Как бороться ???
делайте ингресс на 80/443 и балансите на него.
Andrey
80 и 443 порты только daemon set могут слушать на ноде? Начал изучать k8s. поставил traefik. Классная прокся, пока нравится :)
Andrey
Имел в виду в контексте ingress контроллера :) Пораскуриваю дальше deployment
Maksim
Как бороться ???
Nginx proxy by vhost name, чем nginx-ingress и является
Andrey
Нет. Не только.
И без внешнего load balancer? Bare metal инсталляция
Andrey
Спасибо
Anton
В итоге все так просто как оказалось, сделал expose как NodePort, на haproxy слушаю 80 посылаю по RR на 3 воркера 32123 (Динамически назначен), вроде как работает, апач отвечает.
С nodeport у вас еще на кождой ноде rr на iptables, почему нельзя посадить балансир внутрь, чтобы он дискаверил все что нужно внутри и пулял в нужные поды напрямую, без iptables
Anton
80 и 443 порты только daemon set могут слушать на ноде? Начал изучать k8s. поставил traefik. Классная прокся, пока нравится :)
На нодах слушать любой порт можно с hostnetwork, а в daemonset это обернуто для того чтобы на всех машинах запустить и принимать конекты
Andrey
И без внешнего load balancer? Bare metal инсталляция
Внешний LB нужен чтобы запросы от клиента приходили в одну точку. Ingress controller не решает эту задачу. Кроме случая, когда у вас Ingress controller стоит на отдельном edge сервере с внешним IP
Etki
Как бороться ???
1) прочитать доку 2) поставить руками конкретный nodeport > If you want a specific port number, you can specify a value in the nodePort field, and the system will allocate you that port or else the API transaction will fail (i.e. you need to take care about possible port collisions yourself). The value you specify must be in the configured range for node ports.
Andrey
Я думаю, это плохая практика привязывать конкретный порт через nodePort. Потом надо вручную следить за коллизиями. Про "почитать доку" - это конечно хорошо, но конкретно этот вопрос ставит в ступор большинство новичков, которые начинают с bare metal без возможности ипользовать облачные LB
Mikhail [azalio]
В одной из компаний где я работал сеть подов была доступна из других сетей. При старте приложение анонсило себя в etcd, дальше с помощью confd формировался конфиг для nginx который уже был балансером. Сам nginx был не в кубере.
Tim
Я не очень понимаю, ingress controllers под эту задачу разве не подходят (nginx, haproxy, traefik)?
Andrey
если сеть делается вручную, то видимо нет
G72K
Как бороться ???
выставить сервис nginx ingress controller, прописать *.mydomain.com на ваши внешние haproxy и рулить именами сайтами через Ingress ресурсы внутри куба
Aleksandr
Кто-то использовал taints / tolerations? Добавил taint на ноду с NoSchedule, но поды все равно там шедулятся Хотя tolerations не прописаны еще
Aleksandr
Хочу сделать несколько нод где будут только cronjobs запускатся. Версия куба 1.8.10
Aleksandr
Та вот и я думаю что должно работать, но что-то не так)
𝚔𝚟𝚊𝚙𝚜
а как taint прописывал?
𝚔𝚟𝚊𝚙𝚜
kubectl taint nodes node1 key=value:NoSchedule- так должно работать
𝚔𝚟𝚊𝚙𝚜
А кто нибудь MetalLB использует?
Й
А кто нибудь MetalLB использует?
Поддерживаю вопрос. Есть ли реальные инсталляции и как оно себя ведет в продакшене
Aleksandr
kubectl taint nodes node_name dedicated=cron:NoSchedule
Aleksandr
По describe видно что taint есть
neb0t
Тот же вопрос -после деплоя нужно пустить в лайв арр. В арр есть домен. С композом - запускал нгинкс, на волюм ложил конфиг с прокси_пасс на внутренное имя контейнера с контентом. Как быть с баре-метал? Понимаю что порт не выход. Сейчас род на агенте крутится у которого есть паблик ИР. И забегая на перед - если я начну делать скейл - как принять новые поды в балансер и соответсвенно удалить в будущем, если нет нагрузки ?
neb0t
https://www.haproxy.com/blog/haproxy_ingress_controller_for_kubernetes/ ?
𝚔𝚟𝚊𝚙𝚜
Ну я планирую romana-vip использовать, т.к. в целом работает весьма неплохо
𝚔𝚟𝚊𝚙𝚜
айпишник асигнится на baremetal ноду и перезжает вместе с подом, в случае чего
neb0t
@etkee полагаю что нет) С композом я юзал конссул для рендера конфига для нгинс при скейле сервисов. Сейчас сервис доступный на порту агента (в сервисе нодеПорт).
neb0t
@kvaps romana-vip - а зачем городить еще что-то, если есть kube-dns встроеный? Сервис дискавери уже зашит по умолчанию в куб. И думаю что в контексте одного пода я могу обращаться к контейрам внутри (с арр на дб и наоборот по лейблу). Или нет ?
𝚔𝚟𝚊𝚙𝚜
Внутри кластера да, но вот как организовать доступ снаружи - вопрос совсем другой
𝚔𝚟𝚊𝚙𝚜
romana-vip - нужен для external-ip
Etki
@etkee полагаю что нет) С композом я юзал конссул для рендера конфига для нгинс при скейле сервисов. Сейчас сервис доступный на порту агента (в сервисе нодеПорт).
Ток рендерить конфиг не нужно, имя сервиса известно заранее. В крайнем случае через sed при запуске прокинуть.