Docker
文章平均质量分 74
liuliuzi_hz
这个作者很懒,什么都没留下…
展开
-
在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 · 1368 阅读 · 0 评论 -
k8s网络插件cni
CNI(Container Network Interface)1容器网络接口,是Linux容器网络配置的一组标准和库,用户需要根据这些标准和库来开发自己的容器网络插件。在github里已经提供了一些常用的插件。CNI只专注解决容器网络连接和容器销毁时的资源释放,提供一套框架,所以CNI可以支持大量不同的网络模式,并且容易实现。相对于k8s exec直接执行可执行程序,cni 插件是对执行程序原创 2017-01-16 15:46:26 · 11592 阅读 · 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 多自定义计量(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 · 4049 阅读 · 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 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 · 14132 阅读 · 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 评论 -
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 评论 -
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 评论 -
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 评论 -
(runc)容器是怎么创建的
大家都知道容器是通过namespace和cgroup技术来创建的,但是具体代码是如何控制namespace和cgroup的呢?下面就以runc源码为例子简单介绍下。runc的前身实际上是Docker的libcontainer项目演化而来。runC实际上就是libcontainer配上了一个轻型的客户端。从本质上来说,容器是提供一个与宿主机系统共享内核但与系统中的其它进程资源相隔原创 2017-11-27 21:24:03 · 1550 阅读 · 0 评论 -
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 · 641 阅读 · 0 评论 -
早期版本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 · 1230 阅读 · 0 评论 -
容器内外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 · 2712 阅读 · 0 评论 -
docker swarm mode 调度 自定义过滤器
因为任务需要,要求对jenksin 控制的swarm 集群创建容器时候,添加过滤要求,为保证容器性能,某种镜像的容器不能在同一台主机部署。而当前docker swarm mode 并不支持这种调度策略。如果是kerbernets,反亲和性(anti-affinity)特性可以解决这种问题。在容器配置文件种加 podAntiAffinity 就可以了。但是swarm mode 并不支持这种特性,...原创 2019-05-07 17:27:06 · 699 阅读 · 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 评论 -
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 · 1381 阅读 · 0 评论 -
Docker背后的内核知识——cgroups资源限制
转自http://www.infoq.com/cn/articles/docker-kernel-knowledge-cgroups-resource-isolation上一篇中,我们了解了Docker背后使用的资源隔离技术namespace,通过系统调用构建一个相对隔离的shell环境,也可以称之为一个简单的“容器”。本文我们则要开始讲解另一个强大的内核工具——cgroups转载 2016-01-27 13:41:08 · 901 阅读 · 0 评论 -
Linux cgroup机制分析之框架分析
转载请注明出处:http://ericxiao.cublog.cn一: 前言Cgroup是近代linux kernel出现的.它为进程和其后续的子进程提供了一种性能控制机制.在这里不打算对cgroup的作用和使用做过多的描述.本文从linux kernel的源代码出发分析cgroup机制的相关实现.在本节中,主要分析cgroup的框架实现.在后续的部份再来详细分析kerne转载 2016-01-28 16:19:25 · 1019 阅读 · 0 评论 -
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 · 2269 阅读 · 0 评论 -
docker & vlan
这两天接到任务,需要实验下docker容器通过vlan隔离,这样各个容器就可以和BTS基站通信(因为坑爹的设计,每个BTS基站都是相同的IP,在同个网络里,不得不通过vlan隔离。)docker容器的网络类型有4种host模式,使用--net=host指定。container模式,使用--net=container:NAME_or_ID指定。none模式,使用--net=none指原创 2016-01-12 14:50:20 · 3167 阅读 · 4 评论 -
Docker Swarm与Apache Mesos的区别
转自http://www.infoq.com/cn/articles/difference-between-swarm-docker-and-mesos-apacheDocker Swarm 是目前 Docker 社区原生支持的集群工具,它通过扩展 Docker API 力图让用户像使用单机 Docker API 一样来驱动整个集群;而 Mesos 是 Apache 基金会下的集群资源转载 2016-02-03 13:32:05 · 812 阅读 · 0 评论 -
jenkins swarm 结合使用
简单记录下jenkins 和 swarm 结合安装使用过程和注意事项安装配置过程:1、各服务器安装docker (不详细介绍了,网上都有)。2、安装warm (网上有详细安装方法,比如 http://www.cnblogs.com/rio2607/p/4445968.html,推进用第二种安装方法,即以静态IP形式加入warm 集群)。3、jenkins 插件安装。安装docker原创 2016-02-03 14:36:25 · 6218 阅读 · 3 评论 -
Swarm and shipyard
Swarm 是docker 公司推出的原生docker集群管理软件。主要实现了容器主机的集群管理,实现容器调度。主要实现方法是提供API来转发用户请求。因为SwarmAPI 基本兼容dockerAPI,所以用户可以直接使用docker客户端来访问Swarm,学习成本小。但是这种方法实质上还是使用单机docker,网络相对其他集群管理软件(如K8s)简单的多。Shipyard是swarm 的GU原创 2016-06-01 17:07:40 · 1161 阅读 · 0 评论 -
Kubernetes& swarm对比
SwarmSwarm是Docker开发的原生集群工具,Swarm使用标准的Docker API,这意味着容器能够使用Docker客户端命令启动,Swarm会选择合适的主机来运行容器。Swarm的基本架构很简单:每个主机运行一个Swarm代理,一个主机运行Swarm管理器(在测试的集群中,这个主机也可以运行代理),这个管理器负责主机上容器的编排和调度。Swarm能以高可用性模式(原创 2016-06-13 10:14:41 · 9650 阅读 · 0 评论 -
docker 1.12 体验
Docker 1.12 是docker 最近发布的版本,当前这个版本还没法自己用包管理工具直接下载安装,得下载源代码编译安装。因为需要proxy,注意得在源码的Dockerfile 文件上设置http_proxy 等环境变量。如果不是git下载而是zip下载还得在Makefile文件设置DOCKER_GITCOMMIT。编译后生成的二进制文件替换原系统的docker 文件。启动dock原创 2016-07-12 17:04:10 · 851 阅读 · 0 评论 -
为什么docker创建的网络命名空间在ip netns 不可见
创建docker容器后本来应该有新的命名空间(如果有独立网络的话),那么可以通过 ip netns 命令查看到命名空间,但是实际上却看不到。查过资料才发现,ip netns 只能查看到 /var/run/netns 下面的网络命名空间。docker 不像openstack neutron 会自动在这个文件创建命名空间名字,需要手动创建。创建方法是:pid=`docker inspec原创 2016-06-17 15:01:22 · 4178 阅读 · 2 评论 -
使用容器集群构造混合云
相对以前主要通过API转发和聚合来构建混合云,通过容器技术可以更加方便地实现这一目标。上图是通过容器集群软件来实现混合云,实现各种资源的统一管理。EECOULD是可看作共有云。容器集群软件可以通过label 来筛选启动容器的主机,对于网络要求较高的容器,通过label仍然使用内网的主机来启动。同时保留私有云,主要要来满足需要启动Windows虚拟机的场景。原创 2016-06-17 15:48:06 · 709 阅读 · 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 评论 -
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 · 2158 阅读 · 0 评论 -
Docker背后的内核知识——Namespace资源隔离
转自http://www.infoq.com/cn/articles/docker-kernel-knowledge-namespace-resource-isolationDocker这么火,喜欢技术的朋友可能也会想,如果要自己实现一个资源隔离的容器,应该从哪些方面下手呢?也许你第一反应可能就是chroot命令,这条命令给用户最直观的感觉就是使用后根目录/的挂载点切换了,即文件系统被转载 2016-01-27 13:39:24 · 817 阅读 · 0 评论