关于dockeretcd的信息

本篇文章给大家谈谈dockeretcd,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Docker flannel网络

Flannel网络是croeOS开发的容器网络解决方案,flannel为每一个主机分配一个子网,容器从这个子网中分配ip,这些ip可以在主机间进行路由,容器不需要NAT和端口映射,就能完成跨主机通讯。

由图可知,flannel会分配subnet结构网络,以此分配网段。每一个的subnet都会从一个更大的IP地址进行划分,flannel会在每一个主机上运行flanneld的客户端,职责是联系etcd,分配子网;flannel会用etcd进行存储数据(配置信息、网络关系……);数据是如何在etcd间转发(由backend实现);

Flannel实质上是一种overlay的网络类型,表示的是在一个网络应用层当中,不依靠ip地址传递消息,而是采用一种映射机制,把ip地址映射到某个资源定位上,也晌空就将tcp的数据包包装到另外一种数据包上进行传输,目前支持udp、Vxlan、vps等转发方式。

Flannel采用etcd存储配置数据的子网和配置信息,flannel启动后,后台会首先检索配置和正在使用的子网列表,然后会从中间选择一个子网,尝试去注册,etcd也会存储主机对应的ip地址,flannel使用etcd的监视功能,监视子网下的所有变化信息,并且维护一个路由表,从而提高性能。

Docker0:数据从原容器发出后,经过主机的docker0网卡,再转发到flannel1的网卡(p2p网卡:udp封装、按路由宴销瞎投递)

到另一台主机,先解udp封装,相反操作,

Flannel网卡只支持docker0网卡向容器内进行转发

跨主机网络有:Pipwork、flannel、Weave 、Open、vSwitch、calico……

Weave:在每个宿主机上不止一个特殊的路由的容器,不同主机间的route连接 在一起,route连接所有普通的ip,并通过udp包发送到其他主机的普通容器上,解决了网络的问题,以然是单机。

Flannel:针对K8s设计的,为了集群中所有节点重新规划ip地址的使用规则,同一个内网且不重复的ip地址

Calio:性能和效率低

Flannel工作原理:每个主机配置ip段和子网的个数,flannel使用etcd维护和分配这些子网中实际ip地址之间的映射,对于数据路径上flannel采用udp封装ip数据包,转发到远程主机上

Udp封装:原始数据在起始节点flannel上进行udp封装,投递到目的节点后,被另一端的flanneld还原成原始数据包,两边docker服务感觉不到这个过程。

每个节点上的docker会使用不同的ip地址段:随机生成的地址段去注册,与网络通讯第一定律违背(1个vlan=一个广播域=1个网段),这是因为,flannel通过etcd分配的每个节点可用的ip地址段后,偷偷修改docker的启动参数,在运行flannel服务的节点上,可以查看docker服务进程当中会多出几个参数斗橘,为bip,它限制了所有容器获得ip地址的范围,这个范围是由flannel自动分配的,由flannel保存在etcd中的记录,保证他们不会重复,也就意味着,虽然不同网段,但是etcd把这个路由做好了,并且限制了每个容器能够得到的地址是在一个固定的范围内。

为什么发送节点的数据会从docker0路由到flannel0这快虚拟网卡上:数据包从容器A到容器B,(两者地址段不同),数据包从docker0出来后,就会被投递到flannel0上,目标节点上由于投递的地址是一个容器,所以目的地址一定会落在docker0上,即p2p

必须先启动host1的才能启动host2的

ping测试

[img]

6大分类,17大有用的docker工具,你知道几个?

1,编排和调度程序

2,持续集成/持续部署(CI/CD)

Travis CI是一个免费的开源CI项目,通过自动构建和测试代码更改来提高开发的效率。软件即服务(Saas)平台随即能够对代码更改的成功与否提供即握数时反馈。Travis CI还能够通过管理部署和通知来自动化项目开发的其他部分。

工具链接:

使用成本:免费

