flannel 概述

flannel 是 CoreOS 开发的容器网络解决方案。

flannel 为每个 host 分配一个 subnet,容器从此 subnet 中分配 IP,这些 IP 可以在 host 间路由,容器间无需 NAT 和 port mapping 就可以跨主机通信。

每个 subnet 都是从一个更大的 IP 池中划分的,flannel 会在每个主机上运行一个叫 flanneld 的 agent,其职责就是从池子中分配 subnet。

为了在各个主机间共享信息,flannel 用 etcd(与 consul 类似的 key-value 分布式数据库)存放网络配置、已分配的 subnet、host 的 IP 等信息。

数据包如何在主机间转发是由 backend 实现的。

flannel 提供了多种 backend,最常用的有 vxlan 和 host-gw。(其他 backend 请参考 https://github.com/coreos/flannel。)

flannel实验环境描述如图:

etcd 部署在 10.12.31.21上,host1(10.12.31.22) 和 host2(10.12.31.23) 上运行 flanneld,首先安装配置 etcd。

1)安装配置 etcd

 [root@ubuntu ~]$cat etcd_install.sh
ETCD_VER=v2.3.7
DOWNLOAD_URL=https://github.com/coreos/etcd/releases/download
curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
mkdir -p /tmp/test-etcd && tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/test-etcd --strip-components=
cp /tmp/test-etcd/etcd* /usr/local/bin/
 [root@ubuntu ~]$sh etcd_install.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
--:--:-- :: --:--:--
--:--:-- :: --:--:-- 100k
8347k 8347k 222k :: :: --:--:-- 250k
etcd-v2.3.7-linux-amd64/Documentation/
etcd-v2.3.7-linux-amd64/Documentation/runtime-configuration.md
etcd-v2.3.7-linux-amd64/Documentation/admin_guide.md
etcd-v2.3.7-linux-amd64/Documentation/tuning.md
etcd-v2.3.7-linux-amd64/Documentation/glossary.md
etcd-v2.3.7-linux-amd64/Documentation/rfc/
etcd-v2.3.7-linux-amd64/Documentation/rfc/v3api.md
etcd-v2.3.7-linux-amd64/Documentation/discovery_protocol.md
etcd-v2.3.7-linux-amd64/Documentation/errorcode.md
etcd-v2.3.7-linux-amd64/Documentation/metrics.md
etcd-v2.3.7-linux-amd64/Documentation/security.md
etcd-v2.3.7-linux-amd64/Documentation/configuration.md
etcd-v2.3.7-linux-amd64/Documentation/docker_guide.md
etcd-v2.3.7-linux-amd64/Documentation/dev/
etcd-v2.3.7-linux-amd64/Documentation/dev/release.md
etcd-v2.3.7-linux-amd64/Documentation/members_api.md
etcd-v2.3.7-linux-amd64/Documentation/auth_api.md
etcd-v2.3.7-linux-amd64/Documentation/backward_compatibility.md
etcd-v2.3.7-linux-amd64/Documentation/platforms/
etcd-v2.3.7-linux-amd64/Documentation/platforms/freebsd.md
etcd-v2.3.7-linux-amd64/Documentation/libraries-and-tools.md
etcd-v2.3.7-linux-amd64/Documentation/implementation-faq.md
etcd-v2.3.7-linux-amd64/Documentation/reporting_bugs.md
etcd-v2.3.7-linux-amd64/Documentation/upgrade_2_2.md
etcd-v2.3.7-linux-amd64/Documentation/internal-protocol-versioning.md
etcd-v2.3.7-linux-amd64/Documentation/upgrade_2_1.md
etcd-v2.3.7-linux-amd64/Documentation/faq.md
etcd-v2.3.7-linux-amd64/Documentation/api_v3.md
etcd-v2.3.7-linux-amd64/Documentation/runtime-reconf-design.md
etcd-v2.3.7-linux-amd64/Documentation/clustering.md
etcd-v2.3.7-linux-amd64/Documentation/proxy.md
etcd-v2.3.7-linux-amd64/Documentation/branch_management.md
etcd-v2.3.7-linux-amd64/Documentation/other_apis.md
etcd-v2.3.7-linux-amd64/Documentation/benchmarks/
etcd-v2.3.7-linux-amd64/Documentation/benchmarks/etcd----rc-memory-benchmarks.md
etcd-v2.3.7-linux-amd64/Documentation/benchmarks/etcd--demo-benchmarks.md
etcd-v2.3.7-linux-amd64/Documentation/benchmarks/etcd----benchmarks.md
etcd-v2.3.7-linux-amd64/Documentation/benchmarks/etcd----alpha-benchmarks.md
etcd-v2.3.7-linux-amd64/Documentation/benchmarks/etcd-storage-memory-benchmark.md
etcd-v2.3.7-linux-amd64/Documentation/benchmarks/README.md
etcd-v2.3.7-linux-amd64/Documentation/benchmarks/etcd----rc-benchmarks.md
etcd-v2.3.7-linux-amd64/Documentation/benchmarks/etcd--watch-memory-benchmark.md
etcd-v2.3.7-linux-amd64/Documentation/api.md
etcd-v2.3.7-linux-amd64/Documentation/authentication.md
etcd-v2.3.7-linux-amd64/Documentation/04_to_2_snapshot_migration.md
etcd-v2.3.7-linux-amd64/Documentation/upgrade_2_3.md
etcd-v2.3.7-linux-amd64/Documentation/production-users.md
etcd-v2.3.7-linux-amd64/README-etcdctl.md
etcd-v2.3.7-linux-amd64/etcdctl
etcd-v2.3.7-linux-amd64/etcd
etcd-v2.3.7-linux-amd64/README.md
[root@ubuntu ~]$

