Home

k8s基础知识和名词整理

名词 CNI: Container Network Interface(容器网络接口)。是用于集群联网的插件 Network Policies: 网络策略。可在OSI第3层、第4层进行网络流量控制 Ingress: 对集群中服务的外部访问进行管理的API对象,可以提供负载均衡、SSL 终结和基于名称的虚拟托管,依赖于ingress controller(例如AWS,GCE,Nginx,Istio等控制器) PDB: Pod Disruption Budget(干扰预算)。PDB会限制在同一时间因自愿干扰导致的多副本应用中发生宕机的Pod数量 PV: Persistent Volumes(持久存储卷)。拥有独立于pod的生命周期 Storage Classes:...

Read more

etcd使用技巧

背景 etcd在单独使用过程中,可能需要配合一些技巧食用 奇技淫巧 版本选择 如果自己涉及到etcd相关代码开发,最好是选择3.5版本以上。个人目前选择3.5.4。 为什么呢?原因是此前etcd的module做过迁移(从github.com/coreos/etcd迁移到go.etcd.io/etcd),导致了一系列的go module引用混乱的问题。。可以参考一下这个博客: https://colobu.com/2020/04/09/accidents-of-etcd-and-go-module/,里面对于这个问题还有相关的github issue描述地比较详细。 本地替换 如果自己出于某些原因,想本地替换etcd的package来做部分测试,那么你可能需要同时替换多个pack...

Read more

golang服务记录版本信息

背景 在多版本部署的情景下,我们可能需要一个快捷的方式来获取部署的服务的版本信息。这个信息可以用于快速定位问题,减少debug成本等等,还是比较重要的。 实现 记录版本号等信息 实现: 在代码中声明版本号等变量: package version var ( Version string Tag string // ... ) 在编译时添加-ldflags参数,将版本号等信息通过命令行编译进去,程序运行时即可获取到对应值: go build -ldflags "-X github.com/sasakiyori/xxxrepo/version.Version=1.0.0 -X github.com/sasakiyori/xxxrepo/ve...

Read more

golang对fork仓库的使用

背景 总会有一些golang package在实际场景下不满足需求,且改动点有可能是针对自身业务场景特定的,无法通过在github提issue或者pr的方式解决问题。 这个时候可能就需要fork对应的仓库,并进行独立维护。(当然要注意对应repo的license是否允许你去这样做) 维护 fork仓库 这边按已有的sasakiyori/pgx为例,fork自jackc/pgx。 可以设置脚本定时拉取最新代码,例如github可以设置action 开发 在fork的仓库中,按分支开发。 go的模块管理依赖于git tag,因此分支开发时,要先确定自己要基于什么版本开发,可从go.mod中查看。 例如,pgx基于v4.16.1版本进行额外开发: git fetc...

Read more

k8s部署日志收集组件loki

LOKI使用测试 环境准备 本地为mac,采用kind搭建k8s集群,配置文件为: # kind-cfg.yaml kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane extraPortMappings: - containerPort: 5601 hostPort: 5601 listenAddress: "0.0.0.0" protocol: tcp - role: worker - role: worker 启动集群: # 创建k8s集群 kind create cluster --name=localk8s --config=kind-cf...

Read more

Stress Testing Tool - Jmeter

简介 Jmeter, 由apache开源的一个非常成熟的压测工具 安装 在mac上,直接用homebrew安装即可: brew install jmeter 安装完成后,运行jmeter命令即可启动jmeter可视化操作界面。使用jmeter -t your_script.jmx可以指定脚本。 如果不想启动命令行,想直接执行脚本,并且输出结果,可以使用jmeter -n -t your_script.jmx -l result.jtl -e -o result 使用 Test Plan 一个新建的jmeter脚本文件,最外层为test plan,可以添加如下组件: Threads: 添加测试用的线程组 Config Element: 添加一些整体配置,如http请求头...

Read more

Golang Testing

单元测试覆盖率 测试覆盖率 go test -cover 结果类似于: PASS coverage: 90% of statements ok github.com/sasakiyori/test 1.025s 区分unit test和integration test的覆盖率 参考: https://mickey.dev/posts/go-build-tags-testing/ unit test文件添加build tag // +build !integration integration test文件添加build tag // +build integration 分别获取覆盖率: # unit test go test -cove...

Read more