$ go run resourcelock.go -h
...
-key string
lease lock name (default "example")
-kubeconfig string
(optional) absolute path to the kubeconfig file (default "/Users/xiexianbin/.kube/config")
...
-name string
identity name who holder the lock
-ns string
which namespace the lease lock create in (default "default")
...
run
# lock1
$ go run resourcelock.go -ns default -name lock1
.. leaderelection.go:250] attempting to acquire leader lease default/example...
.. leaderelection.go:260] successfully acquired lease default/example
.. resourcelock.go:89] lock1: get leading
^C.. Received termination, shutdown ...
.. resourcelock.go:92] lock1: lost leading
.. lock1: exit
# lock2
$ go run resourcelock.go -ns default -name lock2
.. leaderelection.go:250] attempting to acquire leader lease default/example...
.. resourcelock.go:99] new leader elected: lock1
.. leaderelection.go:260] successfully acquired lease default/example
.. resourcelock.go:89] lock2: get leading
leaderelection.go:332] error retrieving resource lock xx/xx: etcdserver: leader changed
leaderelection.go:285] failed to renew lease timed out waiting for the condition
可能原因
时间不同步
etcd 同步慢,扩大etcd的心跳检测时间
$ vim /etc/kubernetes/manifests/etcd.yaml
- --election-timeout=5000
- --heartbeat-interval=500