前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CentOS 7安装etcd和flannel实现docker跨物理机通信

CentOS 7安装etcd和flannel实现docker跨物理机通信

作者头像
菲宇
发布2019-06-12 15:33:46
9600
发布2019-06-12 15:33:46
举报
文章被收录于专栏:菲宇菲宇

在搭建Kubernetes的环境的时候,你可能会遇到一些问题,不!你会遇到很多问题。比如,首先你要实现跨物理机的容器访问——是不同物理内的容器能够互相访问,而不是你平常所看到的乱七八糟的端口映射。方案有很多,比如OVS、flannel、socketplane什么的,下面是我搭建etcd和flannel的过程,希望对需要这样的环境的人有所帮助,少走弯路。再说一次:跨物理机的容器之间能直接访问

架构

实验的架构非常简单,三台机器,为了简化,我只设置了一台etcd,没有做集群,三台机器安装flannel和Docker。

  • 172.16.164.5 //etcd、flannel、docker
  • 172.16.164.6 //flannel、docker
  • 172.16.164.7 //flannel、docker

安装etcd

  • 172.16.164.5 etcd的安装是尤其简单的——如果你有访问外国网站的话,下载二进制直接运行就是了,在这里我设置成了一个新的集群。
    1. #也许你需要访问外国网站,github使用的是amazon的s3存储
    2. wget https://github.com/coreos/etcd/releases/download/v2.3.2/etcd-v2.3.2-linux-amd64.tar.gz
    3. tar xvf etcd-v2.3.2-linux-amd64.tar.gz
    4. cd etcd-v2.3.2-linux-amd64
    5. mv etcd* /usr/bin

    二进制的程序可以直接启动,为了方便,我们将其加入Systemd管理,并且为了以后扩展,我还设置了集群,大家可以不必添加集群设置。

    1. cat /usr/lib/systemd/system/etcd.service
    2. [Unit]
    3. Description=etcd
    4. [Service]
    5. Environment=ETCD_NAME=kubernetes
    6. Environment=ETCD_DATA_DIR=/var/lib/etcd
    7. Environment=ETCD_LISTEN_CLIENT_URLS=http://172.16.164.5:4001,http://localhost:4001
    8. Environment=ETCD_LISTEN_PEER_URLS=http://172.16.164.5:7001,http://localhost:7001
    9. Environment=ETCD_INITIAL_ADVERTISE_PEER_URLS=http://172.16.164.5:7001,http://localhost:7001
    10. Environment=ETCD_ADVERTISE_CLIENT_URLS=http://172.16.164.5:4001,http://localhost:4001
    11. Environment=ETCD_INITIAL_CLUSTER_STATE=new
    12. Environment=ETCD_INITIAL_CLUSTER_TOKEN=Kubernetes
    13. Environment=ETCD_INITIAL_CLUSTER=kubernetes=http://172.16.164.5:7001,kubernetes=http://localhost:7001
    14. ExecStart=/usr/bin/etcd
    15. [Install]
    16. WantedBy=multi-user.target

    添加后执行systemctl start etcd启动etcd,可以通过etcdctl ls /或者etcdctl mkdir /test测试etcd可用性。 添加网段 确定etcd可以使用之后,我们需要设置分配给docker网络的网段 etcdctl mk /coreos.com/network/config '{"Network":"172.17.0.0/16", "SubnetMin": "172.17.1.0", "SubnetMax": "172.17.254.0"}' 安装flannel

  • 172.16.164.5
  • 172.16.164.6
  • 172.16.164.7 三台主机都要执行 其实flannel也是和etcd一样,不用安装的,直接从官方下载二进制执行文件就可以了,当然,你也可以自己编译。
    1. wget https://github.com/coreos/flannel/releases/download/v0.5.5/flannel-0.5.5-linux-amd64.tar.gz
    2. tar xvf flannel-0.5.5-linux-amd64.tar.gz
    3. mv flannel-0.5.5-linux-amd64 /opt/flannel

    同样,我们添加一个flannel服务的System单元,简单的就可以。

    1. cat /usr/lib/systemd/system/flanneld.service
    2. [Unit]
    3. Description=flannel
    4. [Service]
    5. ExecStart=/opt/flannel/flanneld \
    6. -etcd-endpoints=http://172.16.164.5:4001
    7. [Install]
    8. WantedBy=multi-user.target

    通过systemctl start flanneld启动服务,正常情况下,你执行ip a已经可以看到flannel0桥接网卡了,etcd上执行etcdctl ls /coreos.com/network/subnets也能够看到flannel申请的网段。 修改Docker参数 要像使docker使用flannel的网络传递数据,要修改一些启动参数。

    1. cd /opt/flannel/
    2. ./mk-docker-opts.sh -i

    通过mk-docker-opts.sh --help可一直到这个脚本会生成一些docker参数,放到/run/docker_opts.env文件中,我们只需要将这些参数,加入到docker的启动参数

    1. cat /etc/sysconfig/docker | grep OPT
    2. OPTIONS='--selinux-enabled --bip=172.17.64.1/24 --ip-masq=true --mtu=1472'

Paste_Image.png 配置完毕后,便可以启动docker了。

  1. sytemctl stop docker
  2. ifconfig down docker0
  3. systemctl start docker
  4. ip a s docker0
  5. #可以看到docker0已经获取了flannel网段的地址

Paste_Image.png

最后

三台机器都配置好了之后,我们在三台机器上分别开启一个docker容器,测试它们的网络是不是通的。

  1. docker run -ti centos bash
  2. #一次查看容器IP
  3. cat /etc/hosts
  4. 172.17.97.2 334cec104721
  5. #测试连通性,都成功就OK了
  6. #到跨物理机容器
  7. ping -c 1 172.16.164.7
  8. ping -c 1 172.17.67.1
  9. #到宿主机
  10. ping -c 1 172.16.164.7
  11. #到别的物理机
  12. ping -c 1 172.16.164.6

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年08月21日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 架构
  • 安装etcd
  • 最后
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档