Max
через шаблонизацию? а ткните в доку(
Anton
Ребят, помогите, что то забуксовал совсем я.
есть кластер кубера, написал первую таску. Есть несколько вопросов
1) Как вставить таймаут между стартами контейнеров, и строго ли по списку кубер контейнеры стартует, если не строго то как сделать строго, ни как не могу даже упоминания об этом в доке найти.
2) Не понятность: мне нужно крутануть контейнер который инициализирует предыдущий запущенный контейнер(аля батч). Можно ли такое вообще сделать ?
3) DNS и CONFIGMAP- не понятно как реализован поиск контейнеров, везда указал name контейнеров (старт подов описан в деплойменте), но получаю в ответ host not found. Вообще кейс поиска сервисов как реализован, очень не понятно, одни описывают через сервис и поиск как публичных служб, другие описывают прямо IP адреса служб (как я могу узнать их если они в динамике). Короче вообще не понятки.
1) приложения не должны расчитывать на какой то порядок. если тебе нужен порядок старта - пилишь entrypoint который дожидается каких то события и потом стартует апп
2) обычно initcontainer преднастраивает. но вообще есть такая вещь как postStart hook, можно через него выполнить что то после старта https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/
Alexey
Anton
Ребят, помогите, что то забуксовал совсем я.
есть кластер кубера, написал первую таску. Есть несколько вопросов
1) Как вставить таймаут между стартами контейнеров, и строго ли по списку кубер контейнеры стартует, если не строго то как сделать строго, ни как не могу даже упоминания об этом в доке найти.
2) Не понятность: мне нужно крутануть контейнер который инициализирует предыдущий запущенный контейнер(аля батч). Можно ли такое вообще сделать ?
3) DNS и CONFIGMAP- не понятно как реализован поиск контейнеров, везда указал name контейнеров (старт подов описан в деплойменте), но получаю в ответ host not found. Вообще кейс поиска сервисов как реализован, очень не понятно, одни описывают через сервис и поиск как публичных служб, другие описывают прямо IP адреса служб (как я могу узнать их если они в динамике). Короче вообще не понятки.
3) самый простой способ дискаверить сервисы в к8с - через днс. ищешь по именам сервисов. service может быть headless - тоесть будет резолвится во все адреса подов. вариантов много на самом деле.
Alexey
Alexey
Anton
Alexey
пока не шаблонизируешь ничего?
Да даже не могу найти ссылки на какие переменные есть для шаблонизатора, и если они есть (особенно ссылки на секреты и порты и хосты) Я буду очень рад )
Max
я просто термин такой не знаю) если про то что написать yaml - то конечно я все так делаю
просто у меня же реплика сет
и там foo-1.bar foo-2.bar и тд - не хочется все это писать руками
Alexey
Alexey
А батчу скармливать конфигом чего докатывать.
Alexey
Получится отвязатся от версий конфигов для разных версий в гите, жестко это вымораживает
Max
Alexey
Ладно с инициализацией пока на потом. Мне бы помочь с шаблонизатором для Config MAP. И DNS, указал для приложеньки в качестве хоста то что указал в name - получил отбой что хост не найден. Я описал старт через Deployment. В доке кубера указано что бы пользоваться hostname нужно испльзовать POD. Тогда как деплой то описывать ) https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/ . Однако если я это пробую использовать в spec Deployment - получаю ошибку синтаксиса
Alexey
Может проще - как вы сами в своих конфигах контейнеры находите ? Генерируете через шаблонизатор (списки IP адресов), DNS (как там с TTL тогда дела обстоят), если DNS то получается порты уже в динамике нельзя использовать, то есть 1 контейнер на 1 ноду, не очень это хорошо
Alexander
Как правильно публиковать свое приложение? Баре метал. Ингресс nginx от k8s. Необходимо опубликовать на 80 порт. В сервисе приложения выбирать ноде порт, а этот нод порт закреплять за бекендом ингреса?
Stanislav
Если ингресс уже есть - через него
Stanislav
Ну то есть, определить сервис без всяких NodePort, на который и натравлять ингресс
Stanislav
А в чём, собственно, проблема?
Alexander
Max
Stanislav
bare metal - только NodePort, либо как я вчера - через hostNetwork: true
Alexey
ну сервис раздает днс имена - не понял вопроса
Вопрос следующий, есть контейнер, для него есть в конфиг, в конфиге мне нужно указать ему для общения другие контейнеры, публиковать мне эти контейнеры не надо, пускай работают через внутреннюю сеть. Вопрос как это сделать ? Забыл написать - конфиг отдаю через Config Map
Alexander
Stanislav
В случае NodePort понадобится секция externalIPs: в описании сервиса ingress-nginx
Stanislav
В ней - список ip-адресов узлов, где надо слушать 80,443
Max
Stanislav
Тоесть на 80 порт не могу опубликовать?
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx
namespace: ingress-nginx
spec:
type: NodePort
ports:
- name: http
port: 80
targetPort: 80
protocol: TCP
- name: https
port: 443
targetPort: 443
protocol: TCP
selector:
app: ingress-nginx
externalIPs:
- x.x.x.88
- x.x.x.30
Stanislav
С дефолтным mandatory.yaml вполне работает
Alexey
pzoo-0.pzoo - это имя как получилось. Что нужно указать для deployment что бы получилось имя. Ну и это костыльно, очень костыльно. Нет возможности как более элегантно искать другие сервисы, что бы не было привзяки к нодам и портам. Или если кубер создает отдельный IP на каждый контейнер - то в принципер норм, если порт всегда будет одинаковым
Stanislav
Но есть грабля - в логах отражается ип узла из externalIPs, куда пришел запрос
Stanislav
Гм... Где это имя получилось (где увидел)?
Alexey
server.1=pzoo-0.pzoo:2888:3888:participant
Из гита ссылка же
Alexey
pzoo-0.pzoo - вот этот кусок из чего складывается. Ну например pzoo-0 - это metadata:name, а pzoo - это container:name. Я пример привел, не знаю как оно в реалн
Max
я как то теряю диалог)))
вот это генерит pzoo-0.pzoo:2888:3888:participant
https://github.com/Yolean/kubernetes-kafka/blob/master/zookeeper/20pzoo-service.yml
Max
а)) ну это стейтфул сет с репликацией
https://github.com/Yolean/kubernetes-kafka/blob/master/zookeeper/50pzoo.yml#L12
кубер сам прибавляет номера для каждой реплики вот тут это написано
https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/
Alexey
Alexey
Может я ошибочно пытаюсь логику работы nomad натянуть на кубера? У номад есть шаблонизаторы и поиск служб, просто поиск. Видимо у кубера свои подходы, просто не понятно какие, в документации создаются службы в вакууме, общающиеся только с внешним миром, а как организовать взаимосвязанную работу примеров особо нет.
Михаил
Stanislav
Михаил
Stanislav
Alexey
вот пример из доки.
pod-ip-address.my-namespace.pod.cluster.local - сущность pod, я описал deployment, внутри deploument будут поды, но будут ли они видны так же. Дело в том что metadata поле у меня одно на два пода.
Stanislav
Сделай сервис и ходи через днс на него. Это проще всего будет.
Stanislav
Публиковать сервис наружу необязательно
Alexey
Сервис менее выгоден с точки зрения маршрутизации. Там стык будет через выход за пределы vxlan сети. что не есть хорошо, зачем это делать если они напрямую могут друг с другом взаимодействовать. Другое дело что если за сервисом несколько подов, то через балансер я найду 1. Вот блин и ответ
Alexey
спасибо ))
Alexey
Теперь дошло, пока писал дошло
Stanislav
Там тех потерь - за пределами точности измерения в нормальных условиях.
Alexey
Stanislav
Ну так если нужен доступ снаружи (у меня на работе - это единственная возможность получить заметную нагрузку на conntrack) - в любом случае надо ставить внешний лоадбалансер, в котором заодно использовать всякие mod-security, limit-rate и т.п.
Alexey
Ещё вопрос, а можно секрет засунуть перменной в конфигмап ?
Stanislav
Кто на ком стоял?
Stanislav
По-моему, configMap создаётся не из секретов.
Stanislav
Если надо в одном месте хранить и конфги и секреты - делайте projected volume
Alexey
По-моему, configMap создаётся не из секретов.
да, потому и спрашиваю, можно ли? Идея какая, один конфиг мап на все случаи жизни, в разных namespace лежат версии, а в прод мапится свои секреты, при этом сам конфиг мап одинаковый и забирает секрет из своего namespace.
Stanislav
Проще таки для прода другой секрет подцепить.
Bsod
юзай темплейт, куда при старте из энва клади
Vitaliy
отцы, подскажите.
вот есть свежий 1.11 кластер. сертификаты конечно на 1 год сгенерировались kubeadm-ом. вроде бы kubelet настроен на авторотейт при "скором протухании, <180d" сертификата. Но вот как дела обстоят с control-plane сертами?
они тоже умеют автообновляться или надо что-то делать руками для этого? туплю
Bsod
щито поделать десу
Alexey
Alexander
Stanislav
externalIps тут - адреса, привязанные к внешним интерфейсам узлов, где будет открыт 80-й порт
Stanislav
Мне проще было сделать запись в днс вида *.kubernetes.domain.tld и потом прописывать нужное имя в ingress для соответсвующего сервиса
Stanislav
Это для доступа снаружи. Изнутри всё работает по короткому имени
Stanislav
А хз, мне просто было так проще перетаскивать сервисы из docker swarm
Anton
добрый день, прошу помощи и прояснения (просветления даже) с prometheus operator, не получается до конца осознать концепцию, а если точнее, то не ясно как влиять на параметры конфигурации прометея, которые задаются не динамически.
Sergey
Anton
не совсем ясно как создавать побоное правило
Denis
Подскажите пожалуйста создал через cert-manager LE серт, пытаюсь его прикрутить через ingress. Но мне отдается 503 ошибка
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
ingress.kubernetes.io/ssl-passthrough: "true"
nginx.ingress.kubernetes.io/secure-backends: "true"
kubernetes.io/tls-acme: "true"
certmanager.k8s.io/issuer: letsencrypt-production
name: devsite
selfLink: /apis/extensions/v1beta1/namespaces/default/ingresses/devsite
spec:
rules:
- host: my.domain.com
http:
paths:
- backend:
serviceName: my-frontend
servicePort: 8181
path: /
- host: my.domain.com
http:
paths:
- backend:
serviceName: my-backend
servicePort: 3000
path: /api
tls:
- hosts:
- my.domain.com
secretName: my-domain-com-tls
status:
loadBalancer: {}