Docker集群(一) —— Docker网络及flannel介绍

【摘要】本文介绍docker网络原理和设置,以及在docker集群中需要解决的问题。最后介绍flannel在解决docker网络问题中的作用。

1  
基础

在介绍docker的网络之前,必须先认识docker所依赖的几个linux技术,这对理解docker的网络有帮助。因水平有限这一节仅简单介绍,对linux网络原理感兴趣的TX可以继续深入研究。

1.1
网络命名空间:

Linux Namespaces机制提供一种资源隔离方案。PID,IPC,Network等系统资源不再是全局性的,而是属于特定的Namespace。每个Namespace里面的资源对其他Namespace都不可见。Linux提供6中命名空间,
现在讲的网络命名空间是其中的一种。

一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、Iptable规则等都与其他的Network
Namespace隔离。一个Docker容器“通常”会分配一个独立的NetworkNamespace。“通常”的意思是如果docker以host模式启动则与主机在同一个命名空间,后面还会讲到。

这样每个docker容器就好像拥有了一套独立的网络环境,甚至以为自己霸占了全部的主机,也许这也是使人们经常认为容器就是虚机的原因之一吧~~~

1.2
Veth设备对

Veth设备对可以在不同的网络命名空间之间通信,用他们可以连接两个网络命名空间。一对veth设备就像网线的两头一样。

1.3
网桥

简单来说,桥接就是把一台机器上的若干个网络接口“连接”起来。其结果是,其中一个网口收到的报文会被复制给其他网口并发送出去。以使得网口之间的报文能够互相转发。类似交换机。

linux内核支持网口的桥接与交换机有一点点不同不同,交换机只是一个二层设备,对于接收到的报文,要么转发、要么丢弃。而运行着linux内核的机器本身就是一台主机,有可能就是网络报文的目的地。其收到的报文除了转发和丢弃,还可能被送到网络协议栈的上层(网络层),从而被自己消化。

在docker启动时,会在主机上创建一个docker0网桥。通过docker0在同一个主机上的容器之间都可以通信,外部的消息也可以经过docker0进入容器。后面还会讲到。


[email protected]:~$  ifconfig

docker0   Link encap:以太网  硬件地址 02:42:df:66:95:96

inet 地址:172.17.0.1  广播:0.0.0.0  掩码:255.255.0.0

inet6 地址: fe80::42:dfff:fe66:9596/64 Scope:Link

UP  BROADCAST RUNNING MULTICAST   MTU:1500  跃点数:1

2  
Docker网络模式

Docker有以下4种网络模式:

host模式,使用--net=host指定。

container模式,使用--net=container:NAME_or_ID指定。

none模式,使用--net=none指定。

bridge模式,使用--net=bridge指定,默认设置。

2.1
Bridge模式

2.1.1 
模式介绍

我们重点讲这个模式。Bridge是默认模式,正常docker启动时都已这个模式启动。在这个模式下当Docker
server启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。Docker0拥有一个自己的ip地址,有的书上说是172.17.42.1,但是我的机器上是172.17.0.1。总之是个172段的内部地址,机器外是访问不了的。


[email protected]:~$ ifconfig

docker0    Link encap:以太网  硬件地址  02:42:df:66:95:96

inet 地址:172.17.0.1  广播:0.0.0.0  掩码:255.255.0.0

inet6 地址:  fe80::42:dfff:fe66:9596/64 Scope:Link

UP BROADCAST MULTICAST   MTU:1500  跃点数:1

接收数据包:7 错误:0 丢弃:0  过载:0 帧数:0

发送数据包:30 错误:0 丢弃:0  过载:0 载波:0

碰撞:0 发送队列长度:0

接收字节:480 (480.0  B)  发送字节:4909  (4.9 KB)

eth0       Link encap:以太网  硬件地址  08:00:27:02:6c:8b

inet 地址:10.43.86.110  广播:10.43.86.255  掩码:255.255.255.0

inet6 地址:  fe80::a00:27ff:fe02:6c8b/64 Scope:Link

UP BROADCAST RUNNING MULTICAST   MTU:1500  跃点数:1

