2015-12-22 3 views
2

У меня есть приложение, работающее в пакете Kubernetes, который реплицируется с использованием контроллера репликации. Однако мне нужны некоторые критические задачи, которые должны выполняться одним приложением (по одной репликации) за раз. Раньше я использовал zookeeper, чтобы получить блокировку кластера для выполнения этой задачи. Есть ли способ в Kubernetes получить блокировку кластера для конкретного контроллера репликации?Kubernetes получает блокировки кластера по репликации

ответ

2

Kubernetes не имеет объекта блокировки кластера, но вы можете использовать annotation на контроллере репликации, чтобы указать держатель замка и TTL.

Например, каждый блок может читать ключ аннотации "lock", а если пустой (или если TTL истек), попробуйте написать "lock": "pod-xyz: 2015-12-22T18:39:12+00:00". Если попытки выполнить несколько попыток, кубернеты будут принимать один и отклонить остальные с 409, потому что версия ресурса будет неправильной. Затем держатель замка продолжит обновление аннотации, чтобы обновить TTL.

Если у вас есть служба, соответствующая этому контроллеру репликации, может возникнуть смысл помещать аннотацию блокировки в службу вместо RC. Тогда семантика блокировки сохранится при обновлении программного обеспечения (например, roll-update). Аннотация может идти на любой объект, поэтому есть определенная гибкость, чтобы выяснить, что лучше всего подходит для вас.

podmaster.go был хорошим примером логики, которую вы могли бы использовать для реализации этого. Он работает непосредственно против etcd, что вы также можете сделать, если не возражаете представить другой компонент.

+0

Каким образом приложение в блоке записи/чтения аннотации к службе? Это через REST API? – Dimuthu

+0

Да. Библиотеки клиентов должны иметь то, что вам нужно, если вы не хотите обрабатывать необработанные запросы. Это возможно и с помощью кувекта. Я не уверен. –

+0

Разве это не хорошая идея использовать встроенную поддержку блокировки кластера etcd и выставлять ее поверх API kubernetes? https://coreos.com/etcd/docs/0.4.7/etcd-api/#lock – Dimuthu

Смежные вопросы