Алексей
не понял, к сожалнию, что надо сделать
apply the ClusterRole and ClusterRoleBinding specs
G72K
если сделать ресет, то нормально стартует. Но у меня стоит coreos и он сам автоматически ребутится если есть новые обновление системы
встроенный ребут coreos ничего не знает про ваш куб, им пользоваться опасно т.к. может убить слишком много (скажем что-нибудь что запущено в кубе потеряет кворум)
G72K
Спасибо, сейчас попоробую
ноды все равно будут добавляться, но только те, на которых есть поды будут живыми
Maksim
А что за мода на CoreOS пошла?)
l1njan
apply the ClusterRole and ClusterRoleBinding specs
не помогло, логи пода выводят ту же ошибку. centos 7, selinux off кластер и нода - та же машина. разворачиваю так: kubeadm reset; rm -rf /var/etcd kubeadm —pod-network-cidr=192.168.0.0/16 init kubectl apply -f https://docs.projectcalico.org/v2.6/getting-started/kubernetes/installation/hosted/kubeadm/1.6/calico.yaml kubectl taint nodes —all node-role.kubernetes.io/master- kubectl apply -f https://rawgit.com/kubernetes/ingress/master/examples/deployment/nginx/kubeadm/nginx-ingress-controller.yaml подскажите, пожалуйста, где ошибся. мб в версиях?
Maksim
а уде потом по документации вычитаь что нужно калико для работы (какие права) и установить ровно их. (Излишние права в проде это плохой тон и потенциальная дыра)
l1njan
ух. я уже размечтался, что сейчас с полпинка k8s разверну для тестов. благодарю, постараюсь разобраться
Maksim
kubectl apply -f {{site.url}}/{{page.version}}/getting-started/kubernetes/installation/rbac.yaml
Maksim
В этом yamle описаны правила для калико
Maksim
почитай его, там скорее всего есть имя пользователя...
Maksim
и ещё как ты логинешь пользователей? ПО токенам?
l1njan
пока никак. я пытаюсь заставить nginx-ingress работать
Maksim
я не знаю как работает твоя тулза еплоя
Maksim
не..
Maksim
все что касается аписервера является пользователем
Maksim
в том числе и внутренние (kubelet controller и т.п.)
Maksim
Все пользователя получают данные от АПИ сервера в три этапа
Maksim
1. Аутентификация (Определения логина и группы)
Maksim
2. Авторизация (Определения Ролевой модели (над какими объектами, и что может данный пользователь (группа)
Maksim
3. "Модульный контроль" (А эта фича вообще доступна/Включена)
Maksim
Так получает доступ к данным АПИсервера все, без исключения
Maksim
Я бы выключил rbac авторизацю пока что
Maksim
у апи сервера есть ключик —authirization=rbac удали его
Maksim
*И тут Остапа Понесло
l1njan
эта трехэтапная модель - модель RBAC?
Maksim
RBAC этолько второй этап
Roman
для этгов сервисе есть externalTrafficPolicy=Local (начиная с 1.7)
Добаялет все ноды но при этом пишет OutOfService там где нету подов. Но так тоже подходит
Maksim
Это полноя подель контролля пользователей в АПИсервере
l1njan
у апи сервера есть ключик —authirization=rbac удали его
можно ли указать его при kubeadm init?
Maksim
а вот не знаю) я этой тулзой не пользуюсь
l1njan
спасибо, попробую без RBAC)
Роман
Есть такая опция hostNetwork: true. Как-то можно указать сетевой интерфейс, через который будет ходить трафик?
Anton
он же сделает по сути тоже самое что и docker run -net host. тоесть процесс будет на хостовой сетевой порты открывать
Anton
я думаю на этом уровне докеру пофиг уже
Anton
в приложении может это можно сделать или в entrypoint, но хз как вы будете обрабатывать ситуацию когда под переедет на другой хост, где нужных сетевух не будет.
Роман
в приложении может это можно сделать или в entrypoint, но хз как вы будете обрабатывать ситуацию когда под переедет на другой хост, где нужных сетевух не будет.
По условию задачи на сервере в любом случае присутствует вторая сетевая карта. На самом деле это только мизерная часть проблемы. По сути, я пытаюсь решить другую. В последнем релизе kubespray, они, вместо запуска calico, как докер-контейнера вне кластера, сделали Daemonset. Раньше я назначал каждому контейнеру IP и они через него ходили. А теперь в демонсете нет возможности указать разные айпи. Он пытается переменную окружения применить ко всем подам. Ну и они все (кроме одного - первого) падают с ошибкой, что такой ip уже назначен. Ума не приложу, что делать.
Anton
я только на днях первый кластер с kubespray задеплоил и не знаю как раньше было. и вижу что вообще нифига не знаю как calico устроен и как ноды взаимодействуют между собой. поэтому я вообще не понимаю о котором ip речь идет
G72K
Есть такая опция hostNetwork: true. Как-то можно указать сетевой интерфейс, через который будет ходить трафик?
внутрь: зависи от того,на какой IP забиндите. наружу: гуглить iproute2 policy routing
G72K
это от прлиожения зависит, в общем и целом man 2 bind
Роман
Я хочу сеть пустить по внутренней сети через свитч. Оно сейчас у меня в проде так и работает.
Denis
Подскажите пожалуйста, кто хорошо разбирается с limits/requests (Resource Quotas) на пальцах, чем limits от requests отличается?
Роман
Ты хочешь сеть подов вывалить в vlan без оверлея?
Нет. Я хочу оверлей по vlan пустить.
Роман
Там даже не vlan, а физическая сеть между серверами.
Maksim
Подскажите пожалуйста, кто хорошо разбирается с limits/requests (Resource Quotas) на пальцах, чем limits от requests отличается?
Реквест - минимальные рескрсы, которые шелдулер ищет на ноде для запуска пода. Лимит это максимальные ресурсы доступные поду.
Denis
те если не будет места (по реквестам) на сервере, он выкинет ошибку? или он все таки по лимитам выкинет ошибку? не совсем ясен этот момент, несколько раз упирались в ошибку (insufficient cpu), но из доки не совсем ясно, это из-за лимитов или все таки реквестов 🙂
Artem
если ресурсов будет недостаточно на всех нодах, то под будет висеть в ожидании ресурсов
Artem
это может быть видно по kubectl describe
Anonymous
FYI https://groups.google.com/forum/#!topic/kubernetes-dev/QWIzhD3JhhE
Konstantin
В продолжение темы про requests и limits получается, что requests это чисто логическая вещь и не на что не влияет?
Алексей
В продолжение темы про requests и limits получается, что requests это чисто логическая вещь и не на что не влияет?
Простой пример. Есть одна нода с одним процессором. Все поды запущены на ней. соответственно, вы не сможете запустить больше чем у вас есть CPU. Конечно можно выделять по 1% и запустить 100 подов, но нужно учесть, что есть ещё запущеные поды системные. У меня в google cloud выходило на базовой конфигурации с 1 процессором ~60% CPU занято под системные поды. посмотреть текущее распределение на ноде можно kubectl describe node-1 В конце есть очень наглядное представление о том сколько какой под запросил и какой лимит. И общее состояние по ноде.
Konstantin
Спасибо за комментарий. Где посмотреть и как установить это все понятно. Переформулирую вопрос, зачем указывать requests?
Logan
Спасибо за комментарий. Где посмотреть и как установить это все понятно. Переформулирую вопрос, зачем указывать requests?
на тот случай, если вы хотите гарантировать минимум ресурсов для своего контейнера (контейнер критичный). Если минимум не гарантировать - kubelet будет контейнеры в ноду трамбовать, пока обратно не полезет
Logan
лимитами - нет. а вот ресурсами - не влезет
Logan
лимиты на 10 ЦПУ означают, что более 10 ЦПУ контейнеры гарантированно не получат
Konstantin
Т.е. получается лимит ограничивает только под, а реквест ограничает под внутри ноды?
Logan
нет
Logan
лимит ограничивает под сверху
Logan
а реквест гарантирует ресурсы снизу
Konstantin
Да, но при этом при лимит может быть оверселинг, а при реквесте нет. И когда добавляется под на ноду, реквест ресурсов по каким параметрам проиходит, по реквестам? лимитам?
Artem
а еще это необходимо, чтобы настроить горизонтальное масшабирование)
Logan
https://coreos.com/blog/kubernetes-1.8-announcement по-моему - восхитительно
Anonymous
Да, но при этом при лимит может быть оверселинг, а при реквесте нет. И когда добавляется под на ноду, реквест ресурсов по каким параметрам проиходит, по реквестам? лимитам?
реквесты учитываются только при шедулинге: то есть в момент выбора на какую ноду запихать под - больше они никак не влияют на поды лимиты, наоборот, никак не влияют на то на какую ноду положить под, но учитываются в том случае когда на ноде заканчивается память и кубер выбирает кого казнить чтоб освободить место (ну плюс основная своя задача - лимитирование внутри контейнера)
Anonymous
по памяти лучше всего делать request=limit чтобы не возникало ситуаций "кубер думает что места полно и шедулит под на эту ноду, а по факту там oom-killer лютует уже вовсю" по процессору в принципе некритично, максимум что будет это сервисы будут тормозить что можно обнаружить кучей инструментов если сделать requests=limits (для cpu и mem) то под получает более приоритетный статус и в случае переполнения памяти его казнят последним по сравнению с другими плебеями, но в 1.8 это делать необязательно так как там добавили отдельную рукоятку для выставления приоритетов
Anonymous
еще упомяну что, естественно, лимиты ставятся на контейнер и суммируются для всего пода, и на этом закончу краткое изложение официальной доки кубернетеса 🙂
Anonymous
а, еще из того что в доке нет: все контейнеры написаны на разных языках и разными людьми, и очень мало из них умеют ограничивать себя выделеной памятью (из-за докеровской архитектуры стандартными средствами в контейнере видна общая память а не та которая выделена докеру) так что, кроме выставления лимитов, надо обязательно искать пимпочку для сервиса которая ограничивает жор памяти например, для монгодб есдинственный вариант - подкрутить кеш wiredtiger в конфиге, для приложений написаных на java обязательно задание мемори хипа через флаги и тп а раббитэмкью например корректно сам определеяет и ему норм в общем, если этого не сделать то рано или поздно приложуха превысит mem limits и сам же докер ее пристрелит
𝚔𝚟𝚊𝚙𝚜
https://habrahabr.ru/company/flant/blog/339120/