接收数据包:140296 错误:0 丢弃:0  过载:0 帧数:0

发送数据包:30286 错误:0 丢弃:0  过载:0 载波:0

碰撞:0 发送队列长度:1000

接收字节:9847208 (9.8  MB)  发送字节:2946052  (2.9 MB)

lo         Link encap:本地环回

inet 地址:127.0.0.1  掩码:255.0.0.0

inet6 地址: ::1/128  Scope:Host

UP LOOPBACK RUNNING   MTU:65536  跃点数:1

接收数据包:130 错误:0 丢弃:0  过载:0 帧数:0

发送数据包:130 错误:0 丢弃:0  过载:0 载波:0

碰撞:0 发送队列长度:0

接收字节:17199  (17.1 KB)  发送字节:17199 (17.1 KB)

Docker容器处在自己的网络命名空间中,容器之间怎么互通呢,就是连这个docker0网桥。这里就用到前面另一个概念veth对。可以把veth对看成网线的两头,他一头在容器里另一头在主机上。下面我们建个容器,然后看看主机上ip的变化。


[email protected]:~$ docker run -it ubuntu
//// 启动一个ubuntu镜像

[email protected]:/# ifconfig
///////// 容器里的ip地址

eth0       Link encap:Ethernet  HWaddr  02:42:ac:11:00:03//
这个硬件地址也是docker分配的

inet  addr:172.17.0.3   Bcast:0.0.0.0  Mask:255.255.0.0

inet6 addr: fe80::42:acff:fe11:3/64 Scope:Link

UP BROADCAST RUNNING MULTICAST   MTU:1500  Metric:1

RX packets:18 errors:0 dropped:0 overruns:0 frame:0

TX packets:6 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:2912 (2.9 KB)  TX bytes:508 (508.0 B)

lo         Link encap:Local Loopback

inet addr:127.0.0.1   Mask:255.0.0.0

inet6 addr: ::1/128 Scope:Host

UP LOOPBACK RUNNING   MTU:65536  Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)


[email protected]:~$ ifconfig 
///////主机的地址

docker0    Link encap:以太网  硬件地址  02:42:df:66:95:96

inet 地址:172.17.0.1  广播:0.0.0.0  掩码:255.255.0.0

inet6 地址:  fe80::42:dfff:fe66:9596/64 Scope:Link

UP BROADCAST RUNNING MULTICAST   MTU:1500  跃点数:1

接收数据包:14 错误:0 丢弃:0  过载:0 帧数:0

发送数据包:30 错误:0 丢弃:0  过载:0 载波:0

碰撞:0 发送队列长度:0

接收字节:960 (960.0  B)  发送字节:4909  (4.9 KB)

eth0       Link encap:以太网  硬件地址  08:00:27:02:6c:8b

inet 地址:10.43.86.110  广播:10.43.86.255  掩码:255.255.255.0

inet6 地址:  fe80::a00:27ff:fe02:6c8b/64 Scope:Link

UP BROADCAST RUNNING MULTICAST   MTU:1500  跃点数:1

接收数据包:207853 错误:0 丢弃:0  过载:0 帧数:0

发送数据包:30418 错误:0 丢弃:0  过载:0 载波:0

碰撞:0 发送队列长度:1000

接收字节:14099886 (14.0  MB)  发送字节:2966220  (2.9 MB)

lo         Link encap:本地环回

inet 地址:127.0.0.1  掩码:255.0.0.0

inet6 地址: ::1/128  Scope:Host

UP LOOPBACK RUNNING   MTU:65536  跃点数:1

接收数据包:154 错误:0 丢弃:0  过载:0 帧数:0

发送数据包:154 错误:0 丢弃:0  过载:0 载波:0

碰撞:0 发送队列长度:0

接收字节:20370 (20.3  KB)  发送字节:20370  (20.3 KB)

veth8e0ee35 Link encap:以太网   硬件地址  5a:34:bf:13:00:f5 
/// 这时在主机命名空间里面出现了一个veth,即veth对的一头。另一头在容器里呢,并且被容器改名为eth0了。

inet6 地址:  fe80::5834:bfff:fe13:f5/64 Scope:Link