GitLab结合了CI,CD和代码审查来处理整个应用程序的生命周期。它与Docker Engine上的GitLab runner结合使用,以启用应用程序的自动化测试和构建。缺皮老其他功能还包括活动流,IDE,问题跟踪伏升和存储库管理。GitLab CI还有一个内置的容器注册表来扫描和存储Docker存储库。

工具链接:

使用成本:

• 社区版:免费,无限用户

• 企业版入门:3.25 美元/用户/月

• 企业版高级版:16.59美元/用户/月

3,记录

Logspout是帮助管理在Docker容器中运行的程序生成的日志的一个很好的工具。它将容器应用程序日志路由到单个位置(例如,通过HTTP可用的JSON对象或流式端点)。Logspout也有一个可扩展的模块系统。

工具链接:

使用成本:免费

Fluentd作为一个开源数据收集器工作 - 一个统一和记录所有其他容器日志的容器。拥有500多个插件,Fluentd连接到许多数据源和数据输出来收集事件; 这些被标记为在需要的地方路由它们。这种基于标签的路由可以使复杂的路由清晰地表达。

工具链接:

使用成本:免费

作为Elastic Stack的一部分,Logstash与Beats,Elasticsearch和Kibana一起运行良好。它是一个开源的服务器端处理管道,可以传输和处理日志,事件或其他数据。

工具链接:

使用成本:免费

使用syslog-ng从各种来源收集日志,并在将它们路由到不同的目的地之前,几乎实时地处理它们。一个值得信赖的日志管理基础架构,syslog-ng将高性能功能与丰富的消息解析和重写选项结合在一起。

工具链接:

使用成本:免费(根据要求可提供syslog-ng高级版的价格)

4,服务发现

由CoreOS创建,etcd是为共享配置和服务发现而设计的高可用性键值存储。该工具提供了将数据存储在一组机器上的可靠方法。它专门为运行CoreOS的集群而构建,但etcd也可以在其他操作系统(包括BSD,Linux和OS X)上运行。

工具链接:

使用成本:免费

5,构建

Packer是一个Hashicorp工具,用于构建机器映像(包括Docker),并与诸如Ansible,Chef和Puppet等配置管理工具集成。它是一个轻量级的工具,可以在单个源配置的每个主要操作系统上运行。

工具链接:

使用成本:免费

自动Dockerize与Whales你的应用程序。唯一需要的是在主机上安装并运行Docker。然后,Whales通过输出必要的文件来运行Docker和应用程序。

使用成本:免费

Gradle插件使得所有的构建脚本都可以与Docker守护进程交互。每个任务委托给Docker-client,然后通过HTTP连接到Docker的远程API。大多数配置参数是可选的。

使用成本:免费

6,管理

这就是完整的清单!希望对你们能够有所帮助!

来自公众号:云平台从0到1

用docker搭建一个高可用可扩展的服务支撑系统怎么做

一种方案为Haproxy+etcd+confd,采用松散式的组织结构,但各个组件之间的通讯是非常严密的,且扩展性更强,定制也更加灵活。

一、架构优势

约定由Haproxy+etcd+confd+Docker构建的基础服务平台简称“HECD” 架构,整合了多种开源组件,看似松散的结构,事实上已经是一个有机的整体,它们互相联系、互相作用,是Docker生态圈中最理想的组合之一,具有以下优势:

自动、实时发现及无感知服务刷新;

支持任意多台Docker主宿机;

支持多种APP接入且打散至不分主宿机;

采用Etcd存储信息,集群支持可靠性高;

采用Confd配置引擎,支持各类接入层,如Nginx;

支持负载均衡、故障迁移;

具备资世升源弹性,伸缩自如(通过生成、销毁容器实现);

二、架构说明

在HECD架构中,首先管理员操作Docker Client,除了提交容器(Container)启动与停止指令外,还通过REST-API方式向Etcd(K/V)存储组件注册容器信息,包括容器名称、主宿机IP、映射端口等。Confd配置组件会定时查询Etcd组件获取最新的容器信息,根据定义好的配置模板生成Haproxy配置文件Haproxy.cfg,并且自动reload haproxy服务。用户在访问业务服务时,完全没有感知后端APP的上线、下线、切换及迁移,达到了自动发现、高可用的目的。详细架构图见图1-1。

