- 博客(215)
- 资源 (7)
- 收藏
- 关注

原创 云原生时代的镜像分发工具——Dragonfly简介
欢迎关注微信公众号“云原生手记”文章目录背景dragonfly的原理dragonfly中的概念dragonfly运行原理dfdaemondfdaemon的拦截dfdaemon拦截后作甚dfgetdfget获取blob过程supernode注册接口总结背景今天要分享的是Dragonfly,这是阿里开源的一款用于镜像分发的工具,大家最早了解到这款工具,可能是因为调研大规模容器镜像分发的解决方案,最初这款工具确实是用于解决镜像分发问题的,当然,现在仍用于镜像分发,但是将来这块工具的定位将是企业级文件工具。
2021-01-25 09:06:07
6315

原创 Client-go之Informer机制本地存储Indexer
Client-go之Informer机制本地存储Indexer若想与作者沟通交流问题,请关注微信公众号“云原生手记”背景client-go Informer机制的主要逻辑是controller控制reflector从apiserver获取感兴趣的资源对象的数据,然后将数据放入DeltaFIFO队列中,controller将从队列中消费出对象增量数据,然后将增量存入本地存储,同时根据增量类型(Added,Update,Delete)进行事件通知。那么client-go中的本地存储是什么样的存在呢?我们
2020-09-18 08:27:24
1568
1

原创 client-go: Informer机制之reflector源码分析
client-go: Informer机制之reflector源码分析目的为了能充分了解Inform机制的原理,我们需要了解Inform机制的起点——reflector,那么,reflector是如何将数据从api-server拉下来?又是如何将数据存入本地的呢?解决这两个疑问就是本篇文章的重点。希望大家也能在此过程中能顺便了解k8s中list-watch机制缓存对象数据的原理。源码分析的大致流程首先,需要了解reflector结构体中的各个属性,然后是reflector是如何初始化,最后针对ref
2020-09-15 08:36:08
1512

原创 Tekton CD 之实战篇(三):从Github到k8s集群
Tekton CD 之实战篇(二):从Github到k8s集群CICD逻辑图CD概述我这边讲的CD是将用户的应用部署进k8s集群,现在大家都在使用k8s集群了,k8s管理应用比较方便,部署应用更是方便,直接kubectl apply -f 文件名就可以了。这边我要讲的CD两种方式:一种是通过kubectl命令实现的;一种是通过client-go实现的,原理是一样的,只是实现方式不同。当然,目前有的CD工具例如 Argo CD,也是很好的CD工具,已经很成熟了。我个人在项目中还没有使用 Ar
2020-08-03 20:09:17
3458
1

原创 Tekton CI 之实战篇(一):从Github到Harbor仓库
Tekton CI 之实战篇(一):从Github到Harbor仓库背景本文将介绍如何从github上的一个golang工程制作镜像并推送到企业级镜像仓库Harbor的示例。从github拉取代码,是为了方便大家自己动手操作,完成示例。前提条件k8s集群安装好tekton的pipeline组件(之前的文章中有介绍怎么安装,如有问题,评论区留言)有harbor仓库,(公众号内有harbor的部署教程)大致流程1、编写整个CI过程中需要用到的yaml文件,整个CI过程包括:拉取代码,编译,构
2020-06-22 07:41:00
2318
3

原创 Github认证调研
Github认证调研我使用了阿里云和百度云的镜像服务中的代码库绑定,绑定了github,所以在github的设置中的application中可以看到如下显示:百度云使用了OAuth App阿里云使用的权限阮一峰将的auth2.0。将的很好,接了我很多的疑惑,尤其是更新令牌那块,阮一峰的文章第三方登录原理所谓第三方登录,实质就是 OAuth 授权。用户想要登录 A 网站,A 网站让...
2020-02-15 20:47:01
729

原创 golang 内置函数append使用方式
内置函数append使用方式看一下内置函数append在buildin.go中的注释就知道了// The append built-in function appends elements to the end of a slice. If// it has sufficient capacity, the destination is resliced to accommodate the...
2020-02-01 20:20:47
6301

