云计算之K8S系列截取——flanneld+etcd实现docker容器网络互通
一、背景随着网络技术和硬件技术的发展,单机单应用已经很难满足现在的需求,都在搞集群化,一批机器同时提供服务,性能会更好。在这之中,容器化越来越火,当然也就需要满足集群化需求,即不同机器的docker容器可以互相访问,实现这种功能很多,例如flannel,OVS,基本路由配置等都能实现,这里只要讲解一下flannel的原理和使用方法。二、概念flannel是CoreOS提供用于解决Dok...
一、背景
随着网络技术和硬件技术的发展,单机单应用已经很难满足现在的需求,都在搞集群化,一批机器同时提供服务,性能会更好。在这之中,容器化越来越火,当然也就需要满足集群化需求,即不同机器的docker容器可以互相访问,实现这种功能很多,例如flannel,OVS,基本路由配置等都能实现,这里只要讲解一下flannel的原理和使用方法。
二、概念
flannel是CoreOS提供用于解决Dokcer集群跨主机通讯的覆盖网络工具。它的主要思路是:预先留出一个网段,每个主机使用其中一部分,然后每个容器被分配不同的ip;让所有的容器认为大家在同一个直连的网络,底层通过UDP/VxLAN
三、搭建(均使用二进制方式安装)
1. flannel需要用到etcd数据库,所以,提前把etcd安装上
1), 官网上下载指定版本的etcd二进制文件,放在/usr/bin目录下
2), 创建etcd配置文件/etc/etcd/etcd.conf文件,修改监听地址和端口
3), 创建etcd受systemctl控制的文件/usr/lib/systemd/system/etcd.service
4), 启动并开机自启,测试etcd是否健康
systemctl start etcd
systemctl enable etcd
etcdctl cluster-health
显示 healthy就代表etcd可以正常工作
2. flannel安装
1.到官网上下载指定的flannel二进制文件包,解压并拷贝到指定位置
wget https://github.com/coreos/flannel/releases/download/v0.7.0/flannel-v0.7.0-linux-amd64.tar.gz
cp flanneld mk-docker-opts.sh /usr/bin
flanneld (主要的执行文件) mk-docker-opts.sh(用于生成Docker启动参数)
2. 给flannel创建一个systemd服务
vim /usr/lib/systemd/system/flanneld.service
[Unit]
Description=flanneld overlay address etcd agent
After=network.target
Before=docker.service
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/flanneld
ExecStart=/usr/bin/flanneld -etcd-endpoints=${FLANNEL_ETCD} $FLANNEL_OPTIONS
[Install]
RequiredBy=docker.service
WantedBy=multi-user.target
3.配置flannel主配置文件/etc/sysconfig/flanneld
vim /etc/sysconfig/flanneld
# etcd的ip地址和端口
FLANNEL_ETCD="http://192.168.164.130:2379"
# 配置etcd键值对
FLANNEL_ETCD_KEY="/coreos.com/network"
4.在启动flannel之前,要在etcd中添加一条键值对
etcdctl set /coreos.com/network/config '{ "Networking": "10.1.0.0/16" }'
5.启动flannel服务
systemctl restart flanneld
6.设置docker0网桥的IP地址
mk-docker-opts.sh -i
source /run/flannel/subnet.env
7. 重启docker并设置docker0的IP地址
systemctl restart docker
ifconfig docker0 ${FLANNEL_SUBNET}
8. 查看并验证
ip a
docker0 , flannel0网段是相同的就成功了
ping 10.1.50.1 (其他机器的docker0地址) 通了,代表成功
四、注意事项
- 1. 启动顺序: etcd , flanneld , docker
- 2. etcd只需要安装在一台机器上就行,这台机器不一定要有flanneld和docker
更多推荐
所有评论(0)