图1-1 平台架构图

为了方便大家理解各组件间的关系,通过图1-2进行架构流程梳理,首先管理员通过Shell或API操作容器,下一步将容器信息注册到Etcd组件,Confd组件会定时查询Etcd,获取已经注册到Etcd中容器信息,最后通过Confd的模板引擎生成Haproxy配置,整个流程结束。

图1-2架构流程图

了解架构流程后,我们逐一对流程中各组件进行详细介绍。

1、Etcd介绍

Etcd是一个高可用的 Key/Value 存储系统,主要用于分享配置和服务发现。

简单:支持 curl 方式的用户 API (HTTP+JSON)

安全:可选 SSL 客户端证书认证

快速:单实例可达每秒 1000 次写操作

可靠:使用 Raft 实现分布式

2、Confd介绍

Confd是一个轻量级的配置管理工具。通过查询Etcd,结合配置模板引擎,保持本地配置最新,同时具备定期探测机制,配置变更自动reload。

3、Haproxy介绍

HAProxy是提供高逗高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速搜念老并且可靠的一种解决方案。(来源百科) 

三、架构部署

平台环境基于Centos6.5+Docker1.2构建,其中Etcd的版本为etcd version 0.5.0-alpha,Confd版本为confd 0.6.2,Haproxy版本为HA-Proxy version 1.4.24。下面对平台的运行环境、安装部署、组件说明等进行详细说明,环境设备角色表如下:

1、组件安装

1.1 Docker安装

SSH终端登录192.168.1.22服务器,执行以下命令:

# yum -y install docker-io   

# service docker start   

# chkconfig docker on  

1.2 Haproxy、confd安装

SSH终端登录192.168.1.20服务器,执行以下命令:

1、haproxy   

# yum –y install haproxy   

2、confd   

# wget   

# mv confd /usr/local/bin/confd   

# chmod +x /usr/local/bin/confd   

# /usr/local/bin/confd -version   

confd 0.6.2  

1.3 Etcd安装

SSH终端登录192.168.1.21服务器,执行以下命令: 

# yum -y install golang   

# mkdir -p /home/install cd /home/install   

# git clone   

# cd etcd   

# ./build   

# cp bin/etcd /bin/etcd   

# /bin/etcd -version   

etcd version 0.5.0-alpha  

2、组件配置   

2.1 Etcd配置

由于etcd是一个轻量级的K/V存储平台,启动时指定相关参数即可,无需配置。

# /bin/etcd -peer-addr 192.168.1.21:7001 -addr 192.168.1.21:4001 -data-dir /data/etcd -peer-bind-addr 0.0.0.0:7001 -bind-addr 0.0.0.0:4001  

由于etcd具备多机支持,参数“-peer-addr”指定与其它节点通讯的地址;参数“-addr”指定服务监听地址;参数“-data-dir”为指定数据存储目录。    

由于etcd是通过REST-API方式进行交互,常见操作如下:

1) 设置(set) key操作  

# curl -L  -d value="this is awesome"   

{"action":"set","node":{"key":"/mykey","value":"this is awesome","modifiedIndex":28,"createdIndex":28}} 

2) 获取(get) key信息

# curl -L   

{"action":"get","node":{"key":"/mykey","value":"this is awesome","modifiedIndex":28,"createdIndex":28}}  

3) 删除key信息

# curl -L          {"action":"delete","node":{"key":"/mykey","modifiedIndex":29,"createdIndex":28},"prevNode":{"key":"/mykey","value":"this is awesome","modifiedIndex":28,"createdIndex":28}}   更多操作API见。 

2.2 Confd+Haproxy配置

由于Haproxy的配置文件是由Confd组件生成,要求Confd务必要与haproxy安装在同一台主机上,Confd的配置有两种,一种为Confd资源配置文件,默认路径为“/etc/confd/conf.d”目录,另一种为配置模板文件,默认路径为“/etc/confd/templates”。具体配置如下:

