如何通过Kubernetes事件来报告错误 组内有维护一个Kubernetes Webhook,可以拦截pod的创建请求,并做一些修改(比如添加环境变量、添加init-container等)。 业务逻辑本身很简单,但是如果过程中产生错误,就很难处理。要不直接阻止pod创建,那么就有可能导致应用无法启动。要么忽略业务逻辑,那么就会导致静默失败,谁也不知道这儿出现了一个错误。 于是,朴素的想法就是接入告警系统,但这会导致当前组件和具体的告警系统 2021-12-05 Language > Go #云原生 #Go #Kubernetes
Go并不需要Java风格的GC 像Go、Julia和Rust这样的现代语言不需要像Java c#所使用的那样复杂的垃圾收集器。但这是为什么呢? 2021-11-30 Language > Go #Go #垃圾回收
基于内存通信的gRPC调用 Apache Dubbo 有injvm方式的通信,能够避免网络带来的延迟,同时也不占用本地端口,对测试、本地验证而言,是一种比较方便的RPC通信方式。 最近看到 containerd 的代码,发现它也有类似的需求。但使用ip端口通信,有可能会有端口冲突;使用unix socket,可能会有路径冲突。考察了下gRPC有没有和injvm类似的,基于内存的通信方式。后来发现pipe非常好用,所以记录了下 2021-11-19 #Golang #gRPC
如何通过抓包来查看Kubernetes API流量 当我们通过kubectl来查看、修改Kubernetes资源时,有没有想过后面的接口到底是怎样的?有没有办法探查这些交互数据呢? Kuberenetes客户端和服务端交互的接口,是基于http协议的。所以只需要能够捕捉并解析https流量,我们就能看到kubernetes的API流量。 但是由于kubenetes使用了客户端私钥来实现对客户端的认证,所以抓包配置要复杂一点。具体是如下的结构: 如 2021-11-18
Dockershim即将被删除,你准备好了吗? 重点:1.24版本的k8s将不会自带dockershim,即默认不支持docker作为容器运行时了。现在可以给Kubernetes反馈相关信息了:https://forms.gle/svCJmhvTv78jGdSx8。 Mirantis单独维护了dockershim组件,仍然可以使用:https://github.com/Mirantis/cri-dockerd 正文: 去年我们宣布Docker 2021-11-16
sockfwd 一个数据转发的小工具 最近在看containerd的代码,上手试的时候才发现它监听的是unix socket,没法从外部访问containerd。而我要验证的是从远端能不能访问containerd、管理containerd的容器,所以需要一个从远端访问unix socket的工具。 网上搜了一圈,没有现成的实现,就自己写了 sockfwd。 用法1234567Usage: sockfwd [flags]Flags: 2021-11-10 #Golang
containerd/nerdctl - 一个开源、免费的Docker的替代品 2021年8月31日,Docker公司更改了收费策略,简而言之就是对个人和小公司不收费,对大公司收费。 那么,是时候开始试一下 containerd + lima这个开源、免费的Docker替代品。 什么是containerd?containerd是一个标准化的容器运行时,可以被其他系统很方便的集成。正是由于这个原因,containerd也成为了Kubernetes的默认容器运行时。 但是在con 2021-09-20 #云原生
如何优雅关闭maven-default-http-blocker? 最近升级Maven到3.8.1后,mvn编译的时候总是提示拉不到依赖,报错如下: Could not validate integrity of download from http://0.0.0.0/... 全部报错如下: 12345678910111213141516[WARNING] Could not validate integrity of download from http:// 2021-04-22 Language > Java #Java
Golang小技巧-在单个仓库中支持多个 go mod 模块 背景最近在写Go,有一个项目是多模块的,版本的发布都是在一起的,为了其他项目使用这些模块,所以需要在一个仓库中实现多个模块的发布。 仓库结构仓库结构如下: 12345678.├── README.md├── a│ ├── a.go│ └── go.mod└── b ├── b.go └── go.mod 其中a/go.mod使用如下命令生成: 1go mod init git 2021-04-20 #Golang
Linux下的环境变量到底有什么限制? 前言最近在排查一个eureka问题,发现客户设置了环境变量eureka.client.serviceUrl.defaultZone。于是在本地尝试复现这个现场,发现我设置不了这个环境变量,提示: 12# export eureka.client.serviceUrl.defaultZone=http://localhost:8761/sh: export: eureka.client.servic 2021-04-01