Kubernetes原生领袖选举挎包

251 阅读1分钟

领导人选举

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