Реплика больше не опрашивает по HTTP соседний контейнер, а сама участвует в выборах через объект Lease (coordination.k8s.io) средствами client-go.
Sidecar leader-election:v0.5 читал ServiceAccount-токен один раз при старте и после ротации projected-токена получал 401, переставая продлевать блокировку. Лидера не оставалось ни у одной реплики, сервисы, работающие только на лидере, простаивали молча до ручного перезапуска пода. rest.InClusterConfig перечитывает файл с токеном по мере надобности, поэтому ротация обрабатывается прозрачно.
Дополнительно:
- вне Kubernetes реплика считает себя лидером (замена HTTP-подставки);
- некорректная конфигурация роняет сервис на старте, а не приводит к молчаливому простою;
- проблемы с выборами логируются раз в минуту, а не единожды за всё время жизни процесса;
- при остановке lease освобождается явно, следующая реплика становится лидером сразу;
- убран http.Get без таймаута, на котором опрос лидера мог зависнуть навсегда.
Публичный API не изменился: LeaderService, LeaderCheckServer, LeaderElectionServerStub и LeaderChooseServiceInterface на месте, поэтому код приложений править не требуется. CheckStatus и подставка помечены Deprecated.