UP BROADCAST RUNNING MULTICAST   MTU:1500  跃点数:1

接收数据包:7 错误:0 丢弃:0  过载:0 帧数:0

发送数据包:21 错误:0 丢弃:0  过载:0 载波:0

碰撞:0 发送队列长度:0

接收字节:578  (578.0 B)  发送字节:3516 (3.5 KB)

好了现在可以看到几个结论。在bridge模式下:

主机上面会有一个docker0的网桥

每个容器都与docker0连通,所以同主机上的容器之间也连通

每个主机上容器的地址都是从172.17.0.2开始往后分

1.1.1 
通信

Docker会修改系统的路由规则来控制消息收发,这节就表达这一个意思。

在docker启动之后通过iptables-save查看,可以看到关于docker0的几个规则,他们使得docker0网桥可以收发消息。同一主机中的容器之间就可以通信。


[email protected]:~$ sudo iptables-save

# Generated by iptables-save v1.4.21 on  Wed Jan 27 10:49:15 2016

*nat

:PREROUTING ACCEPT [10631:1010228]

:INPUT ACCEPT [1268:199346]

:OUTPUT ACCEPT [3169:190771]

:POSTROUTING ACCEPT [3170:190855]

:DOCKER - [0:0]

-A PREROUTING -m addrtype --dst-type  LOCAL -j DOCKER

-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER

-A POSTROUTING -s 172.17.0.0/16 ! -o  docker0 -j MASQUERADE

COMMIT

# Completed on Wed Jan 27 10:49:15 2016

# Generated by iptables-save v1.4.21 on  Wed Jan 27 10:49:15 2016

*filter

:INPUT ACCEPT [15605:2501897]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [31535:2534237]

:DOCKER - [0:0]

-A FORWARD -o docker0 -j DOCKER

-A FORWARD -o docker0 -m  conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

-A FORWARD -i docker0 ! -o  docker0 -j ACCEPT

-A FORWARD -i docker0 -o  docker0 -j ACCEPT

COMMIT

# Completed on Wed  Jan 27 10:49:15 2016

如果使用-p参数将容器端口暴露出来docker run -it -p 2200:22 -d ubuntu,再通过iptables-save查看信息,会发现多出了两条规则。他们使得发送到主机地址和2200端口的消息可以送到docker0上,从而进入容器内。这样就使得容器内可以和主机外通信。


[email protected]:~$ sudo iptables-save

# Generated by iptables-save v1.4.21 on  Wed Jan 27 10:56:17 2016

*nat

:PREROUTING ACCEPT [40:4571]

:INPUT ACCEPT [4:623]

:OUTPUT ACCEPT [9:558]

:POSTROUTING ACCEPT [9:558]

:DOCKER - [0:0]

-A PREROUTING -m addrtype --dst-type  LOCAL -j DOCKER

-A OUTPUT ! -d 127.0.0.0/8 -m addrtype  --dst-type LOCAL -j DOCKER

-A POSTROUTING -s 172.17.0.0/16 ! -o docker0  -j MASQUERADE

-A POSTROUTING -s 172.17.0.4/32 -d 172.17.0.4/32 -p tcp -m tcp  --dport 22 -j MASQUERADE

-A DOCKER ! -i docker0 -p tcp -m tcp --dport 2200 -j DNAT --to-destination 172.17.0.4:22

COMMIT

# Completed on Wed Jan 27 10:56:17 2016

# Generated by iptables-save v1.4.21 on  Wed Jan 27 10:56:17 2016

*filter

:INPUT ACCEPT [49:8589]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [47:6227]

:DOCKER - [0:0]

-A FORWARD -o docker0 -j DOCKER

-A FORWARD -o docker0 -m conntrack  --ctstate RELATED,ESTABLISHED -j ACCEPT

-A FORWARD -i docker0 ! -o docker0 -j  ACCEPT

-A FORWARD -i docker0 -o docker0 -j  ACCEPT

-A DOCKER -d 172.17.0.4/32 ! -i docker0  -o docker0 -p tcp -m tcp --dport 22 -j ACCEPT

COMMIT

# Completed on Wed  Jan 27 10:56:17 2016

