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. A writer of dictionaries,a harmless druge.

    Nine Years for A and B By Christopher Ricks Dr. Johnson was the greatest man who made a dictionary.  ...

  2. [c/c++] programming之路(11)、顺序分支

    一.模块化设计 #include<stdio.h> #include<stdlib.h> #include<windows.h> void openbaidu(){ ...

  3. Codeforces 825D Suitable Replacement - 贪心 - 二分答案

    You are given two strings s and t consisting of small Latin letters, string s can also contain '?' c ...

  4. ODAC(V9.5.15) 学习笔记(十四)TCRBatchMove

    名称 类型 说明 AbortOnKeyViol Boolean 在处理数据时,如果发生主键冲突或主键校验失败时,是否中断 AbortOnProblem Boolean 发生问题时是否中断 Change ...

  5. CSS的再一次深入(更新中···)

    全面我们学了6个选择器,今天再来学习两个选择器,分别是通配符选择器和并集选择器: 1.通配符选择器: *{ } 表示body里所有的标签都被选中 2.并集选择器: 选中的标签之间用逗号隔开,表示这几个 ...

  6. debian下如何源码安装tmux

    一.源码安装ncurses库 1.1 获取源码 wget https://invisible-island.net/datafiles/release/ncurses.tar.gz tar xvf n ...

  7. linux内核中的vgaarb是什么?

    答: vga仲裁器(vga arbiter),是内核中的一个模块

  8. tp框架中的一些疑点知识--cookie和session的配置

    不同的浏览器采用不同的方式保存Cookie. IE浏览器会在"C:\Documents and Settings\你的用户名\Cookies"文件夹下以文本文件形式保存,一个文本文 ...

  9. 题解——洛谷P4767 [IOI2000]邮局(区间DP)

    这题是一道区间DP 思维难度主要集中在如何预处理距离上 由生活经验得,邮局放在中间显然最优 所以我们可以递推求出\( w[i][j] \)表示i,j之间放一个邮局得距离 然后设出状态转移方程 设\( ...

  10. (zhuan) Attention in Neural Networks and How to Use It

    Adam Kosiorek About Attention in Neural Networks and How to Use It this blog comes from: http://akos ...