该脚本从 github 上下载 etcd 的可执行文件并保存到 /usr/local/bin/,启动 etcd 并打开 2379 监听端口。

etcd -listen-client-urls http://10.12.31.21:2379 -advertise-client-urls http://10.12.31.21:2379

 [root@ubuntu ~]$etcd -listen-client-urls http://10.12.31.21:2379 -advertise-client-urls http://10.12.31.21:2379
-- ::33.110359 I | etcdmain: etcd Version: 2.3.
-- ::33.110422 I | etcdmain: Git SHA: fd17c91
-- ::33.110430 I | etcdmain: Go Version: go1.6.2
-- ::33.110437 I | etcdmain: Go OS/Arch: linux/amd64
-- ::33.110444 I | etcdmain: setting maximum number of CPUs to , total number of available CPUs is
-- ::33.110451 W | etcdmain: no data-dir provided, using default data-dir ./default.etcd
-- ::33.110705 I | etcdmain: listening for peers on http://localhost:2380
-- ::33.110802 I | etcdmain: listening for peers on http://localhost:7001
-- ::33.110840 I | etcdmain: listening for client requests on http://10.12.31.21:2379
-- ::33.114237 I | etcdserver: name = default
-- ::33.114254 I | etcdserver: data dir = default.etcd
-- ::33.114259 I | etcdserver: member dir = default.etcd/member
-- ::33.114264 I | etcdserver: heartbeat = 100ms
-- ::33.114271 I | etcdserver: election = 1000ms
-- ::33.114278 I | etcdserver: snapshot count =
-- ::33.114288 I | etcdserver: advertise client URLs = http://10.12.31.21:2379
-- ::33.114297 I | etcdserver: initial advertise peer URLs = http://localhost:2380,http://localhost:7001
-- ::33.114310 I | etcdserver: initial cluster = default=http://localhost:2380,default=http://localhost:7001
-- ::33.141747 I | etcdserver: starting member ce2a822cea30bfca in cluster 7e27652122e8b2ae
-- ::33.141853 I | raft: ce2a822cea30bfca became follower at term
-- ::33.141900 I | raft: newRaft ce2a822cea30bfca [peers: [], term: , commit: , applied: , lastindex: , lastterm: ]
-- ::33.141915 I | raft: ce2a822cea30bfca became follower at term
-- ::33.142350 I | etcdserver: starting server... [version: 2.3., cluster version: to_be_decided]
-- ::33.143380 N | etcdserver: added local member ce2a822cea30bfca [http://localhost:2380 http://localhost:7001] to cluster 7e27652122e8b2ae
-- ::33.143968 E | etcdmain: failed to notify systemd for readiness: No socket
-- ::33.144218 E | etcdmain: forgot to set Type=notify in systemd service file?
-- ::33.542474 I | raft: ce2a822cea30bfca is starting a new election at term
-- ::33.542972 I | raft: ce2a822cea30bfca became candidate at term
-- ::33.543300 I | raft: ce2a822cea30bfca received vote from ce2a822cea30bfca at term
-- ::33.543575 I | raft: ce2a822cea30bfca became leader at term
-- ::33.543814 I | raft: raft.node: ce2a822cea30bfca elected leader ce2a822cea30bfca at term
-- ::33.544664 I | etcdserver: published {Name:default ClientURLs:[http://10.12.31.21:2379]} to cluster 7e27652122e8b2ae
-- ::33.544753 I | etcdserver: setting up the initial cluster version to 2.3
-- ::33.557561 N | etcdserver: set the initial cluster version to 2.3

测试 etcd 是否可用:

etcdctl --endpoints=10.12.31.21:2379 set foo "bar"

etcdctl --endpoints=10.12.31.21:2379 get foo

可以正常在 etcd 中存取数据了。

-----------------------------引用来自--------------------------------------

https://mp.weixin.qq.com/s?__biz=MzIwMTM5MjUwMg==&mid=2653587799&idx=1&sn=a26c6c4a9681997031cd346224d01822&chksm=8d30814eba47085870ac9695411bc1943ee054baeb6920094256215112f5817b7a3874388c89&scene=21#wechat_redirect

第 8 章 容器网络 - 058 - flannel 概述的更多相关文章

  1. 第 8 章 容器网络 - 061 - flannel 的连通与隔离

    flannel 的连通与隔离 测试 bbox1 和 bbxo2 的连通性: bbox1 能够 ping 到位于不同 subnet 的 bbox2,通过 traceroute 分析一下 bbox1 到 ...

  2. 第 8 章 容器网络 - 060 - 在 Docker 中使用 flannel

    在 Docker 中使用 flannel 编辑 host1 的 Docker 配置文件 /etc/systemd/system/docker.service.d/10-machine.conf 设置 ...

  3. 第 8 章 容器网络 - 072 - 一文搞懂各种 Docker 网络

    Docker 起初只提供了简单的 single-host 网络,显然这不利于 Docker 构建容器集群并通过 scale-out 方式横向扩展到多个主机上. 跨主机网络方案: Docker Over ...

  4. 第 8 章 容器网络 - 063 - 如何使用 Weave 网络?

    如何使用 Weave 网络? weave 是 Weaveworks 开发的容器网络解决方案. weave 创建的虚拟网络可以将部署在多个主机上的容器连接起来. 对容器来说,weave 就像一个巨大的以 ...

  5. 第 8 章 容器网络 - 054 - 准备 macvlan 环境

    准备 macvlan 环境 macvlan 本身是 linux kernel 模块,其功能是允许在同一个物理网卡上配置多个 MAC 地址,即多个 interface,每个 interface 可以配置 ...

  6. 第 8 章 容器网络 - 059 - 安装配置 flannel

    安装配置 flannel 1) build flannel flannel 没有现成的执行文件可用,必须自己 build,最可靠的方法是在 Docker 容器中 build. 不过用于做 build ...

  7. 第 8 章 容器网络 - 062 - 如何使用 flannel host-gw backend?

    flannel host-gw backend flannel 支持多种 backend:(1)vxlan backend:(2)host-gw: 与 vxlan 不同,host-gw 不会封装数据包 ...

  8. 第 8 章 容器网络 - 071 - 如何定制 Calico 的 IP 池?

    定制IP池 首先定义一个 IP Pool,比如: calicoctl create -f ipPool.yml 用此 IP Pool 创建 calico 网络. docker network crea ...

  9. 第 8 章 容器网络 - 070 - 如何定制 Calico 网络 Policy?

    定制 Calico 网络 Policy Calico 默认的 policy 规则是:容器只能与同一个 calico 网络中的容器通信. Calico 能够让用户定义灵活的 policy 规则,精细化控 ...

随机推荐

  1. 树莓派无显示器开启ssh的方法

    在boot根目录新建一个名为 ssh 的空文件即可. boot目录所在分区是fat32格式,可以被windows识别和操作 带有系统的tf卡(或SD卡)插入读卡器中,新建ssh文件即可,注意无后缀名

  2. request 模块详细介绍

    request 模块详细介绍 request Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装 ...

  3. Android 4.4 根据uri获取路径的方法

    当我们选择图片以后,返回的是Uri,此时我们要把路径存储到数据库,必须将其转换成String类型. URI:  //content://com.android.providers.media.docu ...

  4. 程序员编程艺术:面试和算法心得-(转 July)

    1.1 旋转字符串 题目描述 给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部,如把字符串“abcdef”前面的2个字符'a'和'b'移动到字符串的尾部,使得原字符串变成字符串“cdef ...

  5. halcon+csharp多图像拼接实现

    简单的来说,就是将 一类的图片最后拼接成为这样的结果 这个图片有点大呀. 基本步骤: 1.halcon进行仿射变化进行镜头畸变.这个可以参考halcon中一个二维码畸变的例子: 2.基于模版匹配找出偏 ...

  6. TensorFlow模型保存和加载方法

    TensorFlow模型保存和加载方法 模型保存 import tensorflow as tf w1 = tf.Variable(tf.constant(2.0, shape=[1]), name= ...

  7. Codeforces 917F Substrings in a String - 后缀自动机 - 分块 - bitset - KMP

    题目传送门 传送点I 传送点II 传送点III 题目大意 给定一个字母串,要求支持以下操作: 修改一个位置的字母 查询一段区间中,字符串$s$作为子串出现的次数 Solution 1 Bitset 每 ...

  8. SSH服务拒绝了密码

    原因一:密码错误 解决方法:修改密码 方式一:救援模式修改密码 方式二:单用户模式破解root密码 原因二: /etc/ssh/sshd_config里设置禁止root用户直接远程登录 解决方法: v ...

  9. uniGUI试用笔记(十一)

    最近研究了一下UniGUI的TuniDBGrid,记录一下免得忘记了. TuniDBGrid的重要属性包括: 1.列—TUniDBGridColumns和TUniDBGridColumn 每个列对象( ...

  10. Mysql的唯一性索引unique

    目录 唯一性索引unique影响: unique与primary key的区别: 存在唯一键冲突时,避免策略: insert ignore: replace into: insert on dupli ...