创建配置文件目录

# mkdir -p /etc/confd/{conf.d,templates}

(1)配置资源文件   

详细见以下配置文件,其中“src”为指定模板文件名称(默认到路径/etc/confd/templates中查找);“dest”指定生成的Haproxy配置文件路径;“keys”指定关联Etcd中key的URI列表;“reload_cmd”指定服务重载的命令,本例中配置成haproxy的reload命令。

【/etc/confd/conf.d/ haproxy.toml】 

[template]  

src = "haproxy.cfg.tmpl"  

dest = "/etc/haproxy/haproxy.cfg"  

keys = [  

 "/app/servers",  

]  

reload_cmd = "/etc/init.d/haproxy reload"  

(2)配置模板文件  

Confd模板引擎采用了Go语言的文本模板,更多见,具备简单的逻辑语法,包括循环体、处理函数等,本示例的模板文件如下,通过range循环输出Key及Value信息。

【/etc/confd/templates/haproxy.cfg.tmpl】 

global  

       log 127.0.0.1 local3  

       maxconn 5000  

       uid 99  

       gid 99  

       daemon  

 

defaults  

       log 127.0.0.1 local3  

       mode http  

       option dontlognull  

       retries 3  

       option redispatch  

       maxconn 2000  

       contimeout  5000  

       clitimeout  50000  

       srvtimeout  50000  

 

listen frontend 0.0.0.0:80  

       mode http  

       balance roundrobin  

       maxconn 2000  

       option forwardfor  

       {{range gets "/app/servers/*"}}  

       server {{base .Key}} {{.Value}} check inter 5000 fall 1 rise 2  

       {{end}}  

 

       stats enable  

       stats uri /admin-status  

       stats auth admin:123456  

       stats admin if TRUE  

(3)模板引擎说明  

本小节详细说明Confd模板引擎基础语法与示例,下面为示例用到的KEY信息。

# curl -XPUT  value="192.168.1.22:49156"   

# curl -XPUT  value="192.168.1.22:49158"   

# curl -XPUT  value="192.168.1.22:49160"   

# curl -XPUT  value="192.168.1.22:49162"1、base   

作为path.Base函数的别名,获取路径最后一段。 

{{ with get "/app/servers/prickly_blackwell"}}

server {{base .Key}} {{.Value}} check 

{{end}}

prickly_blackwell 192.168.1.22:49162

2、get

返回一对匹配的KV,找不到则返回错误。

{{with get "/app/servers/prickly_blackwell"}}

key: {{.Key}}

value: {{.Value}} 

{{end}}

/app/servers/prickly_blackwell 192.168.1.22:49162  

3、gets  

{{range gets "/app/servers/*"}}

{{.Key}} {{.Value}}

{{end}} 

/app/servers/backstabbing_rosalind 192.168.1.22:49156  

/app/servers/cocky_morse 192.168.1.22:49158  

/app/servers/goofy_goldstine 192.168.1.22:49160  

app/servers/prickly_blackwell 192.168.1.22:49162

4、getv

返回一个匹配key的字符串型Value,找不到则返回错误。

{{getv "/app/servers/cocky_morse"}}

192.168.1.22:49158  

5、getvs

返回所有匹配key的字符串型Value,找不到则返回错误。

{{range getvs "/app/servers/*"}}

value: {{.}}

{{end}} 

value: 192.168.1.22:49156  

value: 192.168.1.22:49158  

value: 192.168.1.22:49160  

value: 192.168.1.22:49162  

6、split

对输入的字符串做split处理,即将字符串按指定分隔符拆分成数组。

{{ $url := split (getv "/app/servers/cocky_morse") ":" }}

host: {{index $url 0}}

port: {{index $url 1}}

host: 192.168.1.22  

port: 49158  

7、ls

返回所有的字符串型子key,找不到则返回错误。 

{{range ls "/app/servers/"}}

subkey: {{.}} 

{{end}}

subkey: backstabbing_rosalind  

