Кубернетичек
https://github.com/nebius/helmrelease-trigger-operator У fluxcd есть небольшой недостаток один - если изменить конфигмапу/секрет которые указаны в valueFrom - то флакс не заедеплоит его. Тут нужно ручное вмешательство. Данный оператор закрывает данный гап…
https://github.com/fluxcd/flux2/issues/5446
С 2.7 версии, флакс теперь будет вотчить изменения вельюсов с секретов и конфигмапов
С 2.7 версии, флакс теперь будет вотчить изменения вельюсов с секретов и конфигмапов
GitHub
Watch ConfigMaps/Secrets referenced in Flux reconcilers · Issue #5446 · fluxcd/flux2
xref: fluxcd/helm-controller#1086 Both the Kustomization and HelmRelease APIs have fields for referencing ConfigMaps and Secrets containing values used for templating, i.e. that have a direct impac...
🎉4😁1
http://github.com/bchess/k8s-1m
Ну, почему бы и да
Ps: single instance с in-memory etcd без постинга лиз и ивентов, а целом, удивился, что не стал лизы и ивенты в отделный етцд выносить, ну да ладно.
Ну, почему бы и да
Ps: single instance с in-memory etcd без постинга лиз и ивентов, а целом, удивился, что не стал лизы и ивенты в отделный етцд выносить, ну да ладно.
GitHub
GitHub - bchess/k8s-1m: Run Kubernetes with a million nodes
Run Kubernetes with a million nodes. Contribute to bchess/k8s-1m development by creating an account on GitHub.
👍1
https://github.com/kubernetes-sigs/agent-sandbox
Ну что, если кто-то хотел оперделять runtime через CR, то и такое придумали. С большей изоляцией. Надеюсь следующий щас нечто подобное сделают и для CNI без multus :)
Ну что, если кто-то хотел оперделять runtime через CR, то и такое придумали. С большей изоляцией. Надеюсь следующий щас нечто подобное сделают и для CNI без multus :)
GitHub
GitHub - kubernetes-sigs/agent-sandbox: agent-sandbox enables easy management of isolated, stateful, singleton workloads, ideal…
agent-sandbox enables easy management of isolated, stateful, singleton workloads, ideal for use cases like AI agent runtimes. - kubernetes-sigs/agent-sandbox
После одного инцидента на проде в 2018 году на балансировщике, я запомнил одну вещь - tcp стек неймспейса наследуется от компилированого ядра, а не настроек ядра на хосте. И так я жил все эти годы и был доволен как слон. Но недавно красиво посрамлен сетевиками (а кем же еще?). Потому что оказывается, есть и исключения:
https://github.com/torvalds/linux/commit/356d1833b638bd465672aefeb71def3ab93fc17d
Как видите, коммит из 2017 года. Через год я смотрел код ядра и глаз не запал на это.Смотрел старую версию ядра! Так вот, tcp_wmem и tcp_rmen в network namespace наследуются от настроек ядра на хосте.
https://github.com/torvalds/linux/commit/356d1833b638bd465672aefeb71def3ab93fc17d
Как видите, коммит из 2017 года. Через год я смотрел код ядра и глаз не запал на это.
GitHub
tcp: Namespace-ify sysctl_tcp_rmem and sysctl_tcp_wmem · torvalds/linux@356d183
Note that when a new netns is created, it inherits its
sysctl_tcp_rmem and sysctl_tcp_wmem from initial netns.
This change is needed so that we can refine TCP rcvbuf autotuning,
to take RTT into c...
sysctl_tcp_rmem and sysctl_tcp_wmem from initial netns.
This change is needed so that we can refine TCP rcvbuf autotuning,
to take RTT into c...
🤯7👍5
Пятничный пост не в пятницу. О вечном споре fluxcd vs argocd.
Последние два года работаю с FluxCD. До этого долго деплоился с ArgoCD. В целом, мне Флюкс нравится — за счёт более простой логики, читаемого кода и бережного отношения к kube-apiserver. Но есть вещь, из-за которой порой не очень удобно. (Было две, но, мне кажется, одну они поправили, и, возможно — но это не точно — мой контроллер был триггером для этого.) Так вот, речь про поведение driftDetection.
У driftDetection в helm-controller есть несколько проблем:
1. Если driftDetection: warn и есть ресурс в dependsOn, то он задеплоит релиз, и он может уйти в статус NotReady, и dependsOn не пойдёт. Потому что статус HelmRelease будет NotReady. При этом сам ресурс успешно задеплоится.
2. Случиться это может, если в чарте Helm есть поле, которого нет в спеке ресурса. Но опять же, релиз даст задеплоить. Это происходит из-за плохо написанного чарта. С одной стороны, это хорошее поведение. С другой — не совсем ожидаемое.
3. Если ресурс был изменён через patch или kubectl edit, то будет запись об этом в managedField. И… helm-controller не будет детектить изменения, считая, что так и надо.
@lllamnyp предположил, что это логичное поведение для three-way merge.
Benefits of the three-way merge:
Smarter Upgrades: Helm 3 can intelligently merge changes from the new chart while preserving manual modifications made to the live state, preventing unintended overwrites.
Но у kustomize-controller совершенно другое поведение в этом месте: https://github.com/fluxcd/kustomize-controller/pull/527
То есть Флюкс как будто своего не придумывает, а мимикрирует под подкапотные инструменты. Но с другой стороны, если у тебя есть два контроллера с разным поведением detection — это прям неочевидное поведение, и тут, возможно, небольшой недостаток продукта.
4. Изменения, которые Флюкс детектит, выводятся только в debug-логах контроллера. Сам он только пишет: «Братан, у тебя n changes detected, разбирайся как знаешь». Инструментов для вывода информации для этого нет.
К слову, клишку оказалось написать несложно — нужно просто скопипастить эту часть кода с, внезапно… ArgoCD 🫠
Последние два года работаю с FluxCD. До этого долго деплоился с ArgoCD. В целом, мне Флюкс нравится — за счёт более простой логики, читаемого кода и бережного отношения к kube-apiserver. Но есть вещь, из-за которой порой не очень удобно. (Было две, но, мне кажется, одну они поправили, и, возможно — но это не точно — мой контроллер был триггером для этого.) Так вот, речь про поведение driftDetection.
У driftDetection в helm-controller есть несколько проблем:
1. Если driftDetection: warn и есть ресурс в dependsOn, то он задеплоит релиз, и он может уйти в статус NotReady, и dependsOn не пойдёт. Потому что статус HelmRelease будет NotReady. При этом сам ресурс успешно задеплоится.
2. Случиться это может, если в чарте Helm есть поле, которого нет в спеке ресурса. Но опять же, релиз даст задеплоить. Это происходит из-за плохо написанного чарта. С одной стороны, это хорошее поведение. С другой — не совсем ожидаемое.
3. Если ресурс был изменён через patch или kubectl edit, то будет запись об этом в managedField. И… helm-controller не будет детектить изменения, считая, что так и надо.
@lllamnyp предположил, что это логичное поведение для three-way merge.
Benefits of the three-way merge:
Smarter Upgrades: Helm 3 can intelligently merge changes from the new chart while preserving manual modifications made to the live state, preventing unintended overwrites.
Но у kustomize-controller совершенно другое поведение в этом месте: https://github.com/fluxcd/kustomize-controller/pull/527
То есть Флюкс как будто своего не придумывает, а мимикрирует под подкапотные инструменты. Но с другой стороны, если у тебя есть два контроллера с разным поведением detection — это прям неочевидное поведение, и тут, возможно, небольшой недостаток продукта.
4. Изменения, которые Флюкс детектит, выводятся только в debug-логах контроллера. Сам он только пишет: «Братан, у тебя n changes detected, разбирайся как знаешь». Инструментов для вывода информации для этого нет.
К слову, клишку оказалось написать несложно — нужно просто скопипастить эту часть кода с, внезапно… ArgoCD 🫠
GitHub
Revoke kubectl managed fields ownership by stefanprodan · Pull Request #527 · fluxcd/kustomize-controller
This PR enforces Flux ownership of Kubernetes objects' fields that were applied on the cluster outside of the declared desired state. In addition, metadata annotations and labels removed fr...
❤14
Кубернетичек
Пятничный пост не в пятницу. О вечном споре fluxcd vs argocd. Последние два года работаю с FluxCD. До этого долго деплоился с ArgoCD. В целом, мне Флюкс нравится — за счёт более простой логики, читаемого кода и бережного отношения к kube-apiserver. Но есть…
https://github.com/fluxcd/helm-controller/pull/1365
Продолжение истории)
Пызы: Стефан, похоже одобряет
Продолжение истории)
Пызы: Стефан, похоже одобряет
GitHub
Add --override-manager flag for server-side apply drift detection by yozel · Pull Request #1365 · fluxcd/helm-controller
This flag allows specifying field managers whose ownership should be transferred to the helm-controller before performing drift detection. When a disallowed field manager is detected on a managed r...
🔥1
https://victoriametrics.com/blog/kubernetes-cpu-go-gomaxprocs/
Попалась замечательная статья. Много по полочкам разложено. Особенно упомянули формулу расчёта cpu weight для cgroupv2, которую хотят дополнительно разжевать https://github.com/kubernetes/website/pull/52793/files.
Но есть нюанс (не в претензию к статье, она отличная)
Это не совсем так. cpu manager обеспечивает изоляцию только между pod'ами kubernetes, а не между всеми процессами в ОС. Системные процессы могут и будут селиться на данные cpu.
https://kubernetes.io/docs/tasks/administer-cluster/cpu-management-policies/#static-policy
Вообще непонятно, зачем так сложно писать в доке. Я сам пропустил это, пока на практике не столкнулся, что "эксклюзивность" не эксклюзивная в рамках всей ноды. И даже не всех контейнеров, а только которые контролирует kubernetes. Лишь когда перечитывал доку с какого-то раза, обратил внимание на shared pool.
У Datadog это упомянули, кстати, тоже можно почитать, но на мой вкус она не так интересно читается https://www.datadoghq.com/blog/kubernetes-cpu-requests-limits/
Попалась замечательная статья. Много по полочкам разложено. Особенно упомянули формулу расчёта cpu weight для cgroupv2, которую хотят дополнительно разжевать https://github.com/kubernetes/website/pull/52793/files.
Но есть нюанс (не в претензию к статье, она отличная)
What's this static policy about?
With static, Kubernetes can give certain containers exclusive access to CPU cores ... Nothing else would be allowed to run on those cores. That's really useful for apps that don't play well with CPU sharing or need strong cache locality
Это не совсем так. cpu manager обеспечивает изоляцию только между pod'ами kubernetes, а не между всеми процессами в ОС. Системные процессы могут и будут селиться на данные cpu.
https://kubernetes.io/docs/tasks/administer-cluster/cpu-management-policies/#static-policy
This policy manages a shared pool of CPUs that initially contains all CPUs in the node.... This
shared pool is the set of CPUs on which any containers in BestEffort and Burstable pods run. Containers in Guaranteed pods with fractional CPU requests also run on CPUs in the shared pool.
Вообще непонятно, зачем так сложно писать в доке. Я сам пропустил это, пока на практике не столкнулся, что "эксклюзивность" не эксклюзивная в рамках всей ноды. И даже не всех контейнеров, а только которые контролирует kubernetes. Лишь когда перечитывал доку с какого-то раза, обратил внимание на shared pool.
У Datadog это упомянули, кстати, тоже можно почитать, но на мой вкус она не так интересно читается https://www.datadoghq.com/blog/kubernetes-cpu-requests-limits/
VictoriaMetrics
Container CPU Requests & Limits Explained with GOMAXPROCS Tuning
When running Go apps in Kubernetes, default CPU thread scheduling can conflict with cgroup CPU limits. The runtime sees all host CPUs, but the container may only be allowed a fraction of one. This often leads to early throttling. Properly configuring GOMAXPROCS…
👍16
Кубернетичек
https://github.com/kubernetes/community/pull/7917 это конечно немного некрасиво со стороны SIG ETCD. Парни начали писать ETCD-operator, подали заявку в SIG - а затем такое https://github.com/kubernetes/community/pull/7917#issuecomment-2137708418
https://github.com/etcd-io/etcd-operator
https://github.com/aenix-io/etcd-operator
Вот уже больше года прошло с той, на мой вкус, некрасивой ситуации. Можно сравнить, что получилось. У одного продукта, контрибьютит один человек и минорно. У второго, по-сути двое и то же минорно. Да и в целом развивается ни шатко ни валко. После стартового запала, люди ожидаемо поотпадали и у официального варианта. Может я проспустил что-то, но mailing list практически пуст.
Наверное это логично, потому что etcd особо никому и не нужен. Ну, кроме куба :)
https://github.com/aenix-io/etcd-operator
Вот уже больше года прошло с той, на мой вкус, некрасивой ситуации. Можно сравнить, что получилось. У одного продукта, контрибьютит один человек и минорно. У второго, по-сути двое и то же минорно. Да и в целом развивается ни шатко ни валко. После стартового запала, люди ожидаемо поотпадали и у официального варианта. Может я проспустил что-то, но mailing list практически пуст.
Наверное это логично, потому что etcd особо никому и не нужен. Ну, кроме куба :)
GitHub
GitHub - etcd-io/etcd-operator: The official Kubernetes operator for etcd.
The official Kubernetes operator for etcd. Contribute to etcd-io/etcd-operator development by creating an account on GitHub.
👍3
Кубернетичек
https://github.com/rk8s-dev/rk8s Это конечно, был вопрос времени :)
Я прикалывался над этим проектом. Не думал, что там может быть что-то серьезное с таким замахом. Оказалось, этот проект идет под крылом китайского аналога Google Summer of Code, только называется он - RISC-V Rust for Cloud Native. Под этим же крылом выпустили https://github.com/rustfs/rustfs, например.
Можно было бы подумать, что они это делают, потому что официально разработчики куба не поддерживают RISC-V архитектуру. Но вон, scaleway - вполне собрали бинари и говорят можно пробоваить https://www.scaleway.com/en/docs/elastic-metal/how-to/kubernetes-on-riscv/ (не знаю, насколько это распрастраненное решение).
Пызы: вообще, я периодически поглядываю, что там происходит с проектом. Слишком уж он амбициозный. И пока пишут. Так вот, спонсор данного поста, вот этот парень на скрине. А точнее его коммит https://github.com/rk8s-dev/rk8s/commit/a58c9bfa6e926aec598c6642354d4f0b2ed58d71
Пызызы: в комментариях заметили, большая часть кода - вендоринг
Можно было бы подумать, что они это делают, потому что официально разработчики куба не поддерживают RISC-V архитектуру. Но вон, scaleway - вполне собрали бинари и говорят можно пробоваить https://www.scaleway.com/en/docs/elastic-metal/how-to/kubernetes-on-riscv/ (не знаю, насколько это распрастраненное решение).
Пызы: вообще, я периодически поглядываю, что там происходит с проектом. Слишком уж он амбициозный. И пока пишут. Так вот, спонсор данного поста, вот этот парень на скрине. А точнее его коммит https://github.com/rk8s-dev/rk8s/commit/a58c9bfa6e926aec598c6642354d4f0b2ed58d71
Пызызы: в комментариях заметили, большая часть кода - вендоринг
🔥8😁3❤1👍1
Люблю openkruise. Он меня уже столько раз выручал. Вот и сейчас, есть задача, чтобы не менялась топология у подов без надобности, нужно чтобы они шедулились на туже ноду, где были (по возможности). И пока я думал, делать это через mutation webhook или писать свой шедуллер, решил глянуть, а не реализрвали ли это уже разработчики алибаба клауд (да, я ленивый человек, если можно не просить ллм писать самому, то этого не делаю).
И да, за меня все это уже придумали и реализовали https://openkruise.io/docs/next/user-manuals/persistentpodstate. Просто бери, и ставь аннотацию в advanced statefulset.
И да, за меня все это уже придумали и реализовали https://openkruise.io/docs/next/user-manuals/persistentpodstate. Просто бери, и ставь аннотацию в advanced statefulset.
openkruise.io
PersistentPodState | OpenKruise
FEATURE STATE: Kruise v1.2.0
🔥12❤1
https://github.com/kubernetes-sigs/multicluster-runtime
Клевый проект. Я немного его тестирую. Пока не принято решение, что лучше для нашего проекта: один контроллер пер кластер, и один большой оркестратор на все. Или волбще - гибрид. Проект уже довольно в рабочем состоянии. Но, если брать его сейчас, то нужно быть готовым в след релизе что-то переписывать :)
У openkruise было похожее решение, но в него перестали контрибьють уже несколько лет назад.
Клевый проект. Я немного его тестирую. Пока не принято решение, что лучше для нашего проекта: один контроллер пер кластер, и один большой оркестратор на все. Или волбще - гибрид. Проект уже довольно в рабочем состоянии. Но, если брать его сейчас, то нужно быть готовым в след релизе что-то переписывать :)
У openkruise было похожее решение, но в него перестали контрибьють уже несколько лет назад.
GitHub
GitHub - kubernetes-sigs/multicluster-runtime: Library for multi-cluster controllers with controller-runtime
Library for multi-cluster controllers with controller-runtime - kubernetes-sigs/multicluster-runtime
👍1