go
文章平均质量分 65
liuliuzi_hz
这个作者很懒,什么都没留下…
展开
-
Swarm 源码解析
Swarm介绍Swarm是Docker公司在2014年12月初发布的一套较为简单的工具,用来管理Docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机。Swarm使用标准的DockerAPI接口作为其前端访问入口,换言之,各种形式的DockerClient(dockerclient in go, docker_py, docker等)均可以直接与Swarm通信。Swarm几乎全原创 2016-02-05 16:35:49 · 2271 阅读 · 0 评论 -
golang event meassage driver framework
package mainimport ( "fmt" "strings" "runtime" "time")type ChangeMessage struct { MessageId string MessageType string Value int}type HandleFunc struct{ filterFunc func原创 2018-01-03 16:49:45 · 493 阅读 · 0 评论 -
(runc)容器是怎么创建的
大家都知道容器是通过namespace和cgroup技术来创建的,但是具体代码是如何控制namespace和cgroup的呢?下面就以runc源码为例子简单介绍下。runc的前身实际上是Docker的libcontainer项目演化而来。runC实际上就是libcontainer配上了一个轻型的客户端。从本质上来说,容器是提供一个与宿主机系统共享内核但与系统中的其它进程资源相隔原创 2017-11-27 21:24:03 · 1550 阅读 · 0 评论 -
kerbernets 中CPU 亲和性实现
kerbernets 中CPU亲和性是1.8中的alpha 特性.这个特性主要功能是可以控制启动容器在cpu核数控制和具体运行在哪个核上。这个特性主要修改的代码在pkg/kubelet/cm 中。首先在cmd/kubelet/app/server.go中启动容器管理器ContainerManager。kubeDeps.ContainerManager, err = cm.NewCont原创 2017-12-06 17:22:35 · 1006 阅读 · 0 评论 -
k8s 与 grpc
gRPC是一个高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众多开发语言。https://github.com/grpc/grpc-go/tree/master/examples/helloworld 里面是个简单的教程指导GO语言如何使用gRPC其中原创 2017-12-15 11:05:59 · 4603 阅读 · 2 评论 -
runC nsexec.c 解析
一直以为runc中也用clone 函数加参数形式实现进程命名空间隔离,但是细读runc中命名空间隔离的实现文件nsexec.c 发现并没有简单实用clone实现。 而因为selinux问题,内核版本等问题,所以并没有简单使用clone实现,而是配合其他namespace API实现Namespace API提供了三种系统调用接口: ● clone():创建新的进程 ● setns原创 2017-12-04 17:58:57 · 1168 阅读 · 0 评论 -
runC 中 network 实现
runC 的网络实现开始于 libcontainer/process_linux.go 中func (p *initProcess) start() 调用createNetworkInterfaces()函数该函数实现如下:func (p *initProcess) createNetworkInterfaces() error { for _, config := range p.co原创 2017-12-12 14:18:49 · 650 阅读 · 0 评论 -
docker live-restore
docker 1.12 开始支持live restore,就是关闭docker daemon ,而不关闭容器有两种方式开启:如果docker daemon正在运行并且你不想停止它,你可以添加配置到docker daemon的配置文件。例如:在linux系统上默认的配置文件是/etc/docker/daemon.json{"live-restore": true}你必须传递一原创 2017-11-14 16:23:24 · 14133 阅读 · 0 评论 -
k8s volume plugin FlexVolume 开发
Kubernetes的卷插件分两种,一种是要随同kubelet一起编译的插件,比如azure,cephfs这些,一种是独立的可执行程序插件(如果网络插件exec或者cni),这种插件只要满足kubelet的FlexVolume框架接口规则就可以被kublet调用。FlexVolume框架把kublet对他的调用转化为对可执行程序命令行的调用,FlexVolume框架接口规则要求插件是一个可执行原创 2017-07-11 10:46:58 · 4068 阅读 · 0 评论 -
使用docker 发布的go编译的程序无法执行的问题
今天在容器中执行go静态编译的程序无法执行,提示 可执行程序 not found。经过尝试发现将程序放在较大容器镜像中的可以执行,放在小容器镜像(比如busybox,scratch)中无法执行。 后来发现go 编译的程序如果涉及net package,还是会动态编译的。解决方案可以在go 编译命令后加 -tags netgo 。比如 go build -tags netgo 具体可见原创 2017-06-21 15:53:23 · 1762 阅读 · 0 评论 -
Docker Engine 插件模型和 k8s 插件模型区别
Docker Engine 插件是一个web服务,插件类型有 authorization, volume and network driver plugins 3种。 因为插件是web服务,所以插件要早于docker 服务之前启动,至少在调用该插件前启动。当docker daemon通过命令行要激活插件,比如 docker network create net1 -d ABC,dock原创 2017-02-23 15:46:14 · 781 阅读 · 0 评论 -
k8s网络插件cni
CNI(Container Network Interface)1容器网络接口,是Linux容器网络配置的一组标准和库,用户需要根据这些标准和库来开发自己的容器网络插件。在github里已经提供了一些常用的插件。CNI只专注解决容器网络连接和容器销毁时的资源释放,提供一套框架,所以CNI可以支持大量不同的网络模式,并且容易实现。相对于k8s exec直接执行可执行程序,cni 插件是对执行程序原创 2017-01-16 15:46:26 · 11594 阅读 · 0 评论 -
cni 添加网络 流程分析
From http://www.cnblogs.com/YaoDD/p/6024535.html?utm_source=itdadao&utm_medium=referral1234cnitool: Add or remove network interfaces from a network namespace转载 2017-01-16 15:25:30 · 2560 阅读 · 0 评论 -
gopkg.in 无法下载包
最近发现gopkg.in 一直无法下载包,用了代理也无法下载。只能通过先去gitlab下载,然后改名的方法实现。比如下载 gopkg.in/ldap.v2go get gopkg.in/ldap.v2package gopkg.in/ldap.v2: unrecognized import path "gopkg.in/ldap.v2"先打开gopkg.in/ldap.v2页面找到原创 2016-08-04 15:29:12 · 8964 阅读 · 0 评论 -
docker最初版本源码分析
docker经过3年发展,从代码量看,已经发展成为一个相对较大的项目。这里分析下docker 最初版本0.1.0时的代码,感受下一个高大上开源项目最初的样子,同时相对看后期版本代码,看最初版本代码更能明白一个项目的核心功能。docker v0.1.0 一共才一二十个go文件。程序入口在docker/docker.go文件的main函数。该版本的docker程序集成了客户端和服务端原创 2016-07-18 14:50:33 · 753 阅读 · 0 评论 -
Kubelet 源码走读(1)
源码版本 v1.3.0-alpha.5 1.3.0 版本相对1.2.4版本最明显的区别的是将各k8s 部件的二进制可执行文件合到一个文件hyperkube中。通过命令行参数,启动不同的k8s部件。这里按照代码执行顺序简单的走读kubelet源码。程序入口: cmd/kubelet/kubelet.go 文件中main() 函数实例化NewKubeletServer,命令行参数原创 2016-06-28 10:52:08 · 1338 阅读 · 0 评论 -
go build 通过文件名后缀实现不同平台的条件编译
go build 可以通过标签或者文件名的后缀来提供条件编译,这里说下通过文件名的后缀来提供条件编译文件命名约定可以在go build 包里找到详细的说明,简单来说,就是源文件包含后缀:_$GOOS.go,那么这个源文件只会在这个平台下编译,_$GOARCH.go也是如此。这两个后缀可以结合在一起使用,但是要注意顺序:_$GOOS_$GOARCH.go, 不能反过来用:_$GOARCH_...原创 2018-11-21 13:49:46 · 3087 阅读 · 0 评论