[ k8s-operator 系列 ] 自动生成 webhook 证书并在过期时自动刷新

2021-04-20
阅读 5 分钟
5.8k
下面要介绍的是另一种方式:github.com/open-policy-agent/cert-controller,最初是在 open-policy-agent/gatekeeper 中看到这种用法,感觉非常 Geek。

[ k8s-operator 系列 ] 基于 k8s 实现 Leader 选举

2021-04-18
阅读 5 分钟
6k
Leader election 实现方式:投票和广播:Raft、Paxos 算法。分布式锁:强制锁、建议锁。本文的侧重点是基于 k8s 实现 leader 选举在 operator 中的应用,所主要介绍基于分布式锁实现 Leader 选举。分布式锁的实现依赖分布式一致性数据中心, k8s 的数据一致性依赖于底层的 etcd,etcd 使用的是 Raft 算法,Raft 的 Leade...

一个小技巧加快 golang docker 镜像构建速度,避免频繁下载 go mod

2021-03-28
阅读 1 分钟
9.9k
Dockerfile先 COPY go.mod 执行 go mod download,再 COPY 源码执行 build。利用 docker image 分层构建的特性,每行命令为一层。如果底层不变,则可使用 cache,无需重复构建。源码比 go.mod 修改更频繁。 {代码...} .dockerignore只 COPY go build 需要的文件。 {代码...} 特殊情况go.mod 或 go.sum 变动后需要重新 bu...

Golang 高效的原地数组去重

2021-03-21
阅读 1 分钟
18.8k
使用 struct{} 节省空间, 指定 cap=len(arr) 避免 map 扩容。记录非重复元素索引 j,将元素前移,原地去重,只需一次遍历。

k8s 服务发现 以及 gRPC 长连接负载均衡

2021-03-08
阅读 2 分钟
11.5k
gRPC client 直接使用 ClusterIP Service 会导致负载不均衡。因为 HTTP/2 多个请求在一个 TCP 连接上多路复用。

K8S 面试题:service 到底能不能 ping 通