事实上,kubernetes的service-Pod之间的寻址也是通过挂载路由规则实现的。Flannel也是通过路由规则使得docker0上的消息可以发到flannel0,进而实现docker集群中Node结点之间的互通。因本文并不是介绍这些开源工具的原理,所以不在路由表这上面做过多展开,我们只需知道kubernetes、flannel等都是通过修改路由规则来解决他们的问题的,这样在使用他们的时候不至于总是思考“咋通的呢”,“他背后是什么东西实现的呢”。

1.1.2 
问题

Bridge模式可以解决同主机内容器的通信,同时可以看到几个问题:

docker容器之间想要连通需要在同一台主机上,跨主机无法通信

容器的ip地址都docker分配的,一般都从172.17.0.2开始,不同主机上的容器地址有可能是相同的。Docker集群要解决这个问题,不能让他们相同。

在解决这些问题之前,我们先把另外docker的三个模式简单介绍一下。后面介绍的flannel是解决这些问题的方案之一。

1.2
Host模式

如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network
Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。

当我们在容器中执行任何类似ifconfig命令查看网络环境时,看到的都是宿主机上的信息。而外界访问容器中的应用,则直接使用物理机器地址即可,就如直接跑在宿主机中一样。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

1.3
Container模式

这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。

kubernetes中一个Pod内的容器共享网络,就是在pod内有容器使用了这种网络模式。

1.4
None模式

在这种模式下,Docker容器拥有自己的Network
Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。

2  
Flannel介绍

Flannel是CoreOS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。并且连通主机节点的网络。

但在默认的Docker配置中,每个节点上的Docker服务会分别负责所在节点容器的IP分配。这样导致的一个问题是,不同节点上容器可能获得相同的内外IP地址。Flannel的设计目的就是为集群中的所有节点重新规划IP地址的使用规则,从而使得不同节点上的容器能够获得“同属一个内网”且”不重复的”IP地址,并让属于不同节点上的容器能够直接通过内网IP通信。 默认的节点间数据通信方式是UDP转发。

下图来自网络:

简单的说flannel做了三件事情:

1.     数据从源容器中发出后,经由所在主机的docker0虚拟网卡转发到flannel0虚拟网卡,这是个P2P的虚拟网卡,flanneld服务监听在网卡的另外一端。 Flannel也是通过修改Node的路由表实现这个效果的。

2.     源主机的flanneld服务将原本的数据内容UDP封装后根据自己的路由表投递给目的节点的flanneld服务,数据到达以后被解包,然后直接进入目的节点的flannel0虚拟网卡,然后被转发到目的主机的docker0虚拟网卡,最后就像本机容器通信一样由docker0路由到达目标容器。

3.      使每个结点上的容器分配的地址不冲突。Flannel通过Etcd分配了每个节点可用的IP地址段后,再修改Docker的启动参数。“--bip=X.X.X.X/X”这个参数,它限制了所在节点容器获得的IP范围。

1  
Flannel安装和使用

1.1
安装flannel

解压文件,tar -zxvf xxx.tar

Flannel路径在:

在系统中增加两个文件:

在 /etc/init/
增加flanneld.conf文件,内容见最下面。

在 /etc/default/
增加flanneld文件,内容见最下面。

1.2
启动ETCD:

前面说到了,flannel需要通过ETCD管理每个结点分配的地址段。所以先启动etcd。当然在kubernetes集群系统里面,kubernetes也要求启动etcd。这里提一下,需要先启动flannel之后再通过kubectl启动容器,因为需要通过flannel限制docker容器的ip地址段。看完后面就理解了。

./etcd--listen-client-urls=http://0.0.0.0:4001 --listen-peer-urls=http://0.0.0.0:7001&

设置本集群的容器ip地址段。

etcdctl rm /coreos.com/network/ --recursive

./etcdctlmk /coreos.com/network/config ‘{"Network":"172.200.0.0/16"}‘

设置完可以查看一下:


etcdctl get  /coreos.com/network/config

{"Network":"172.200.0.0/16"}

Network是本集群docker容器可分配的代码段,由flannel管理。不能和机器实际物理结点ip冲突,最好搞个和谁都不冲突的,随便写。

