k8s leaderelection

2023-11-10

const (
	LEASELOCKNAME      = "tes"
	LEASELOCKNAMESPACE = "kube-system"
)

func main () {
      	LeaseLockID = uuid.New().String()
		client.InitClientSet()

		run := func(ctx context.Context) {
			// 添加运行逻辑代码
			klog.Info("Controller loop...")
			select{}
		}

		ctx, cancel := context.WithCancel(context.Background())
		defer cancel()

		ch := make(chan os.Signal, 1)
		signal.Notify(ch, os.Interrupt, syscall.SIGTERM)
		go func() {
			<-ch
			klog.Info("Received termination, signaling shutdown")
			cancel()
		}()

		// 指定锁的资源对象,这里使用了Lease资源,还支持configmap,endpoint,或者multilock(即多种配合使用)
		lock := &resourcelock.LeaseLock{
			LeaseMeta: metav1.ObjectMeta{
				Name:      conf.LEASELOCKNAME,
				Namespace: conf.LEASELOCKNAMESPACE,
			},
			Client: client.K8sClientSet.CoordinationV1(),
			LockConfig: resourcelock.ResourceLockConfig{
				Identity: LeaseLockID,
			},
		}

		leaderelection.RunOrDie(ctx, leaderelection.LeaderElectionConfig{
			Lock:            lock,
			ReleaseOnCancel: true,
			LeaseDuration:   30 * time.Second, //租约时间
			RenewDeadline:   15 * time.Second, //更新租约的
			RetryPeriod:     5 * time.Second,  //非leader节点重试时间
			Callbacks: leaderelection.LeaderCallbacks{
				OnStartedLeading: func(ctx context.Context) {
					//变为leader执行的业务代码
					run(ctx)
				},
				OnStoppedLeading: func() {
					// 进程退出
					klog.Infof("leader lost: %s", LeaseLockID)
					os.Exit(0)
				},
				OnNewLeader: func(identity string) {
					//当产生新的leader后执行的方法
					if identity == LeaseLockID {
						klog.Infof("i am leader now: %s", identity)
						return
					}
					klog.Infof("new leader elected: %s, wait...", identity)
				},
			},
		})

}

参考:跳转中...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

