Kubernetes leader election
Project description
k8s-leader-election-py
Client-go has a very easy to use leader-election package for kubernetes controllers to utilize leader-election. The python kubernetes-client doesn't have such a method, so this will have to do for now.
Requirements
Your controller must have a pod and namespace environment variable defined:
env:
- name: POD
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
Your controller must be able to list, get, update and create configmaps.
apiVersion: v1
kind: ServiceAccount
metadata:
name: sample-controller
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: sample-controller
rules:
- apiGroups:
- ""
resources:
- configmaps
verbs:
- '*'
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: sample-controller
roleRef:
apiGroup: ""
kind: Role
name: sample-controller
subjects:
- kind: ServiceAccount
name: sample-controller
apiGroup: ""
Example
Sample code:
from threading import Thread
from leaderelection import Elect
# Init leader election class. Configmap is the name of the configmap to create to store leader election information
leaderelection = Elect(configmap='sample-controller-leader-election')
# Run leader election in new thread
th = Thread(target=leaderelection.run)
th.setDaemon(True)
th.start()
#start main controller loop
while True:
# Check if pod is the leader. If so continue on with controller logic.
leader = leaderelection.check_leader()
if leader:
logger.info("I am the leader!!")
else:
logger.info("I am NOT the leader")
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
leaderelection-0.0.3.tar.gz
(3.3 kB
view details)
File details
Details for the file leaderelection-0.0.3.tar.gz
.
File metadata
- Download URL: leaderelection-0.0.3.tar.gz
- Upload date:
- Size: 3.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.14.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6781bbd1a03bcb06bb322d9a075ab3a690b758d71555c6680c31d75fe79e59b7 |
|
MD5 | d6e253ca4ce17e9f402ed690e395338c |
|
BLAKE2b-256 | 2af858d4a3b37dfb3ca01446098400499f7bb52713026b9630b8c5e7ce764380 |