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:...
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...
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...
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...
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...
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请求头...
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...
38 post articles, 6 pages.