k8s leaderelection 的相关文章

  • go build 不断抱怨:go.mod 有 post-v0 模块路径

    Go 1 11 发布后 我一直在尝试将我的存储库移动到 Go 模块 方法是添加go mod文件在其根目录下 我的根库之一my host root其版本为17 0 1 所以我在其中写道go mod file module my host ro
  • 将 Websocket 消息发送到 Go 中的特定通道(使用 Gorilla)

    我对 Go 很陌生 并且发现自己使用套接字作为我的第一个项目 这是一个多余的问题 但我无法理解如何将 websocket 更新发送到 Go 中的特定通道 使用 Gorilla 我在用此链接中的代码示例 https github com go
  • Golang 从管道读取读取大量数据

    我正在尝试读取一个正在被焦油化 流式传输到标准输入的存档 但我正在以某种方式读取far管道中的数据多于 tar 发送的数据 我像这样运行我的命令 tar cf somefolder my go binary 源代码是这样的 package
  • 限制 FormFile 中的文件大小

    我让用户使用 FormFile 上传文件 我应该在什么时候检查文件大小是否太大 当我做 file header fileErr r FormFile file 文件对象已经创建 那么我是否已经产生了读取整个文件的成本 https golan
  • 在 Go 中,如何将函数的 stdout 捕获到字符串中?

    例如 在 Python 中 我可以执行以下操作 realout sys stdout sys stdout StringIO StringIO some function prints to stdout get captured in t
  • 数据库连接最佳实践

    我有一个使用 net http 的应用程序 我使用 http 注册了一些处理程序 这些处理程序需要从数据库中获取一些内容 然后才能继续编写响应并完成请求 我的问题是连接到该数据库的最佳实践是什么 我希望它能够以每分钟 1 个请求或每秒 10
  • 如何自定义解析错误的 HTTP 400 响应?

    我编写了一个 REST API 服务 要求所有响应均为 JSON 但是 当 Go HTTP 请求解析器遇到错误时 它会返回 400 作为纯文本响应 而不会调用我的处理程序 例子 gt curl i H Authorization Basic
  • go 中的属性更改通知

    如何在 go 中向多个接收器发出 属性 更改信号 类似于在 Qt 中使用通知信号定义属性的方式 例如 如果您想象有一些值需要以多种方式显示 例如进度值可以同时显示为进度条和文本 当基础值发生变化时 两者都需要更新 一种方法可能是利用chan
  • 如何在 Visual Studio Code 中为 Golang 启用竞争检测器?

    我搜索了很多网页来找到我应该放入哪个短语settings json在 VS Code Golang 扩展 由 Microsoft 发布 中添加构建标志 在我的例子中是竞赛检测器 I added go buildFlags race 在扩展名
  • 取消用户特定的 goroutine [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个应用程序 网络应用程序 允许用户使用 twitter oauth 登录并提供自动推文删除功能 用户登录到 Web 应用程序后
  • 是否支持动态变量?

    我想知道Go中是否可以动态创建变量 我在下面提供了一个伪代码来说明我的意思 我将新创建的变量存储在切片中 func method slice make type for i 0 i lt 10 i var variable i i slic
  • 如何将未知字段类型的数据解组为 JSON

    我有这些 结构 type Results struct Gender string json gender Name struct First string json first Last string json last json nam
  • 视频第一帧

    我正在创建一个单页应用程序 后端使用 Golang 前端使用 javascript 我想找到一种使用 Golang 获取视频第一帧的方法 首先 我将 mp4 视频文件上传到服务器 它保存在服务器上 有没有办法使用 Golang 获取该视频的
  • Golang 基础知识 struct 和 new() 关键字

    我正在学习 golang 当我阅读描述结构的章节时 我遇到了初始化结构的不同方法 p1 passport var p2 passport p3 passport Photo make byte 0 0 Name Scott Surname
  • 在 IntelliJ IDEA 中运行。多个文件和错误未定义:数据

    我想使用 IntelliJ IDE 社区版编写代码GO Go语言 我安装了正确的插件 并安装了构建应用程序所需的所有工具 我的应用程序包含以下两个文件 每个都在目录中 事件服务器 Main go Data go 如果我想使用 Run Ctl
  • Golang中如何删除字符串的最后一个字符?

    我想删除字符串的最后一个字符 但在此之前我想检查最后一个字符是否是 如何才能做到这一点 以下是删除尾随加号的几种方法 package main import fmt strings func TrimSuffix s suffix stri
  • 使用 OpenTelemetry 统一不同服务的范围

    我刚刚开始使用 OpenTelemetry 并为此创建了两个 微 服务 Standard and GeoMap 最终用户将请求发送到Standard服务 该服务又将请求发送到GeoMap在将结果返回给最终用户之前获取信息 我使用 gRPC
  • Go 的范围不能超过 (类型接口 {})

    我正处于尝试将我的注意力集中在 Go 上的婴儿阶段 目前 我正在模拟一个 API 请求 该请求返回包含对象数组的 JSON 格式的字符串 我试图找出迭代每个记录并访问每个字段的最合适的方法 最终 每个字段都将写入 Excel 电子表格 但现
  • 为什么 Go 中只有 int 而没有 float?

    在 Go 中 有这样的类型int这可能相当于int32 or int64取决于系统架构 我可以声明一个整数变量而不用担心它的大小 var x int 为什么没有这个类型float 这相当于float32 or float64取决于我的系统架
  • (转)如何使用toml文件?

    正如标题 我想知道如何使用 golang 中的 toml 文件 在此之前 我展示了我的 toml 示例 这样对吗 datatitle enable true userids 12345 67890 datatitle 12345 prop1

随机推荐

  • mysql-8.0.32 数据库的安装 (Linux)

    Linux 中 mysql 8 0 32 数据库的安装 缘 步骤 常见问题解决方案 问题一 mysql error while loading shared libraries libtinfo so 5 cannot open share
  • java spring jdbc配置

    整理了一下java spring框架的jdbc 首先说明一下这个jdbc是在myeclipse下配置的 适合初学者 第一步我们在myeclipse下建立一个web项目 然后右击 项目名称 鼠标移动到 myeclipse 下 然后再移动到右边
  • 自动化运维:Ansible脚本之playbook剧本

    目录 一 理论 1 playbooks 2 YAML 3 使用ansible批量安装apache服务 4 定义 引用变量 5 指定远程主机sudo切换用户 6 when条件判断 7 迭代 8 Templates 模块 9 tags 模块 1
  • Linux 通配符 与 正则表达式 的区别与详解

    阅读目录 1 扫盲 2 通配符详细介绍 3 实例 背景 在linux使用过程中 经常需要查找文件 对命令中的通配符 pattern 和正则表达式的区分不是很清楚 有必要好好研究一下 1 扫盲 1 1 通配符和正则表达式 当在使用命令行时 有
  • python另存为excel_python 将数据保存为excel的xls格式(实例讲解)

    python 将数据保存为excel的xls格式 实例讲解 python提供一个库 xlwt 可以将一些数据 写入excel表格中 十分的方便 贴使用事例如下 引入xlwt模块 提前pip下载好 import xlwt 使用workbook
  • MySQL数据库技术知识总结

    数据库基本概念 数据库 是以一定方式储存在一起 能予多个用户共享 具有尽可能小的冗余度 与应用程序彼此独立的数据集合 一个数据库由多个表空间 Tablespace 构成 数据库就是一个存储结构化数据的仓库 数据库管理系统 Database
  • 蓝桥杯2019年c++b组国赛题目及题解

    填空题目来源来自于 https blog csdn net l503301397 article details 90697079 大题来源于 ACwing https www acwing com problem search 2 csr
  • Altium designer 15 导入PCB各层都透明,修改各层透明度依然不好使

    Altium designer 15 0导入PCB后 整个图都变透明了 不能移动PCB上的器件 可以查看器件 修改各个层的透明度依然不好使 后来发现显示PCB维度框有问题 解决方法如下图 选择下拉列表里的任意参数就可以解决这个问题 这里选择
  • 用rfkill命令管理蓝牙和wifi

    rfkill是一个内核级别的管理工具 可以打开和关闭设备的蓝牙和wifi 列出所有可用设备rfkill list 输出如下 0 phy0 Wireless LAN Soft blocked no Hard blocked no2 hci0
  • Strapi 之API详述

    API的使用 REST API允许通过API端点访问 content types 当一个内容类型被创建时 Strapi会自动创建API端点 在查询API端点时 可以使用API参数来细化结果 可以理解为 对于每一个 content types
  • 工业协议网关IOTCS企业版正式发布

    一 发布前言 继今年5月份IOTCS开源版本发布以后 我们依然在致力于开源版的功能升级迭代 目前南向驱动类型支持OPCUA与Siemens S7协议 1200 1500型号 以及Modbus全协议 北向资源有HTTP MQTT 通过不同的连
  • 怎么设置访问服务器文件夹权限凭据,Windows server 共享文件夹权限设置

    概念 共享权限应用于通过网络连接到共享文件夹的用户 共享权限不会影响本地登录或使用远程桌面登录的用户 若要为本地登录用户或使用远程桌面登录的用户设置权限 请使用 安全 选项卡而不是 共享权限 选项卡 这样将在 NTFS 文件系统级别设置权限
  • 数组的三种定义方式

    1 数组的定义 用于存储同一类型数据的集合 其实数组就是一个容器 连续的存储单元 2 数组的好处 自动给数组中的元素从零开始编号 自动给下标 从零开始0 1 2 3 3 书写格式 元素类型 数组名 new 元素类型 元素 元素 元素 3 1
  • 新的一期AIGC训练营,9月16日开启#一起build anything

    时间 9月16号 周六 10 00 17 00地点 上海请自备电脑 window系统最佳 Mac也可以 现在早鸟报名 享受优惠价格 999 人 原价 1699 人 名额先到先得 早鸟报名还能获赠 699 AIGC知识库会员名额 新的一期训练
  • SRAM和SDRAM的区别

    DRAM 动态随机存取存储器 需要不断的刷新 才能保存数据 而且是行列地址复用的 许多都有页模式 SRAM 静态的随机存取存储器 加电情况下 不需要刷新 数据不会丢失 而且 一般不是行列地址复用的 SDRAM 同步的DRAM 即数据的读写需
  • C语言 弱定义

    说明 函数名称前面加上 WEAK属性修饰符称为 弱函数 类似C 的虚函数 链接时优先链接为非weak定义的函数 如果找不到则再链接带weak函数 意义 这种自动选择的机制 在代码移植和多模块配合工作的场景下应用较多 例如前期移植代码 需要调
  • 完全卸载docker

    停止docker服务 systemctl stop docker 列出所有docker相关组件 yum list installed grep docker 删除上一条命令列出来的所有组件 yum y remove xxxx 谨慎操作 删除
  • 因果推断(五)——反事实,后悔药?

    反事实推断一个词概括就是 后悔 例子 还是以小夏开店为例 小夏请了A明星代言后 销售量虽然有提升 但是由于该明星的代言费很贵 导致最终还是亏本了 于是 小夏想要是当时没有请明星代言 会不会就不亏本了 推断没有发生过的事情 就是反事实推断 当
  • shell编程基础(四)-shell特殊符号

    目录 符号总览 1 输出 输入重导向 1 井号 comments 1 帐户的 home 目录 1 分号 Command separator 1 连续分号 Terminator 1 点 dot 2 string 单引号 single quot
  • k8s leaderelection

    const LEASELOCKNAME tes LEASELOCKNAMESPACE kube system func main LeaseLockID uuid New String client InitClientSet run fu