原创 切片面试题:学习切片长度、容量,切片增长的过程
个人博客地址:https://zhounanjun.gitbook.io/nanjun/关于切片的面试题:摘自https://goquiz.github.io/#subslice-growfunc Subslice() { s := []int{1, 2, 3,4,5,6,7,8,9} ss := s[3:6] fmt.Printf("len ss : %d\n", l...
2019-12-22 14:34:43
723

原创 Client-go中的watch接口的resultChan会自动关闭
Client-go中的watch接口的resultChan会自动关闭文章目录Client-go中的watch接口的resultChan会自动关闭问题描述resultChan会自动关闭的原因解决办法问题描述在client-go工程中,有时候需要用到watch接口,实际场景如下:namespacesWatch, err := clientSet.CoreV1().Namespaces().Wa...
2019-12-05 14:53:50
4208
11
原创 阿里云image-syncer源码分析
阿里云image-syncer源码分析欢迎关注“云原生手记”微信公众号背景大家在公司中都会使用到容器镜像私有仓库,一般都用harbor,也有会用registry搭建一个简陋的私库。然后,有一天,领导告诉你,公司建了一个统一的镜像仓库,需要做镜像迁移,或者公司业务要上公有云了,需要把公司原私有仓库中的镜像全部迁移到公有云镜像仓库(阿里云,腾讯云或者移动云)上去。那么,运维人员就会开始写脚本,逻辑大概是这样的:先从原仓库pull下镜像,然后重新tag,最后push到目标仓库。这种逻辑在一般原镜像仓库不大的
2020-11-23 13:38:58
923
4
原创 golang之context使用
背景(欢迎关注“云原生手记”微信公众号)golang中并发编程的三种实现方式:chan管道、waitGroup和Context。本篇将重点介绍context的使用,告诉大家基本的使用方式,做到会用。Context概念介绍context译为上下文,golang在1.6.2的时候还没有自己的context,在1.7的版本中就把golang.org/x/net/context包被加入到了官方的库中。golang 的 Context包,是专门用来处理多个goroutine之间与请求域的数据、取消信号、截
2020-10-04 23:19:18
2946
3
原创 Client-go Informer之 DeltaFIFO队列
Client-go Informer之 DeltaFIFO队列欢迎关注微信公众号“云原生手记”背景上一篇讲到reflector监控指定的k8s资源,当监控的资源发生变化时,将资源对象的变化存放到DeltaFIFO队列中。本篇的内容就是剖析DeltaFIFO队列,顺便再看下goland如何实现FIFO队列。队列client-go中有两个队列,一个是FIFO队列,另一个是DeltaFIFO队列。我们通过学习其中的FIFO队列来了解Golang语言中设计FIFO队列的基本技巧,而学习DeltaFIF
2020-09-17 21:38:48
827
原创 Client-go之Informer机制初探
Client-go之Informer机制初探启航本篇将开始我的源码剖析之路,先会讲client-go中的一些经典的机制和代码,然后讲一些我是用client-go中的一些小示例。最后开始读k8s scheduler源码。背景在k8s系统中,组件之间仅通过Http协议进行通信,没有中间件,其实蛮好奇k8s内部通信是如何保证消息实时性、可靠性和顺序性的,实现这些性能的关键在于Informer机制,Informer机制中的ListAndWatch、DeltaFIFO队列和Indexer等对于实现以上特性非
2020-09-14 11:29:18
1259
原创 linux主机间免密访问
linux主机间免密访问# 第一步:查看是否已经有公钥私钥了ls .ssh # 要是有id_rsa id_rsa.pub 等文件就是之前已经生成过密钥了,执行第三步步,否则执行第二步# 第二步: 生成 ssh key,如果你之前配置过 Git,那么已经生成过一个了ssh-keygen -t rsa -C "xxxx@qq.com"# 第三步拷贝 ssh key 至远程主机ssh-copy-id remote_user@remote_server下登录远程主机,直接ssh remote_
2020-09-08 14:17:11
296
原创 client-go源码解析(一):client-go客户端对象
client-go源码解析(一):client-go客户端对象client-go的重要性client-go是对K8s集群的二次开发工具,所以client-go是k8s开发者的必备工具之一。本篇目的本篇的目的旨在教会大家k8s集群的客户端有哪些种类,大家可能之前都使用过client-go去操作k8s中的资源对象,但是对于其中原理可能一知半解,client-go github那边只是给出了简单的几个例子,没有太多深入讲解。本讲就先跟大家介绍下,client-go到底有几种客户端对象去和集群交互,这些客
2020-08-10 19:58:10
2820
原创 云原生CI/CD:Tekton之trigger介绍
云原生CI/CD:Tekton之trigger组件简介上面背景图片用了一张手枪扳机的图片,啥意思呢?trigger对于pipeline的作用就像扳机对于手枪的作用的,读完文章再来体会这句话。前面我们学过tekton的pipeline组件,里面可以运行自定义工作流任务,而这些工作流任务例如task和pipeline都需要对象的触发对象例如taskrun和pipelineRun。触发的方式有两种:手动kubectl apply 文件触发和client-go触发。tekton为大家选择第三种方式,使用ap
2020-07-14 20:50:51
1679
原创 git如何合并中间几个commit点为一个commit点
git中合并中间几个commit点为一个使用场景描述之前讲述过,把git最后几个commit点合并成一个。有小伙伴提出如果不是最后的几个commit合并,而是中间连续的几个,是不是也可以用相同办法实现。答案是也用相同办法实现。准备环境git inittouch textecho 1 > textgit add .git commit -m "first commit"echo 2 > textgit add .git commit -m "second commit"ec
2020-07-10 11:26:16
4791
原创 云原生Tekton之触发器Trigger
背景前面的文章讲了tekton中pipeline的教程和使用案例,大家有没有想过,每次都要运行taskrun或者pipelineRun才能真正运行流水线。那怎么做到自动化执行taskrun和pipelineRun呢?我想了下有两种方式:使用client-go去创建taskRun和pipelineRun使用tekton的另一个组件trigger触发器。单纯运行taskrun和pipelineRun,或者实例化以下task和pipeline,那么选用trigger会比较好,因为不需要额外开发,只需.
2020-07-07 22:22:23
1506
2
原创 Tekton CI 之实战篇(二): DinD方式构建镜像
Tekton CI 之实战篇(二): DinD方式构建镜像背景简单介绍下什么是dind?使用场景是什么?DinD即 Docker inside Docker, DinD在容器里有一个完整的docker构建系统,可直接在容器中完成镜像的构建,与之相对应的就是DooD ,通过挂载宿主机的docker.sock文件,调用宿主机的docker daemon去构建镜像。他们的主要使用场景有很多,比较常见的就是CICD场景中了,CICD需要构建镜像。我之前的文章使用的就是DooD的方式,通过挂载宿主机的docke
2020-07-04 17:43:33
5219
原创 哈佛的6堂独立思考课 读后记录
读完这本书,对于独立思考有了一个明确的体系。对于之前领导和同事评审项目时所提的好问题,好建议,似乎都能在本书中看到缩阴。个人觉得对于以后发表意见的逻辑性和说服力有很大提升,尤其是面对反驳时的心态有一定提升。
2020-06-07 12:10:38
642
原创 云原生CI/CD:Tekton/pipeline之pipelineRun
云原生CI/CD:Tektoncd/pipeline之pipelineRun。pipelineRun主要用于运行pipeline。相当于是对pipeline的一次调用。
2020-05-16 19:18:07
2067
1
原创 云原生CI/CD:Tekton/pipelin之pipeline概念篇
云原生CICD神器tekton的神秘之处不止Task和taskRun,还有pipeline.功能更全。完成复杂的CICD操作不是问题。
2020-05-13 07:58:51
2548
原创 Azure容器镜像代理服务失效
Azure容器镜像代理服务失效解决方案前段时间 Azure 中国提供的容器镜像代理服务已经不开放了,只给 Azure 云使用。最近使用Azure的加速地址都显示404。像以下拉取镜像的方式,现在不能用了:docker pull dockerhub.azk8s.cn/library/<imagename>:<version> #例子docker pull dockerhub.azk8s.cn/library/centos建议使用阿里云的比较稳定,这边另外推荐一个容器镜像代
2020-05-11 09:38:29
614
原创 云原生CI/CD:tekton/pipeline之认证篇
云原生CI/CD:tekton/pipeline之认证篇既然说tekton/pipeline是CI/CD,必然需要用到拉取git仓库代码,仓库代码可能是私有的,看下tekton/pipeline在这边的支持。tekton/pipeline支持两种身份验证方式,将以k8s中secret的形式呈现:kubernetes.io/basic-authkubernetes.io/ssh-auth下面将简单价绍两种认证方式,以及相关例子的运行。SSH authentication (Git)我们在拉取
2020-05-09 09:18:34
9045
原创 云原生CICD:Tekton之Dashboard
Tekton Dashboard先给大家看下部署完之后的仪表盘页面:Tekton仪表板是Tekton Pipelines基于Web的通用UI。它允许用户管理和查看Tekton PipelineRun和TaskRun,以及在tekton中创建,执行和完成过程中涉及的资源。它还允许按标签过滤PipelineRun和TaskRun。本篇将简单介绍dashboard及其安装,当然也会将下该工具在开发...
2020-04-29 19:17:04
2597
2
原创 standard_init_linux.go:190: exec user process caused "no such file or directory"
今天打golang工程的镜像遇到一个问题,就是我在centos的主机上编译golang项目,然后使用Dockerfile构建镜像,用docker运行镜像时,日志一直报如下错误,且一直重启:standard_init_linux.go:190: exec user process caused "no such file or directory"Dockerfile如下:FROM alpi...
2020-04-27 18:41:12
2244
原创 利用NFS动态提供Kubernetes后端存储卷
本文将介绍使用nfs-client-provisioner这个应用,利用NFS Server给Kubernetes作为持久存储的后端,并且动态提供PV。
2020-04-27 17:26:02
393
原创 云原生CICD:tekton简单介绍及安装
今天开始,我将逐步上新tekton的使用教程,每篇只需5分钟的阅读时间。如有写的不好的地方,欢迎评论指正
2020-04-20 08:26:34
2761
8
原创 goconvey调研及学习
GoConvey是一款针对Golang的测试框架,可以管理和运行测试用例,同时提供了丰富的断言函数,并支持很多 Web 界面特性。
2020-03-20 16:44:53
1321
原创 gomonkey调研文档和学习
gomonkey是gomonkey 是 golang 的一款打桩框架,目标是让用户在单元测试中低成本的完成打桩,从而将精力聚焦于业务功能的开发
2020-03-20 16:41:37
16759
2
原创 k8s CRD(一)quick start
k8s CRD(一)quick start1.安装CRD所需环境1、去找一个k8s集群2、找一台master节点(可以用kuberctl命令的即可),安装golang,配置好Gopath2.开始安装访问kubebuilder指导手册os=$(go env GOOS)arch=$(go env GOARCH)curl -L https://go.kubebuilder.io/dl/2...
2020-03-11 10:07:40
5796
原创 Github认证调研
Github认证调研背景介绍:项目上需要做镜像服务中在线制作镜像功能,第一步就是绑定代码源,常见的公有云:阿里云、华为云、百度云、腾讯云都有,都能绑定github账号,也能获取github的公有和私有仓库。我调研的主要目标就是第三方应用如何获得Github的授权。我使用了阿里云和百度云的镜像服务中的代码库绑定,绑定了github,所以在github的设置中的application中可以看到如下...
2020-02-16 18:57:35
513
原创 Golang数组类型转换
最近写代码的时候会遇到类型转换,有时候对单独的变量强制转换没有问题,但要是对复杂的变量(例如数组)进行强制转换就会出现问题。问题1:可以将[]T1转换为[]T2吗?T1和T2底层类型是一样的。答案是不能,看一下例子:type T1 inttype T2 intvar t1 T1var x = T2(t1) // OKvar st1 []T1var sx = ([]T2)(st1) ...
2020-01-29 19:54:37
7431
原创 registry拉取dockerhub私有镜像
registry除了用作私有仓库,还可以用作镜像缓存,镜像缓存就算做镜像加速,可用于加速dockerhub镜像,也能拉取dockerhub私有镜像
2020-01-29 14:29:12
2793
原创 快速拉取dockerhub、google镜像仓库、coreos镜像仓库的方式
快速拉取dockerhub、google镜像仓库、coreos镜像仓库的方式,也就是使用镜像加速器。不需要配置docker daemon的regsitry-mirrors
2020-01-10 18:01:43
3842
《Spring Boot实战》源代码
2018-05-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人