zoukankan      html  css  js  c++  java
  • Kubernets二进制安装(13)之部署Flannel

    Flannel简介

    ​ Flannel是CoreDNS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。但在默认的Docker配置中,每个Node的Docker服务会分别负责所在节点容器的IP分配。Node内部的容器之间可以互相访问,但是不能跨主机(Node)网络相互间是不能直接通信的。Flannel设计目的就是为集群中所有节点重新规划IP地址的使用规则,从而使得在不同的节点上的容器能够获得“同属一个内网”且“不重复的”IP地址,并让属于不同节点上的容器能够直接通过内网IP通信。

    ​ Flannel使用etcd存储配置数据和子网分配信息。Flannel启动之后,后台进程首先检索配置和正在使用的子网列表,然后选择一个可用的子网,然后尝试去注册它。etcd也存储了每个主机对应的IP地址。flannel使用etcd的watch机制监视/coreos.com/network/subnets下面所有元素的变化信息,并且根据它来维护一个路由表。为了提高性能,flannel优化了Unversal TAP/TUN设备,对TUN和UDP之间的IP分片做了代理

    Flannel原理图如下:

    1587902639351

    上图Flannel的工作原理解释如下:

    1.数据从源容器中发出后,经由所在主机的docker0虚拟网卡转发到flannel0虚拟网卡,这是一个p2p的虚拟网卡,flanneld服务监听在网卡的另外一端
    2.Flannel通过etcd服务维护了一张节点间的路由表,此张表里保存了各个节点主机的子网的网段信息
    3.源主机的flanneld服务将原本的数据内容UDP封装后根据自己的路由表投递给目的节点的flanneld服务,数据到达后被解包,然后会直接进入到目的节点的flannel0虚拟网卡,然后被发到目的主机的docker0虚拟网卡,最后就像本机容器通信一样的由docker0路由到达目标容器
    

    除了UDP,Flannel还支持很多其它的Backend,但是不支持运行时修改Backend

    部分Backend如下:

    Backend 说明
    udp 使用用户态udp封闭,默认使用8285端口。由于是在用户态封装和解包,性能上有较大的损失,建议只用于debug,如果网卡支持enable upd offload,直接由网卡进行拆包解包,性能还是很好的
    vxlan vxlan封装,需要配置VNI,Port(默认8472)和GBP,性能损耗大概在20%-30%
    host-gw 直接路由方式,将容器网络的路由信息直接更新到主机的路由表中,仅适用于二层直接可达的网络,因此只适用于小集群,性能损耗大概为10%
    aws-vpc 使用Amazon VPC route table创建路由,适用于AWS上运行的容器
    gce 使用Google Compute Engine Network创建路由,所有instance需要开启IP forwarding,适用于GCE上运行的容器
    ali-vpc 使用阿里云VPC route table创建路由,适用于阿里云上运行的容器

    官方推荐使用的Backend:VXLAN host-gw UDP

    实验性的Backend,不建议上生产:AliVPC Alloc AWS VPC GCE IPIP IPSec

    Flannel二进制安装

    1.集群规划

    主机名 角色 IP地址
    mfyxw30.mfyxw.com flannel 192.168.80.30
    mfyxw40.mfyxw.com flannel 192.168.80.40

    2.下载flannel

    flannel链接:https://github.com/coreos/flannel

    flannelv0.11.0下载地址:https://github.com/coreos/flannel/releases/download/v0.11.0/flannel-v0.11.0-linux-amd64.tar.gz

    flannelv0.12.0下载地址:https://github.com/coreos/flannel/releases/download/v0.12.0/flannel-v0.12.0-linux-amd64.tar.gz

    可以在mfyxw40或mfyxw30主机上使用wget来下载,也可以在宿主机上通过迅雷或其它工具下载好再上传到服务器

    #在mfyxw30.mfyxw.com主机上执行
    [root@mfyxw30 ~]# wget https://github.com/coreos/flannel/releases/download/v0.11.0/flannel-v0.11.0-linux-amd64.tar.gz
    
    #在mfyxw40.mfyxw.com主机上执行
    [root@mfyxw40 ~]# wget https://github.com/coreos/flannel/releases/download/v0.11.0/flannel-v0.11.0-linux-amd64.tar.gz
    

    1587961298328

    3.解压flannel并创建软链接

    #在mfyxw30.mfyxw.com主机上执行
    [root@mfyxw30 ~]# mkdir -p /opt/flannel-v0.12.0
    [root@mfyxw30 ~]# tar xf flannel-v0.12.0-linux-amd64.tar.gz -C /opt/flanneld-v0.12.0/
    [root@mfyxw30 ~]# ln -s /opt/flanneld-v0.12.0 /opt/flanneld
    
    #在mfyxw40.mfyxw.com主机上执行
    [root@mfyxw40 ~]# mkdir -p /opt/flannel-v0.12.0
    [root@mfyxw40 ~]# tar xf flannel-v0.12.0-linux-amd64.tar.gz -C /opt/flanneld-v0.12.0/
    [root@mfyxw40 ~]# ln -s /opt/flanneld-v0.12.0 /opt/flanneld
    

    1587961840853

    4.复制证书文件

    分别在mfyxw30和mfyxw40主机上/opt/flanneld/目录下创建cert目录,以mfyxw30为例

    [root@mfyxw30 ~]# mkdir -p /opt/flanneld/cert
    [root@mfyxw30 ~]# cd /opt/flanneld/cert
    [root@mfyxw30 cert]# scp -r root@mfyxw50:/opt/certs/ca.pem .
    [root@mfyxw30 cert]# scp -r root@mfyxw50:/opt/certs/client.pem .
    [root@mfyxw30 cert]# scp -r root@mfyxw50:/opt/certs/client-key.pem .
    

    在mfyxw40主机复制证书到/opt/flanneld/cert目录中

    [root@mfyxw40 ~]# mkdir -p /opt/flanneld/cert
    [root@mfyxw40 ~]# cd /opt/flanneld/cert
    [root@mfyxw40 cert]# scp -r root@mfyxw50:/opt/certs/ca.pem .
    [root@mfyxw40 cert]# scp -r root@mfyxw50:/opt/certs/client.pem .
    [root@mfyxw40 cert]# scp -r root@mfyxw50:/opt/certs/client-key.pem .
    

    1587962461711

    5.配置subnet.env文件

    Flannel会将本机的subnet信息对应的环境变量注入到该文件中,Flannel真正是从这里获取subnet信息的

    在mfyxw30.mfyxw.com主机上添加flannel的subnet.env文件

    [root@mfyxw30 ~]# cat > /opt/flanneld/subnet.env << EOF
    FLANNEL_NETWORK=10.10.0.0/16
    FLANNEL_SUBNET=10.10.30.1/24
    FLANNEL_MTU=1500
    FLANNEL_IPMASQ=false
    EOF
    

    1587963113184

    在mfyxw40.mfyxw.com主机上添加flannel的subnet.env文件

    [root@mfyxw40 ~]# cat > /opt/flanneld/subnet.env << EOF
    FLANNEL_NETWORK=10.10.0.0/16
    FLANNEL_SUBNET=10.10.40.1/24
    FLANNEL_MTU=1500
    FLANNEL_IPMASQ=false
    EOF
    

    1587963160076

    6.为flanneld提供启动脚本

    在mfyxw30.mfyxw.com主机上为flanneld创建启动脚本文件/opt/flanneld/flannel.sh

    [root@mfyxw30 ~]# cat > /opt/flanneld/flannel.sh << EOF
    #!/bin/sh
    ./flanneld \
      --public-ip=192.168.80.30 \
      --etcd-endpoints=https://192.168.80.20:2379,https://192.168.80.30:2379,https://192.168.80.40:2379 \
      --etcd-keyfile=/opt/flanneld/cert/client-key.pem \
      --etcd-certfile=/opt/flanneld/cert/client.pem \
      --etcd-cafile=/opt/flanneld/cert/ca.pem \
      --iface=ens33 \
      --subnet-file=/opt/flanneld/subnet.env \
      --healthz-port=2401
    EOF
    

    1587963628365

    在mfyxw40.mfyxw.com主机上为flanneld创建启动脚本文件/opt/flanneld/flannel.sh

    [root@mfyxw40 ~]# cat > /opt/flanneld/flannel.sh << EOF
    #!/bin/sh
    ./flanneld \
      --public-ip=192.168.80.40 \
      --etcd-endpoints=https://192.168.80.20:2379,https://192.168.80.30:2379,https://192.168.80.40:2379 \
      --etcd-keyfile=/opt/flanneld/cert/client-key.pem \
      --etcd-certfile=/opt/flanneld/cert/client.pem \
      --etcd-cafile=/opt/flanneld/cert/ca.pem \
      --iface=ens33 \
      --subnet-file=/opt/flanneld/subnet.env \
      --healthz-port=2401
    EOF
    

    1587963704243

    7.为flannel.sh脚本赋予可执行权限

    分别在mfyxw30和mfyxw40主机上执行如下命令,以mfyxw30为例

    [root@mfyxw30 ~]# chmod +x /opt/flanneld/flannel.sh
    

    8.操作etcd,增加host-gw

    在安装了etcd的主机(mfyxw20,mfyxw30,mfyxw40)中的任意一台上执行如下命令,以mfyxw30主机为例查看etcd主运行在哪台主机上

    [root@mfyxw30 ~]# cd /opt/etcd
    [root@mfyxw30 ~]# ./etcdctl member list                  
    

    1587964132901

    登录到etcd主的主机mfyxw20上执行如下命令

    [root@mfyxw20 ~]# ./etcdctl set /coreos.com/network/config '{"Network": "10.10.0.0/16", "Backend": {"Type": "host-gw"}}'
    

    1587964328523

    温馨提示:

    Network:用于指定Flanneld地址池

    Backend:用于指定数据包以什么方式转发,默认为udp模式,host-gw模式最好,但不能跨宿主机网络

    9.为flanneld创建supervisor配置文件

    在mfyxw30.mfyxw.com主机上创建supervisor配置文件

    [root@mfyxw30 ~]# cat > /etc/supervisord.d/flanneld.ini << EOF
    [program:flanneld-80-30]
    command=/opt/flanneld/flannel.sh
    numprocs=1
    directory=/opt/flanneld
    autostart=true
    autorestart=true
    startsecs=30
    startretries=3
    exitcodes=0,2
    stopsignal=QUIT
    stopwaitsecs=10
    user=root
    redirect_stderr=true
    stdout_logfile=/data/logs/flanneld/flanneld.stdout.log
    stdout_logfile_maxbytes=64MB
    stdout_logfile_backups=4
    stdout_capture_maxbytes=1MB
    stdout_events_enabled=false
    EOF
    

    1587965018648

    在mfyxw40.mfyxw.com主机上创建supervisor配置文件

    [root@mfyxw40 ~]# cat > /etc/supervisord.d/flanneld.ini << EOF
    [program:flanneld-80-40]
    command=/opt/flanneld/flannel.sh
    numprocs=1
    directory=/opt/flanneld
    autostart=true
    autorestart=true
    startsecs=30
    startretries=3
    exitcodes=0,2
    stopsignal=QUIT
    stopwaitsecs=10
    user=root
    redirect_stderr=true
    stdout_logfile=/data/logs/flanneld/flanneld.stdout.log
    stdout_logfile_maxbytes=64MB
    stdout_logfile_backups=4
    stdout_capture_maxbytes=1MB
    stdout_events_enabled=false 
    EOF
    

    1587965050492

    10.创建日志文件目录

    分别在mfyxw30和mfyxw40上机上创建flannel的日志文件目录

    在mfyxw30主机上执行
    [root@mfyxw30 ~]# mkdir -p /data/logs/flanneld
    
    在mfyxw40主机上执行
    [root@mfyxw40 ~]# mkdir -p /data/logs/flanneld
    

    11.启动服务并检查

    在mfyxw30主机上执行

    [root@mfyxw30 ~]# supervisorctl update
    [root@mfyxw30 ~]# supervisorctl status
    

    1587965116310

    在mfyxw40主机上执行

    [root@mfyxw40 ~]# supervisorctl update
    [root@mfyxw40 ~]# supervisorctl status
    

    1587965474480

  • 相关阅读:
    iOS7——UIControlEventTouchDown延迟响应问题
    View.setTag(key,object)异常:The key must be an application-specific resource id.
    为什么阿里巴巴规定禁止超过三张表 join?
    四种常见的系统架构,目前你处于哪个阶段呢?
    JAVA BigDecimal的相加(累加)
    MyBatis中Like语句使用方式
    mybatis传参的几种方式
    英语说话方式思维和汉语说话的区别
    EXTJs前端传值的几种方式
    oracle+MyBatis批量导入sublist
  • 原文地址:https://www.cnblogs.com/Heroge/p/12849010.html
Copyright © 2011-2022 走看看