1.3
启动flannel

执行:ip link set dev docker0 down

执行:brctl delbr docker0

进入flannel/bin
路径,

sudo./flanneld 
-etcd-endpoints=http://ETCD所在机器的IP地址:4001-iface=eth0&


[email protected]:/usr/bin$ sudo ./flanneld  -etcd-endpoints=http://10.43.86.110:4001

[sudo] password for het:

I0120 21:31:00.282318 30969 main.go:275]  Installing signal handlers

I0120 21:31:00.788024 30969 main.go:130]  Determining IP address of default interface

I0120 21:31:00.925879 30969 main.go:188]  Using 10.43.86.110 as external interface

I0120 21:31:01.025180 30969 main.go:189]  Using 10.43.86.110 as external endpoint

I0120 21:31:01.331261 30969 etcd.go:204]  Picking subnet in range 172.200.1.0 ... 172.200.255.0

I0120 21:31:01.418648 30969 etcd.go:84]
Subnet lease acquired:  172.200.59.0/24

I0120 21:31:02.359643 30969 udp.go:222]  Watching for new subnet leases

Flannel启动之后会创建一个文件 
subnet.env ,可以打开看一下


[email protected]:/run$ vi flannel/subnet.env

FLANNEL_NETWORK=172.200.0.0/16
////这个就是在etcd里面设置的地址段

FLANNEL_SUBNET=172.200.59.1/24 
/// 这个就是为本结点分配的容器地址段

FLANNEL_MTU=1472

FLANNEL_IPMASQ=false

下面让flannel产生的地址段生效,控制docker容器的ip地址分配。

执行:source /run/flannel/subnet.env

执行:sudo rm /var/run/docker.pid

执行:sudo docker -d --bip=${FLANNEL_SUBNET}--mtu=${FLANNEL_MTU}
&

可以看到上面的操作就是把flannel启动起来,把他的地址段提出来,然后设置一下docker的启动参数。

好了,下面可以测试一下。

测试:执行docker run -it ubuntu /bin/bash

ifconfig查看容器被分配的IP。非flannel时docker的ip是172.17.0.X,如果上面的成功,此时分配的IP应该为172.200.59.x。

至此一个docker集群的网络就打通了,在另一个主机上也是按这样操作,注意启动flannel时要指定到同一个etcd。

附录 flanneld.conf


description "Flannel service"

author "@chenxingyu"

start on (net-device-up

and local-filesystems

and runlevel [2345])

stop on runlevel [016]

respawn

respawn limit 10 5

pre-start script

FLANNEL=/usr/bin/$UPSTART_JOB

if [ -f /etc/default/$UPSTART_JOB ]; then

. /etc/default/$UPSTART_JOB

fi

if [ -f $FLANNEL ]; then

exit 0

fi

exit 22

end script

script

# modify these in /etc/default/$UPSTART_JOB (/etc/default/docker)

FLANNEL=/usr/bin/$UPSTART_JOB

FLANNEL_OPTS=""

if [ -f /etc/default/$UPSTART_JOB ]; then

. /etc/default/$UPSTART_JOB

fi

exec "$FLANNEL" $FLANNEL_OPTS

end script

时间: 2024-10-01 19:37:20

Docker集群(一) —— Docker网络及flannel介绍的相关文章

Docker集群下,如何用Flannel实现容器互联

当您将多台服务器节点组成一个Docker集群时,需要对集群网络进行设置,否则默认情况下,无法跨主机容器互联,接下来我们首先分析一下原因. 跨主机容器互联 下图描述了一个简单的集群网络,在该集群内,有两台服务器甲和乙,每台服务器上都有两张网卡,分别连接公网和私网,两台服务器可以通过私网互联,在两个服务器节点上分别安装了Docker,并且运行了A/B/C/D 4个容器. 每台服务器节点上都有一个 docker0 网桥,这是docker启动后初始化的虚拟设备,每个容器都与docker0网桥连接,并且,

Docker集群(三) —— Kubernetes 简单入门