2021-03-06
阅读 1 分钟
9.8k
面试中被问了这道题,其实是在考察你对 k8s service 的使用和底层原理的理解,答案显然没有那么简单。实验环境搭建使用 kind (k8s.io) 可以很方便的在本地搭建实验环境,修改配置即可创建 kubeProxyMode 为 iptables 或 ipvs。实验涉及的 config 和 yaml 可以在我的 github repo 找到: win5do/k8s-svc-test (github.com...

利用 go/ast 语法树做代码生成

2021-02-16
阅读 5 分钟
12.2k
go.uber.org/zap 日志包性能很好,但是用起来很不方便,虽然新版本添加了 global 方法,但仍然别扭:zap.S().Info()。

Go 里面 [...]string{"a", "b", "c"} 加三个点是什么骚写法?

2021-02-11
阅读 1 分钟
1.3k
Array literalsIn an array literal, the ... notation specifies a length equal to the number of elements in the literal. {代码...}

一个微服务 Demo 将我三年 Go Web 开发经验传授给你

2021-02-07
阅读 1 分钟
3.7k
本项目为 Golang 开发的一个微服务 server demo,展示了 grpc、gorm 等常用库的使用,以及 k8s、opentracing 等流行生态的适配,错误处理、Context、Chan 等编码技巧,测试驱动开发的尝试。是作者对自己 Go web 开发经验的记录和总结,配套文档可点击链接查看。

编写可测试的 Go 代码

2021-02-07
阅读 3 分钟
3.5k
integration test(集成测试):也叫组装测试或联合测试。 在单元测试的基础上,将所有模块按照设计要求组装成为子系统或系统,进行集成测试。集成测试通常会接入db,mq,后端接口等真实依赖。

DDD Lite:DDD 领域驱动设计微服务简化版

2021-02-06
阅读 2 分钟
8.6k
DDD 领域驱动设计的大名大家应该都有所耳闻,但是实际项目完整落地 DDD 的很少。因为 DDD 概念繁杂,领域、子域、核心子域、通用子域、实体、值对象、领域服务、应用服务、领域事件、上下文等一大堆概念,直接把人绕晕,对应到实际业务模型时,横看成岭侧成峰,开发人员内部都难以达成一致。

在 Go 项目中优雅的使用 gorm v2

2021-01-26
阅读 4 分钟
24.8k
调用方使用 GetDB 从 globalDB 获取 gorm.DB 进行 CURD。WithContext 实际是调用 db.Session(&Session{Context: ctx}),每次创建新 Session,各 db 操作之间互不影响:

基于 MySQL 分布式锁,防止多副本应用初始化数据重复

2021-01-25
阅读 4 分钟
2.5k
最简单的方法,初始化数据都带上主键,这样主键冲突就会报错。但是这么做我们需要对冲突的错误进行额外处理,因为插入我们一般会复用已写好的 DAO 层代码。

grpc-gateway:让你同时拥有 grpc 和 http 接口,一键生成 swagger 文档

2021-01-24
阅读 3 分钟
8k
编写 proto 文件 {代码...} 先决条件:protoc 已安装,参考:[链接] {代码...} grpc-gateway protoc 插件已安装 {代码...} 生成桩代码及 swagger 文档: {代码...} 生成文档先决条件:docker 已安装并运行有了 swagger.json 借助 swagger 相关的工具我们就可以生成文档了。这里我们使用 redoc,通过容器启动一个 server ...

Golang "github.com/pkg/errors" 包使用的正确姿势

2021-01-24
阅读 3 分钟
6.9k
大家应该都知道可以通过 github.com/pkg/errors 这个包来处理 err,WithStack(err) 函数可以打印 stack。

手把手教你本地 k8s 集群搭建云原生 Tekton CICD 流水线

2020-11-10
阅读 4 分钟
3.4k
这是一个演示 Tekton CICD 的 demo。下面我们将从搭建本地 k8s 集群开始,同步镜像至国内并部署 Tekton,一步一步实现一个 CICD 流水线。实现更新代码自动触发流水线,构建镜像推送到目标仓库,并更新 deployment 镜像滚动更新应用,最后钉钉机器人通知到群聊。

真·解决brew update卡主

2020-05-30
阅读 1 分钟
2.7k
换了阿里源brew update依然卡主 使用了阿里的homebrew源:[链接] {代码...} 使用brew update -v打印log,发现卡在: {代码...} 解决办法 阿里的镜像中没有homebrew-cask,使用中科大的源: [链接] {代码...} 现在使用brew update -v终于通畅了 如果你仍然卡在别的地方,并且找不到国内镜像,可以尝试设置命令行代理: {...

Go json unmarshal interface{} field bind to struct

2019-08-18
阅读 2 分钟
10.3k
写代码时碰到这么一个需求,某个字段根据不同条件对应不同子结构体,通过interface返给前端,同时前端上传时也要通过这个字段将数据传给后端。

golang内置包管理工具go mod简明教程

2019-05-28
阅读 2 分钟
27.9k
go modgo buildin package manager.go mod是go语言内置的包管理工具,集成在go tool中,安装好go就可以使用。要求: go version >= 1.11官方文档: [链接]环境变量 {代码...} go mod init初始化update:init现在已经做了优化go mod init <module-name>init报错outside gopath no import comments {代码...} go m...

初试k8s,通过rancher自顶向下的学习kubernetes

2019-05-27
阅读 4 分钟
8.8k
之前就玩过docker,但是一直不知道怎么把容器运用到生产上。构建一个docker镜像,把他run起来很简单;难的是容器的部署(CICD),容器的网络,数据持久化等。如果我们像之前一样,打包好镜像,通过ssh连接到目标服务器run起来,这和打包成二进制传上去似乎也没多大进步。

mac使用bootcamp安装双系统遇到的问题及解决方案

2019-05-21
阅读 1 分钟
6.9k
最近突然想怀旧玩玩毒奶粉(DNF),看了一圈台式机感觉可能买过来玩不了多久就得在哪接灰,毕竟996,想到了mac双系统的方案。之前就想试试双系统,然后下win10 iso镜像下着下着就忘了。现在镜像都是现成的直接开搞。

使用gvm管理多golang版本,但我想使用统一的GOTPAH

2019-05-11
阅读 1 分钟
8.7k
使用gvm管理golang版本遇到一个问题,就是我在.zshrc中设置了GOPATH,但是使用gvm切换后GOPATH又被gvm重新设置了,默认是$GVM_ROOT/pkgsets/go1.12.5/global。而我希望切换不同的GOROOT而GOPATH不变,因为我的项目代码都在原来的GOPATH中。

interface 作为 struct field,谈谈 Golang 结构体中的匿名接口

2019-04-14
阅读 3 分钟
11.7k
golang中通过组合(composite)实现类似继承(extends)和重写(override)的功能,大家可能平时用的比较多的是struct中匿名struct的写法,有没有见过struct中匿名接口(anonymous interface)的写法呢?

golang编译时通过ldflags给包内变量赋值,实现打印版本号及commit

2019-04-11
阅读 2 分钟
5.2k
很多命令行程序都可以通过version参数输出版本信息,commit,操作系统等信息。下面介绍一种方法实现golang编译的命令行程序打印版本号。

gitlab将merge request(pr)拉到本地做code review

2019-04-01
阅读 1 分钟
10.2k
一般情况我们在gitlab的web页面上review代码,但是仅凭肉眼review,劳力伤神,很难看出一些小错误。如果我们把代码拉到IDE中,一些小错误编辑器直接提示,编译错误build一下就知道,各种调用跳转随心所欲,再也不怕没把好pr的关了。

go run main.go undefined? golang main包那点事

2018-09-18
阅读 1 分钟
14.7k
最近把我的ss项目做了一下结构调整,一顿重构后,输入go run main.go,编译报错function undefined。额,怎么回事明明把函数定义在main.go上面的文件中啊。之前也遇到过这个问题不过没用深究,下面我们来说说go main包那点事。

golang包管理工具dep使用简明教程

2018-09-18
阅读 2 分钟
11.4k
为什么需要包管理 锁住依赖版本,防止第三方包升级导致代码不兼容,因为go get默认拉取最新版本 减少公共依赖、依赖耦合,将项目的依赖都放在项目vendor下,不依赖gopath下的公共包 方便在新环境快速进入开发状态 安装 dep需要golang版本在1.9以上 各系统安装方法见官方文档: [链接] 设置代理 因为墙的缘故,使用广泛的...

【golang基础】socks编程相关的知识点

2018-04-03
阅读 1 分钟
2.8k
socks五元组:src_ip源ip src_port源端口 dst_ip目标ip dst_port目标端口 protocol传输协议(tcp/udp),这五个中任意一个不同就属于不同的socks,不会冲突

【golang基础】go语言中的方法和interface的实现

2018-03-30
阅读 1 分钟
2.6k
答案是不能,提示Stduent does not implement People (Speak method has pointer receiver),修正方法是var peo People = &Stduent{},赋值为指针

【docker实操】使用docker部署一个laravel应用

2018-01-28
阅读 4 分钟
14.1k
最近部署上线一个项目,新的服务器,在生产环境安装配置nginx、php、mysql、git、composer等各种东西一大堆很麻烦。docker已经火了一段时间,已经成了后端和运维的必备技能,之前老大也说要尝试下,于是就来体验一下docker的魅力。本文是我学习并使用docker部署项目的一个记录。