自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

柳清风的专栏

行者程序员

  • 博客(241)
  • 资源 (8)
  • 收藏
  • 关注

原创 kubelet启动pod的源码分析

如果看过之前的blog,大家都肯定都已经知道kubelet是负责真正启动容器的干活的,其实k8s的代码里面最复杂的其实是kubelet,而不是无脑的大脑apiserver,它基本是依靠etcd完成很多工作。 那么kubelet怎么去启动pod,何时去启动pod呢?我先从kubelet启动的地方说起。 先看上面这张图,这张图详细的介绍了kubelet启动pod的三个来源,分别是apiserve

2017-12-18 09:14:47 37338

原创 kubernetes Sandbox删除详解

上一篇blog讲解了一下gc的整个流程。后面介绍了删除sandbox。但sandbox怎么删除还是没有讲清楚,在此详细展开说一下。

2017-12-14 10:12:50 42342

原创 kubelet gc源码分析

kubelet是负载干活的组件,它会定期的清理多余死掉的容器和镜像,这篇blog基于kubernetes1.7.6的代码,关于gc的深入源码分析 好了,先看gc是随着kubelet启动而启动的pkg/kubelet/kubelet.go,func (kl *Kubelet) StartGarbageCollection() { loggedContainerGCFailure := fal

2017-12-14 09:33:44 36872 1

原创 s3存储分段上传命令行和SDK使用

s3是亚马逊退出的对象存储服务。我之前blog介绍过什么是对象存储,这里普通的对象操作在此略过,如果大家感兴趣可以看aws官网,说的很详细,在此我想介绍的是分段上传的使用方式,先看下面我画的图 文件从分片,到初始化上传,再到逐一上传分片,最后合并组装,完成分片上传的整个过程。 其实如果你直接使用命令行或者SDK,它默认就是支持分段上传的,你默认使用的aws s3 cp它就是一个分段上传。

2017-12-12 10:48:25 41101 1

原创 怎样通过pprof监控docker

debug模式启动docker$ /usr/bin/docker daemon -D -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock通过socat端口转发$ socat -d -d TCP-LISTEN:8080,fork,bind=192.168.1.137 UNIX:/var/run/docker.sock测试[root@reg ppr

2017-12-11 17:34:40 38744

原创 filebeat源码分析之采集

上面说到是启动,下面接着说日志采集回到启动的地方filebeat/prospector/prospector.go。func (p *Prospector) Run() { // 初始化 prospector 启动 p.prospectorer.Run() // 如果只运行一次就返回 if p.Once { return } for {

2017-12-09 18:10:44 39639

原创 Docker容器的生命周期管理

通过docker的API或者docker event命令,我们都可以获取到容器生命周期内发生了那些事情。首先把结论放出来,然后在看实现过程。 这个是实验的结论,那我怎么获取到这些状态和事件的呢?很简单,就是通过上面的api watch。 通过docker go client很容易实现func (w *watcher) watch() { filters := filters.NewA

2017-12-08 14:42:51 41937

原创 filebeat源码分析服务启动

在开始源码分析之前先说一下filebeat是什么?beats是知名的ELK日志分析套件的一部分。它的前身是logstash-forwarder,用于收集日志并转发给后端(logstash、elasticsearch、redis、kafka等等)。filebeat是beats项目中的一种beats,负责收集日志文件的新增内容。当前的代码分支是最新的6.x的代码。 先看我们服务启动配置文件的一个例子,

2017-12-08 14:23:18 38531

原创 kubernetes1.8 源码分析之资源调度

之前1.4的源码分析已经讲过调度的过程,现在载对一些细节补充一下。首先是k8s会加载哪些资源调度算法呢,其实它支持两种,一种是配置文件,一种是默认代码中指定的,下面看看plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go里面默认的调度算法,一个是筛选func defaultPredicates() sets.String {

2017-12-04 11:38:59 36746

原创 kubernetes 1.8 源码分析之kubelet资源上报

最近在给k8s 1.8添加磁盘调度的时候,又撸了一遍k8s的相关的源码,之前看过我源码分析的那个是k8s 1.4版本的,1.8版本还是有点变化的。 先看看kubelet上报机制,这个是kubelet的心跳机制,定时上报节点状态,默认是10s,时间可以设定 在kubelet创建的时候就已经创建了节点状态的收集方法 pkg/kubelet/kubelet.go里面NewMainKubelet方法k

2017-12-04 11:07:48 37994

原创 计算范式之并行计算

在说我的主题云计算之前,我还行拓展一个很老的知识点,就是并行计算,这个概念应该是四五十年的历史了,在计算机里面应该是算是old的了。 摩尔定律大家都知道,简单说每年翻一倍,但这个定律过去几年随着intel CEO的下跪,证实了这个规律的不可延续性,硬件的精度总是有限的,由于同样小的空间里集成越来越多的硅电路,产生的热量也越来越大,这种原本两年处理能力加倍的速度已经慢慢下滑。此外,还有更多更大的问题

2017-12-03 22:33:47 36914

原创 kubernetes Pull Image 鉴权过程

昨天遇到一个docker拉取镜像报错的问题,后来查询到是镜像的鉴权有问题,下面就和我跟着kubernetes 1.7.6 的代码看看整个过程。首先看拉取镜像的地方, pkg/kubelet/kuberuntime/kuberuntime_image.gofunc (m *kubeGenericRuntimeManager) PullImage(image kubecontainer.ImageS

2017-11-24 17:05:06 37973

原创 go基础知识整理(一)

go语言还是一个非常年轻的语言,相比于java那种工程级别的语言来说,很多地方还有待提升。下面谈一下go的基本知识continue、break个goto的使用 如果使用过C或者Java之类的语言,对这个应当非常了解。 下面先看一个列子:package mainimport "fmt"func main() { for i:= 0;i<10 ;i++ { if i==5{

2017-11-11 10:00:54 36500

原创 基于go websocket写一个聊天室

上一篇介绍了一下go websocket,这篇blog主要是通过websocket写一个聊天室。 先写前端</style></head><body><div id="log"></div><form id="form"> <input type="submit" value="Send" /> <input type="text" id="msg" size="64"/>

2017-11-04 16:22:43 38050

原创 golang websocket 入门

我们先写一个最简单的go http服务package mainimport ( "net/http")func main() { http.HandleFunc("/", func(w http.ResponseWriter,r *http.Request) { w.Write([]byte("hello world")) }) http.Liste

2017-11-04 15:35:26 39876

原创 web安全之xss(三)

xxs是cross site script,那么简写应该是CSS,对,就是CSS,但这个名字已经被格式语言CSS占用了,无奈只能叫XSS,个人觉得这个名字更神秘毕竟有X嘛! xxs攻击通常指,黑客通过html注入篡改了网页。从而在用户浏览网页时,控制用户浏览器的一种攻击。 xss根据效果可以分为反射型反射型,只是简单把用户输入的数据反射给浏览器,也就是黑客往往需要诱使用户点击一个恶意的链接,才能

2017-10-23 17:07:22 36301

原创 web安全之浏览器安全(二)

web上网通过浏览器,浏览器是最大入口,这个毋庸置疑。那么怎样做到这个客户端的安全呢?同源策略这个如果是个程序员一定不会陌生,这个是浏览器最核心的也是最基本的安全功能,可以说web就是构建在同源策略的基础之上,浏览器只是针对同源策略的一种实现。 试想如果没有同源策略,A网站的js脚步可以在B网站未曾加载的时候任意修改B网站的内容,这是多么令人担忧,浏览器提出了一个origin(源)的概念,来自不同

2017-10-23 16:15:14 37306

原创 web安全之基本概览(一)

网络安全的概念很多,我这里借鉴一下网上的思维导图。 这里是网络安全绪论的思维导图 互联网安全的核心问题是数据安全的问题,其次是解决信任问题,那些流量是安全的,那些是需要拒绝的。 威胁分析STRIDE,spoofing伪装,tampering篡改,repudiation抵赖,informationdisclousure信息泄露,denial of service拒绝服务,elevation

2017-10-23 15:45:04 36738

原创 计算机网络之基础知识(三)

数据链路层数据链路层规定了通过通信媒介互联的设备之间的传输规范,这里的通信媒介包括光纤、电缆、电波等,设备包括交换机、网桥、中继器等。众所周知计算机以0、1表示数据信息,物理层通过高低电压、光的闪灭、以及电波的强弱等处理信号。 数据链路层传输必须提到一个概念是mac地址,这个和下面要说的网络层的IP地址类似。mac地址用于标识数据链路中互联的节点,48个比特,一般烧录到网卡的ROM里面,一般情况是

2017-09-24 15:34:18 37435

原创 计算机网络之基础知识(二)

地址一个地址必须是一个明确的对象,就像你和被人交流,每个地址就像一个每个人有自己的一个ID号,如果ID号冲突了,那就不能正确的交流,这就是地址的唯一性。如果地址不多,有唯一地址就可以确定通信双方,当地址变的很多的时候,如何高效的从中找出目标地址是一个重要的问题,这就是地址的另一个特性,分层,这个分层就像是国家分层一样,省、市、县逐一向下,IP地址有主机号和网络号组成,通过子网掩码区分,网络号相同的I

2017-09-24 09:35:13 36326

原创 计算机网络之基础知识(一)

云计算的发展离不开网络的发展,没有发达的网络就不能提供计算的实时性。当今网络发展越来越快,新技术也是层出不穷,面对复杂的技术世界,我觉得还是要把一些基础的东西理清楚。网络发展历程如果是单机版就没有网络的必要,在计算机的世界里面最初是没有也没必要存在网络。为了解决更多人使用计算机出现了批处理系统,批处理就是顺序的一批一批的从磁带中读取任务并执行;后来就出现了分时系统,允许多个终端同时与计算机相连,允许

2017-09-23 14:56:18 36833

原创 谈谈我对Harbor认识

Harbor是什么第一次听到这个名字应该是2016年初的时候,那是在容器技术已经兴起的,各个容器管理平台正处于群雄逐鹿的时候,mesos、kubernetes、swarm等被国内外各个厂商用来作为容器的管理系统。这个时候突然冒出一个词harbor,港湾,同事是这样介绍的:几个VMware中国的人搞了一个容器镜像仓库。于是变成为harbor的第一批用户,后来也有幸成为contributor。说了半天,

2017-09-12 14:44:20 58188 6

原创 Docker 时区问题定位以及解决

之前在docker启动的服务中,运行的有java和golang的程序,通常会出现时区问题,下面先看个列子 代码很简单,打印出时间package mainimport ( "fmt" "time")func main() { fmt.Println(time.Now())}如果运行机器时间没有问题,当然可以正确输出,先看机器时间dateWed Aug 23 07:50:

2017-08-23 08:04:43 29860 1

原创 迪克斯托最短路径算法

迪克斯托最短路径算法的原理很简单,主要是通过多次紧缩,更新两点之间最短距离 只能是单源无环图 Python实现如下:nodes = ('A', 'B', 'C', 'D', 'E', 'F', 'G')distances = { 'B': {'A': 5, 'D': 1, 'G': 2}, 'A': {'B': 5, 'D': 3, 'E': 12, 'F' :5},

2017-08-18 11:41:04 1116

原创 golang https server(一)

最简单的https server制作证书openssl genrsa -out server.key 2048openssl req -new -x509 -key server.key -out server.crt -days 365编写程序package mainimport ( "fmt" "net/http")func handler(

2017-07-26 09:51:25 28532

原创 容器CNI完全解读calico实现(三)

上一篇介绍了bridge的实现,这里介绍一下calico的实现。和上一篇的结构一样的,先看add然后看del,具体添加网卡的代码如下:func cmdAdd(args *skel.CmdArgs) error { // Unmarshal the network config, and perform validation conf := NetConf{} if err :

2017-07-18 09:16:23 22736 2

原创 容器CNI完全解读bridge实现(二)

之前介绍CNI基本操作,现在介绍一个bridge的实现。 它也实现了创建和删除接口。 先看创建接口:func cmdAdd(args *skel.CmdArgs) error { n, cniVersion, err := loadNetConf(args.StdinData) if err != nil { return err } if n.Is

2017-07-17 14:46:35 19260

原创 容器CNI完全解读(一)

CNI(Container Network Interface)容器网络接口。CNI只专注解决容器网络连接和容器销毁时的资源释放,提供一套框架,所以CNI可以支持大量不同的网络模式,并且容易实现。 执行CNI需要传入一下变量# 添加或者删除网卡CNI_COMMAND=ADD/DEL# 容器的IDCNI_CONTAINERID=xxxxxxxxxxxxxxxxxxx# 容器网络空间主机映射路

2017-07-17 14:27:27 20934

原创 kubernetes 开发入门之获取pod信息

之前写了很多kubernetes源码阅读的文章,今天介绍一下kubernetes开发入门,kubernetes提供了一个client-go,它里面封装了kubernetes的相关操作,分为两种情况,在集群内核集群之外 先说一下集群内package mainimport ( "fmt" "time" metav1 "k8s.io/apimachinery/pkg/apis/me

2017-06-19 10:05:23 3632

原创 Elasticsearch入门

Elasticsearch 是一个实时的分布式搜索和分析引擎。它可以帮助你用前所未有的速度去处理大规模数据。Lucene 都毫无疑问是当今最先进、性能最高和功能最全的搜索引擎框架。但是 Lucene 只是一个框架,要充分使用它的功能,你需要使用 JAVA 作为开发语言,并且在你的程序中集成 Lucene。更糟的是,你需要深入了解相关知识才能明白它是如何运行的,Lucene 确实非常复杂。 Elas

2017-06-15 16:43:00 682

原创 密码学习之基本概念(一)

大家可能都以及有了一个基本的概念,那就是在互联网的时间你们没有什么是绝对保密的。任何密码都会有被破译的一天,只是时间长短问题。那么就针对密码学,我们从头到尾梳理一遍,第一篇我想介绍的是一些基本概念。先说一下为啥要加密吧,这个其实很容易理解,就是消息传输过程被窃取或者篡改,导致安全等问题。下面就是一个邮件被窃听的例子。 对称加密与非对称加密加密和解密的算法合在一起叫做密码算法,秘钥就是现实中的钥匙一

2017-06-11 11:45:48 568

原创 kubernetes容器启动详解

如果大家对kubernetes组件以及架构相关分析,可以看我之前的源码阅读,今天只从一个函数分析容器的启动过程,这个函数就是SyncPod,这个是创建kubelet里面最核心的一个函数了。这个方法分为五步:// 1. Compute sandbox and container changes.// 2. Kill pod sandbox if necessary.// 3. Kill an

2017-06-10 16:57:43 11544

原创 kubernetes 挂载ceph rbd源码解析

kubernetes对于第三方存储本身没有管理,只是使用存储,先看一下首先是存储插件的初始化,在这个方法里面,通过Init方法初始化func (pm *VolumePluginMgr) InitPlugins(plugins []VolumePlugin, host VolumeHost) error { pm.mutex.Lock() defer pm.mutex.Unlock()

2017-06-08 09:48:51 1756 3

原创 ceph命令入门

ceph命令入门

2017-06-07 10:42:08 2991

原创 reed solomon编码实践

如果大家对于raid原理有所了解的话,对于这个reed solomon(里德-所罗门码)编码就不陌生。下简单介绍原理 第一步先通过Vandermonde 矩阵编码,如下这样原始的ABCD-MNOP的数据就被编码了。此时选用的parity格式是2,那么允许丢失2行数据,如下 现在通过对Vandermonde矩阵的逆矩阵相乘得到原始的数据,如下: 这个就是演示了一个数据恢复的原理了。 说完原

2017-06-06 10:08:12 8907

原创 kubernetes的Service Account和secret

Service AccountService Account概念的引入是基于这样的使用场景:运行在pod里的进程需要调用Kubernetes API以及非Kubernetes API的其它服务。Service Account它并不是给kubernetes集群的用户使用的,而是给pod里面的进程使用的,它为pod提供必要的身份认证。kubectl get sa --all-namespacesNAME

2017-06-04 11:41:14 21856 3

原创 我也来谈微服务(二)

上一篇介绍了微服务基本概念,现在深入说一下。服务拆分微服务中的每个服务单元都是粒度很小、功能单一的,这个小自然是相对的,其设计思想是:与其搞一个大而全的的服务体,我们更倾向于小一些的单一服务。那怎么样的服务粒度是适合的呢?当我们在思考服务的边界问题时,需要平衡好内聚和耦合的关系,高内聚低耦合,相比大家已经相当了解了。一方面为了加强内聚可能将某些服务聚合到一起,另一方面为了解耦,需要对某些服务进更细粒

2017-06-03 16:38:09 425

原创 kube-proxy细节分析

其实kube-proxy的代码本身并不复杂,只是有个细节容易被大家忽略,大家可能都知道它有轮询的复杂均衡策略,是通过iptables实现的,那它是怎样控制平均转发的呢?iptables有个random的模块支持,那怎样控制权重呢? 看代码,一步一步分析 { tablesNeedServicesChain := []utiliptables.Table{utiliptables

2017-06-03 14:56:03 3545

原创 我也来谈微服务(一)

微服务这个理念已经不能算新了,最近这两年在互联网行业一直被广泛应用,之前说的微信就是基于微服务的架构设计的,那么是什么是微服务呢? 在说微服务之前,还是说一下一些相关的基本概念。微服务本质服务作为组件,每个组件可以独立部署,每个组件也可以有自己的编程语言;围绕业务组织团队,正如康威定律,一个组织的设计成果,其结构往往对应于这个组织中沟通和组织结构;基于产品构建,更倾向让团队去负责整个服务的生命周期

2017-05-21 10:54:07 647

原创 用golang编写一个并发工作队列

其实golang用一个函数可以构建一个并发队列,看我之前的blog但那个功能还不够强大,现在编写一个灵活可控的队列程序 先定义一个工作type Worker struct { ID int RepJobs chan int64 SM *SM quit chan bool}包含了workid和执行任务的id,上面的SM只是任务具体内容,这个

2017-05-20 17:42:45 10464 1

kustomize_v4.2.0_darwin_amd64.tar.gz

kustomize_v4.2.0_darwin_amd64.tar.gz

2021-08-26

helm-v3.6.3-linux-amd64.tar.gz

linux helm 二进制

2021-08-26

helm-v3.6.3-darwin-amd64.tar.gz

mac helm 二进制

2021-08-26

go1.16.7.linux-amd64.tar.gz

go1.16.7.linux-amd64.tar.gz

2021-08-17

linux网络实现分析

linux操作系统网络实现

2016-07-27

pygame msi安装包

基于win64位 python2.7的pygame包,可以用于python音乐游戏开发

2016-07-27

zookeeper安装包

zookeeper安装,在linux环境下部署安装zookeeper

2014-12-24

CSS编辑器 TopStylePortable.exe

最实用CSS开发工具不仅有各个浏览器支持说明而且还有很多提示。非常实用

2013-04-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除