[摘要]Kubernetes是Google开源的Docker容器集群管理系统,为容器化的应用提供资源调度.部署运行.服务发现.扩容缩容等整一套功能.本文介绍了kubernetes的重要概念,并通过实例的示例解释了如何应用kubernetes管理docker集群. 因操作系统不同.应用场景不同kubernetes的使用方法有不同,本文只介绍其中一种笔者实践过的切实可行的方法,旨在使读者快速了解Kubernetes,对其有直观的感受.本文以单机版举例,下面的例子都在同一台物理结点上执行,多结点的情况

k8s docker集群搭建

?Kubernetes介绍 1.背景介绍 云计算飞速发展 - IaaS - PaaS - SaaS Docker技术突飞猛进 - 一次构建,到处运行 - 容器的快速轻量 - 完整的生态环境 2.什么是kubernetes 首先,他是一个全新的基于容器技术的分布式架构领先方案.Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg).在Docker技术的基础上,为容器化的应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性

二进制搭建kubernetes多master集群【二、配置flannel网络】

上一篇我们已经搭建etcd高可用集群,参考:二进制搭建kubernetes多master集群[一.使用TLS证书搭建etcd集群] 此文将搭建flannel网络,目的使跨主机的docker能够互相通信,也是保障kubernetes集群的网络基础和保障,下面正式开始配置. 一.部署 Flannel 在所有集群节点都安装Flannel,下面的操作以etcd集群的三个节点为例都执行一遍 1.下载安装Flannel wget https://github.com/coreos/flannel/relea

Docker 集群环境实现方式

Docker 集群环境实现的新方式 近几年来,Docker 作为一个开源的应用容器引擎,深受广大开发者的欢迎.随着 Docker 生态圈的不断建设,应用领域越来越广.云计算,大数据,移动技术的快速发展,加之企业业务需求的不断变化,紧随技术更新的步伐,导致企业架构要随时更改以适合业务需求.当前,越来越多的公司都已将以 Docker 为代表的容器技术用于企业级业务平台,比如:腾讯,京东,美团,新浪,阿里巴巴等互联网公司.数据的安全.Docker 容器的稳定运行是众多用户关注的,这就要求我们提供一套行

Rancher集群化docker管理平台部署、特性及破坏性测试。

rancher是一个docker集群化管理平台,相对于mesos和k8s架构,rancher的部署管理非常简单方便.并且功能丰富.如下为本人绘制的逻辑架构图. 1:部署Rancher管理平台 规划: server:10.64.5.184 agent1:10.64.5.185 agent2:10.64.5.186 agent3:10.64.5.187 agent4:10.64.5.188 部署方式: docker容器启动 server端部署   依赖镜像:rancher/server:latest

Docker 集群环境实现的新方式

近几年来,Docker 作为一个开源的应用容器引擎,深受广大开发者的欢迎.随着 Docker 生态圈的不断建设,应用领域越来越广.云计算,大数据,移动技术的快速发展,加之企业业务需求的不断变化,紧随技术更新的步伐,导致企业架构要随时更改以适合业务需求.当前,越来越多的公司都已将以 Docker 为代表的容器技术用于企业级业务平台,比如:腾讯,京东,美团,新浪,阿里巴巴等互联网公司.数据的安全.Docker 容器的稳定运行是众多用户关注的,这就要求我们提供一套行之有效的管理大型容器集群的整体解决方

05 Docker集群/基础设施 - DevOps之路

05 Docker集群/基础设施 - DevOps之路 文章Github地址,欢迎start:https://github.com/li-keli/DevOps-WiKi Docker的集群目前主流的方案: Swarm Kubernetes Docker Swarm 集群 是用Swarm集群来部署一个无状态的服务: 目前有三台物理机node01.node02.node03,在node01上初始化Swarm: docker swarm init --advertise-addr 192.168.0

docker集群

Docker 版本12前无集群 版本12后有集群 --docker swarm 集成docker engine --k8s google:未来科技 编排能力:可以做service也可以允许单个容器 node: 1.manager:将任务分解给worker执行.(管理) 可以有多个,但是只会有一个leader 2.work:定期更新状态给manger来维护集群 docker service 定义在node节点上执行的任务. vi /etc/hosts 192.168.43.214 node1 19