subkey: cocky_morse  

subkey: goofy_goldstine  

subkey: prickly_blackwell  

8、lsdir

返回所有的字符串型子目录,找不到则返回一个空列表。 

{{range lsdir "/app/"}}

subdir: {{.}} 

{{end}}

subdir: servers

(4)启动confd及haproxy服务

下面为启动Confd服务命令行,参数“interval”为指定探测etcd的频率,单位为秒,参数“-node”为指定etcd监听服务主地址,以便获取容器信息。 

# /usr/local/bin/confd -verbose -interval 10 -node '192.168.1.21:4001' -confdir /etc/confd /var/log/confd.log  

# /etc/init.d/haproxy start nbsp;

docker 安装配置 apisix 网关服务

apisix 是一个动态、实时、高性能的开源网关。

GitHub地址: apache/apisix

apisix只是一个服务,依赖etcd作为底层存储,apisix-dashboard是官方提供的一个可视化管理困森平台,这里一并安装

新建 config.yaml,设置apisix的一些配置信息

新建 dashboard_config.yaml,配置apisix-dashboard

新建 docker-compose.yml,配置docker启动的依赖慎枯关系,端口等信息

然后执行命令 docker-compose up -d --build 启动服务汪孝亩。启动etcd时可能会报权限不足的错误,执行 chmod -R 777 etcd_data 给足权限之后再重启一下服务。

Docker 配置Flannel网络过程及原理

备注:本文内容承接“kubernets集群搭建实操”,对网络部分进陆历物行补充描述。

总体描述:在搭建容器集群后,容器之间的通讯必须实现跨网络,这样存在网络路由的问题,解决方案包括OVS、flannel、socketplane,本文采用flannel方案。

涉及到的功能组件包括etcd、flannel和docker。

etcd负责维护共享数据,统一管理各节点的网络标识和子网编码;

flannel实现一块虚拟网卡,负责docker与外网之间的路由;

docker实现一块虚拟网卡,负责和flannel网卡通讯;

etcdctl set /coreos.com/network/config '{ "Network" : "10.1.0.0/16" }'

通过上述命令,设置集群中,分配给flannel的网络编烂猜码。

flannel把自身的子网编码提交到etcd,用于全局保存。通过ls /coreos.com/network/subnets,可以看到如下信息(三个flannel节点提交):

/coreos.com/network/subnets/10.1.99.0-24

/coreos.com/network/subnets/10.1.9.0-24

/coreos.com/network/subnets/10.1.33.0-24

Flannel实质上是一种“覆盖网络(overlay network)”,也就是将TCP数据包装在另一早液种网络包里面进行路由转发和通信,目前已经支持UDP、VxLAN、AWS VPC和GCE路由等数据转发方式。

ExecStart=/usr/bin/flanneld-start -etcd-endpoints=${FLANNEL_ETCD} -etcd-prefix=${FLANNEL_ETCD_KEY} $FLANNEL_OPTIONS

上面是flannel服务启动时的执行命令,其中定义了etcd的位置,etcd中保存‘Network’键的路径。执行后,从etcd获取到网络编码‘10.1.0.0/16’,并根据网络编码生成一个子网编码,并把这两个信息保存到/run/flannel/subnet.env中,文件内容如下:

FLANNEL_NETWORK=10.1.0.0/16

FLANNEL_SUBNET=10.1.33.1/24

FLANNEL_MTU=1472

FLANNEL_IPMASQ=false

之后,把子网编码保存到etcd中。

启动docker服务时,指定bip参数:--bip=${FLANNEL_SUBNET},表示对docker的网络参数进行配置。其中的FLANNEL_SUBNET变量保存在/run/flannel/subnet.env文件中。

其中FLANNEL_SUBNET:‘10.1.33.1’可以当做docker的网关地址。

按照上面的关联关系,组件启动必须按照一定顺序:etcd-flannel-docker

ip a s docker0

ip a s flannel

DockOne技术分享(十八):一篇文章带你了解Flannel

关于dockeretcd和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表