自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 收藏
  • 关注

原创 在k8s 中对容器内veth 进行 tcpdump

在K8s调试网络问题时间经常需要tcpdump 容器内虚拟网卡,归纳一下主要是以下2种方法可以实现。1, 如果pod 内容器已经安装有bash。参照https://community.pivotal.io/s/article/How-to-get-tcpdump-for-containers-inside-Kubernetes-pods?language=en_US .1.1 kubectl get pod podname_xxx -o json 获取pod 所处host 和 contain...

2020-05-27 14:50:37 1296

原创 docker swarm mode 调度 自定义过滤器

因为任务需要,要求对jenksin 控制的swarm 集群创建容器时候,添加过滤要求,为保证容器性能,某种镜像的容器不能在同一台主机部署。而当前docker swarm mode 并不支持这种调度策略。如果是kerbernets,反亲和性(anti-affinity)特性可以解决这种问题。在容器配置文件种加 podAntiAffinity 就可以了。但是swarm mode 并不支持这种特性,...

2019-05-07 17:27:06 637

原创 nodejs 调用so文件时处理回调函数

nodejs 可以通过FFI 库调用so 文件里的函数,一般来说注意下nodejs参数类型和C语言参数类型转换就好了。但是对于回调函数,就稍微复杂一点。一种情况是so 里面的函数作为回调函数被nodejs 调用。这种方式在FFI 教程里面有提及。signature:ffi.Callback(returnType, [ arg1Type, arg2Type, ... ], functio...

2019-04-24 14:28:08 1820

原创 容器内外MTU 不一致

公司私有云升级,猜测因为网络连接方法从vlan 变为vxlan ,导致虚拟机 MTU 从1500 改为1450。而容器内网络MTU 未改,导致网络不通。永久修改方法可以在docker 启动参数里加MTU。临时修改方法直接修改容器网络MTU,如果容器内无命令行工具,可以将容器网络命名空间映射出来再修改.ln -s /var/run/docker/netns /var/run/netns...

2019-02-18 17:33:28 2619

原创 早期版本docker 全屏显示不全

早期版本的docker 在terminal 出现显示不全的问题可以通过在主机执行以下命令解决 ps -ef | grep 'docker exec -it' | grep -v grep | awk '{ print $2}' | xargs kill -SIGWINCH具体见https://github.com/moby/moby/issues/35407...

2019-01-24 13:17:59 1188

原创 go build 通过文件名后缀实现不同平台的条件编译

go build 可以通过标签或者文件名的后缀来提供条件编译,这里说下通过文件名的后缀来提供条件编译文件命名约定可以在go build 包里找到详细的说明,简单来说,就是源文件包含后缀:_$GOOS.go,那么这个源文件只会在这个平台下编译,_$GOARCH.go也是如此。这两个后缀可以结合在一起使用,但是要注意顺序:_$GOOS_$GOARCH.go,    不能反过来用:_$GOARCH_...

2018-11-21 13:49:46 3002

原创 vlan macvlan ipvlan

VLANVLAN 技术主要就是在二层数据包的包头加上tag 标签,表示当前数据包归属的vlan 号。VLAN的主要优点: (1)广播域被限制在一个VLAN内,节省了带宽,提高了网络处理能力。 (2)增强局域网的安全性:VLAN间不能直接通信,即一个VLAN内的用户不能和其它VLAN内的用户直接通信,而需要通过路由器或三层交换机等三层设备。 (3)灵活构建虚拟工作组:用VLAN可以划分不同的用户...

2018-07-23 14:39:52 7218

原创 Kuryr kubernetes nested by vlan

Kuryr kubernetes 除了支持bare-metal 部署,还支持nested 部署,也就是容器部署在VM内而不是在物理主机上。POD部署在VM内时就要考虑网络如何穿透VM。当前Kuryr支持vlan 和macvlan两种方法。vlan 方法主要依靠neutral 提供的vlan trunk port 功能,即VM接入的port是trunk 而不是常见的具体某个tag的vlan por...

2018-06-11 09:59:12 620

原创 Nodejs 在互动模式下 下划线变量名

今天在测试代码时候发现,在nodejs 互动模式下 ,如果下划线作为对象名,会有意外事情发生> function Testfun(par1) {... return par1;... }undefined> Testfun.prototype.fun2 = function(variables) {... return variables;... }[Function]> a=n...

2018-06-03 15:35:50 1320

转载 Linux网络 - 数据包的接收过程

转自https://segmentfault.com/a/1190000008836467本文将介绍在Linux系统中,数据包是如何一步一步从网卡传到进程手中的。如果英文没有问题,强烈建议阅读后面参考里的两篇文章,里面介绍的更详细。本文只讨论以太网的物理网卡,不涉及虚拟设备,并且以一个UDP包的接收过程作为示例.本示例里列出的函数调用关系来自于kernel 3.13.0,如果你的内核不是这个版本,...

2018-04-02 14:00:19 478

原创 Kuryr kubernetes 源码简介

Kuryr kubernetes 分为3类独立可执行程序,分别为Kuryr Controller,Kuryr CNI,Kuryr CNI daemon(可选,抽离CNI的watach 功能以减少多pod同时启动时候的资源浪费俄)。Kuryr Controller 独立运行,功能是 watch k8s API 和从neutron 申请资源port等,通过k8s API修改 pod 的annotate...

2018-02-14 10:53:45 935

翻译 Kuryr kubernetes 流程图

译自:https://docs.openstack.org/kuryr-kubernetes/latest/devref/kuryr_kubernetes_design.html#cni-daemonKuryr kubernetes集成利用了kubernetes CNI插件,并引入了Kuryr-K8s CNI驱动程序。基于设计决定,kuryr-kubernetes CNI Driver应该通过ku...

2018-02-13 16:01:40 2377

转载 OpenStack容器网络项目Kuryr(libnetwork)

转自 https://zhuanlan.zhihu.com/p/24554386容器近几年非常流行,有很多项目都考虑将容器与SDN结合。Kuryr就是其中一个项目。Kuryr项目在OpenStack big tent下,目的是将容器网络与OpenStack Neutron对接。Kuryr给人的第一印象是: 这又是一个在Neutron框架下的项目,能够通过Neutron统一的北向接口来控制容器网络的...

2018-02-12 16:30:04 845

翻译 kubelet为什么关闭swap

kubernetes的想法是将实例紧密包装到尽可能接近100%。 所有的部署应该与CPU /内存限制固定在一起。 所以如果调度程序发送一个pod到一台机器,它不应该使用交换。 设计者不想交换,因为它会减慢速度。所以关闭swap主要是为了性能考虑。当然为了一些节省资源的场景,比如运行容器数量较多,可添加kubelet参数 --fail-swap-on=false来解决。

2018-01-16 16:43:03 17707

原创 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 473

翻译 CRI Vs CRI-Containerd

From: http://collabnix.com/building-multi-node-kubernetes-cluster-using-linuxkit-cri-containerd/Let’s talk about CRI Vs CRI-Containerd…Container Runtime Interface(a.ka. CRI) is a standar

2017-12-15 14:03:18 2909

原创 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 4563 2

原创 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 626

原创 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 974

原创 runC nsexec.c 解析

一直以为runc中也用clone 函数加参数形式实现进程命名空间隔离,但是细读runc中命名空间隔离的实现文件nsexec.c 发现并没有简单实用clone实现。  而因为selinux问题,内核版本等问题,所以并没有简单使用clone实现,而是配合其他namespace API实现Namespace API提供了三种系统调用接口:  ● clone():创建新的进程  ● setns

2017-12-04 17:58:57 1099

原创 (runc)容器是怎么创建的

大家都知道容器是通过namespace和cgroup技术来创建的,但是具体代码是如何控制namespace和cgroup的呢?下面就以runc源码为例子简单介绍下。runc的前身实际上是Docker的libcontainer项目演化而来。runC实际上就是libcontainer配上了一个轻型的客户端。从本质上来说,容器是提供一个与宿主机系统共享内核但与系统中的其它进程资源相隔

2017-11-27 21:24:03 1497

原创 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 13974

原创 k8s volume plugin FlexVolume 开发

Kubernetes的卷插件分两种,一种是要随同kubelet一起编译的插件,比如azure,cephfs这些,一种是独立的可执行程序插件(如果网络插件exec或者cni),这种插件只要满足kubelet的FlexVolume框架接口规则就可以被kublet调用。FlexVolume框架把kublet对他的调用转化为对可执行程序命令行的调用,FlexVolume框架接口规则要求插件是一个可执行

2017-07-11 10:46:58 3950

原创 使用docker 发布的go编译的程序无法执行的问题

今天在容器中执行go静态编译的程序无法执行,提示 可执行程序 not found。经过尝试发现将程序放在较大容器镜像中的可以执行,放在小容器镜像(比如busybox,scratch)中无法执行。 后来发现go 编译的程序如果涉及net package,还是会动态编译的。解决方案可以在go 编译命令后加 -tags netgo 。比如 go build -tags netgo 具体可见

2017-06-21 15:53:23 1716

原创 K8s 多自定义计量(custom metrics)

这里介绍下如何在K8s设置多个自定义计量。K8s 默认的可用于PHA(Pod Horizon Autoscaling)只有CPU,自定义的计量feature一直处于alpha 测试阶段,而且不稳定,在某些版本未实现custom metric,比如1.6.2。         这里以1.5.7 版本为例,首先部署K8s,heapster,grafana,influxdb。部署方法可参考https

2017-06-02 17:20:46 3993

原创 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 766

原创 k8s网络插件cni

CNI(Container Network Interface)1容器网络接口,是Linux容器网络配置的一组标准和库,用户需要根据这些标准和库来开发自己的容器网络插件。在github里已经提供了一些常用的插件。CNI只专注解决容器网络连接和容器销毁时的资源释放,提供一套框架,所以CNI可以支持大量不同的网络模式,并且容易实现。相对于k8s exec直接执行可执行程序,cni 插件是对执行程序

2017-01-16 15:46:26 11527

转载 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 2514

原创 K8s 网络插件exec

K8s 网络插件支持exec , CNI,kubenet 3种类型。要求插件满足K8s网络插件接口即可。type NetworkPlugininterface{        Init(host Host, hairpinModecomponentconfig.HairpinMode)error        Event(name string,detailsmap[str

2017-01-11 16:32:25 1365

转载 分类指标准确率(Precision)和正确率(Accuracy)的区别

from http://www.cnblogs.com/zhizhan/p/4870429.html一、引言  分类算法有很多,不同分类算法又用很多不同的变种。不同的分类算法有不同的特定,在不同的数据集上表现的效果也不同,我们需要根据特定的任务进行算法的选择,如何选择分类,如何评价一个分类算法的好坏,前面关于决策树的介绍,我们主要用的正确率(accuracy)来评价分类算法。

2016-12-28 16:08:03 28364 1

转载 kubernetes/dashboard源码分析

from https://www.gitbook.com/book/fanux/k8s-source-code/detailsdashbodard采用前后端分离设计,前端是使用angular的单页应用,用ES6编写,后端使用go语言的go-restful框架当作http服务器。本文以介绍后端为主。架构图 客户端通过浏览器发送请求给Backend,Backend使用k

2016-12-27 10:52:53 3794

原创 docker 1.12 网络和负载均衡初探

环境:主机A   euca- 10-153-177-58主机B   euca-10-153-177-76root@euca-10-153-177-58:~# dockernode listID                           HOSTNAME      STATUS AVAILABILITY  MANAGER STATUS3ddwxfmfmpvkndj0l4

2016-11-01 16:03:34 2126

原创 nova-compute 镜像缓存时间管理

基于当前部门业务对openstack 的要求和背景如下1,要求能够快速启动虚拟机2,虚拟机的镜像种类不多3,虚拟机的镜像大小比较大4,要求虚拟机的磁盘读写速率快因为在当前网络条件下,从控制节点传输镜像到计算节点会花费大量时间,同时条件4要求,使得分布式存储(ceph之类)不可行。老的解决方案:使用虚拟机挂起来取代销毁,这样需要创建某种类型虚拟机时,恢复相应类型虚

2016-09-22 16:03:21 812

原创 openstack cirros 无法分配到IP

现象:启动cirros VM时无法分配到ip,之前停留在登录前页面,导致无法登录。但是启动ubuntu vm时却可以分配到ip 原因:当cirros VM DCHP 请求的时候,既收到真正的DHCP 服务的ACK,又收到老的openstack的相同VLAN里面的DHCP服务的NAKcirros镜像无法处理 ACK和NAK这样的混合场景,导致dhcp clie

2016-09-07 15:06:10 3146

原创 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 8867

原创 docker最初版本源码分析

docker经过3年发展,从代码量看,已经发展成为一个相对较大的项目。这里分析下docker 最初版本0.1.0时的代码,感受下一个高大上开源项目最初的样子,同时相对看后期版本代码,看最初版本代码更能明白一个项目的核心功能。docker  v0.1.0 一共才一二十个go文件。程序入口在docker/docker.go文件的main函数。该版本的docker程序集成了客户端和服务端

2016-07-18 14:50:33 704

原创 docker 1.12 体验

Docker 1.12 是docker 最近发布的版本,当前这个版本还没法自己用包管理工具直接下载安装,得下载源代码编译安装。因为需要proxy,注意得在源码的Dockerfile 文件上设置http_proxy 等环境变量。如果不是git下载而是zip下载还得在Makefile文件设置DOCKER_GITCOMMIT。编译后生成的二进制文件替换原系统的docker 文件。启动dock

2016-07-12 17:04:10 837

原创 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 1295

原创 使用容器集群构造混合云

相对以前主要通过API转发和聚合来构建混合云,通过容器技术可以更加方便地实现这一目标。上图是通过容器集群软件来实现混合云,实现各种资源的统一管理。EECOULD是可看作共有云。容器集群软件可以通过label 来筛选启动容器的主机,对于网络要求较高的容器,通过label仍然使用内网的主机来启动。同时保留私有云,主要要来满足需要启动Windows虚拟机的场景。

2016-06-17 15:48:06 674

原创 为什么docker创建的网络命名空间在ip netns 不可见

创建docker容器后本来应该有新的命名空间(如果有独立网络的话),那么可以通过 ip netns 命令查看到命名空间,但是实际上却看不到。查过资料才发现,ip netns 只能查看到 /var/run/netns 下面的网络命名空间。docker 不像openstack  neutron 会自动在这个文件创建命名空间名字,需要手动创建。创建方法是:pid=`docker inspec

2016-06-17 15:01:22 4143 2

空空如也

空空如也

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

TA关注的人

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