领导人选举
Kubernetes原生的领导者选举pod,可以作为一个sidecar部署,将领导者选举作为一种服务添加到任何需要它的应用程序中,而且不受语言限制。
作为一个sidecar容器进行部署:
Add the following container to your deployment:
- name: leader-elector
image: quay.io/roikramer120/leader-elector:v0.0.1
command:
- leader-elector
args:
- --id=$(POD_NAME)
- --lease-name=$(LEASE_NAME)
- --namespace=$(NAMESPACE)
- --lease-duration=$(LEASE_DURATION)
- --lease-renew-duration=$(LEASE_RENEW_DURATION)
env:
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: LEASE_NAME
value: example
- name: LEASE_DURATION
value: 10s
- name: LEASE_RENEW_DURATION
value: 5s
securityContext:
allowPrivilegeEscalation: false
livenessProbe:
httpGet:
path: /healthz
port: 4040
initialDelaySeconds: 15
periodSeconds: 20
readinessProbe:
httpGet:
path: /readyz
port: 4040
initialDelaySeconds: 5
periodSeconds: 10
resources:
limits:
cpu: 200m
memory: 200Mi
requests:
cpu: 100m
memory: 100Mi
imagePullPolicy: IfNotPresent
你需要确保pod服务账户被绑定到一个至少有以下作用域的角色:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
labels:
app.kubernetes.io/name: leader-elector
name: leader-elector
rules:
- apiGroups:
- coordination.k8s.io
resources:
- leases
verbs:
- get
- list
- watch
- create
- update
- patch
- delete
- apiGroups:
- ""
resources:
- events
verbs:
- create
- patch