美文网首页kubernetes本地部署
5.1 Flannel部署及维护

5.1 Flannel部署及维护

作者: 一瓶多先生 | 来源:发表于2020-11-09 16:46 被阅读0次

    目录

    kubernetes 要求集群内各节点(包括 master 节点)能通过 Pod 网段互联互通。flannel 使用 vxlan 技术为各节点创建一个可以互通的 Pod 网络,使用的端口为 UDP 8472。

    flanneld 第一次启动时,从 etcd 获取配置的 Pod 网段信息,为本节点分配一个未使用的地址段,然后创建 flannedl.1 网络接口。

    flannel 将分配给自己的 Pod 网段信息写入 /run/flannel/docker 文件,docker 后续使用这个文件中的环境变量设置 docker0 网桥,从而从这个地址段为本节点的所有 Pod 容器分配 IP。

    注意: flanneld 与 docker 结合使用;

    01.下载和分发 flanneld 二进制文件

    mkdir -p /srv/kubernetes/cni/bin/flannel
    mkdir -p /srv/kubernetes/cni/net.d
    wget https://github.com/coreos/flannel/releases/download/v0.12.0/flannel-v0.12.0-linux-amd64.tar.gz
    tar -xzvf flannel-v0.11.0-linux-amd64.tar.gz -C bin/flannel
    

    02.向 etcd 写入集群 Pod 网段信息

    写入的 Pod 网段 ${CLUSTER_CIDR} 地址段(如 /16)必须小于 SubnetLen,必须与 kube-controller-manager 的 --cluster-cidr 参数值一致;

    etcd 使用ETCDCTL_API=2, 并确定etcd集群支持V2版本的api

    $ ETCDCTL_API=2
    
    $ alias etcdctl2="ETCDCTL_API=2 && /srv/kubernetes/bin/etcdctl --endpoints=https://10.40.58.153:2379,https://10.40.58.154:2379,https://10.40.61.116:2379  --cert-file=/srv/kubernetes/pki/etcd.pem --key-file=/srv/kubernetes/pki/etcd-key.pem  --ca-file /srv/kubernetes/pki/ca.pem"
    
    $ etcdctl2 mkdir /coreos.com/network
    
    $ etcdctl2  mk /coreos.com/network/config '{"Network":"10.243.0.0/16","SubnetLen":21,"Backend":{"Type":"vxlan"}}'
    
    $ etcdctl2 get /coreos.com/network/config
    

    03.使用systemd管理flanneld

    export ETCD_ENDPOINTS='https://10.40.61.116:2379,https://10.40.58.153:2379,https://10.40.58.154:2379'
    
    export FLANNEL_ETCD_PREFIX='/coreos.com/network'
    
    cat > flanneld.service << EOF
    [Unit]
    Description=Flanneld overlay address etcd agent
    After=network.target
    After=network-online.target
    Wants=network-online.target
    After=etcd.service
    Before=docker.service
    
    [Service]
    Type=notify
    ExecStart=/srv/kubernetes/cni/bin/flanneld \\
      -etcd-cafile=/srv/kubernetes/pki/ca.pem \\
      -etcd-certfile=/srv/kubernetes/pki/etcd.pem \\
      -etcd-keyfile=/srv/kubernetes/pki/etcd-key.pem \\
      -etcd-endpoints=${ETCD_ENDPOINTS} \\
      -etcd-prefix=${FLANNEL_ETCD_PREFIX} \\
      -ip-masq
    ExecStartPost=/opt/k8s/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS  -d /run/flannel/docker
    Restart=always
    RestartSec=5
    StartLimitInterval=0
    
    [Install]
    WantedBy=multi-user.target
    RequiredBy=docker.service
    EOF
    

    04.启动flannel

    systemctl daemon-reload
    systemctl enable flanneld
    systemctl start flanneld
    systemctl status flanneld
    

    05.检查分配给各 flanneld 的 Pod 网段信息

    查看集群 Pod 网段(/16)

    etcdctl2 get /coreos.com/network/config
    

    输出:

    {"Network":"10.243.0.0/16","SubnetLen":21,"Backend":{"Type":"vxlan"}}
    

    查看已分配的 Pod 子网段列表(/21)

    etcdctl2 ls /coreos.com/network/subnets
    

    输出:

    /coreos.com/network/subnets/10.243.104.0-21
    /coreos.com/network/subnets/10.243.128.0-21
    /coreos.com/network/subnets/10.243.8.0-21
    

    查看某一Pod网段对应的节点IP和flannel接口地址

    etcdctl2 get /coreos.com/network/subnets/10.243.8.0-21
    

    输出:

    {"PublicIP":"10.40.58.154","BackendType":"vxlan","BackendData":> {"VtepMAC":"e6:b5:ae:55:96:f4"}}
    

    10.243.8.0/21 被分配给节点10.40.58.154;
    VtepMAC 为10.40.58.154点的 flannel.1 网卡 MAC 地址;

    06.检查节点网络

    $ ip addr show
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:16:3e:10:b5:e3 brd ff:ff:ff:ff:ff:ff
        inet 10.40.58.153/22 brd 10.40.59.255 scope global dynamic eth0
           valid_lft 313466837sec preferred_lft 313466837sec
    3: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN
        link/ether 0e:f3:ba:47:04:40 brd ff:ff:ff:ff:ff:ff
        inet 10.243.128.0/32 scope global flannel.1
           valid_lft forever preferred_lft forever
    

    flannel.1 网卡的地址为分配的 Pod 子网段的第一个 IP(.0),且是 /32 的地址;

    $ ip route show |grep flannel.1
    10.243.8.0/21 via 10.243.8.0 dev flannel.1 onlink
    10.243.104.0/21 via 10.243.104.0 dev flannel.1 onlink
    

    到其它节点 Pod 网段请求都被转发到 flannel.1 网卡;
    flanneld 根据 etcd 中子网段的信息,如 $/coreos.com/network/subnets/10.243.128.0-21 ,来决定进请求发送给哪个节点的互联 IP;

    07.检查生成子网文件

    使用systemctl命令启动flanneld后,会自动执行mk-docker-opts.sh生成如下两个文件环境变量文件:

    • /run/flannel/subnet.env
    FLANNEL_NETWORK=10.243.0.0/16
    FLANNEL_SUBNET=10.243.104.1/21
    FLANNEL_MTU=1450
    FLANNEL_IPMASQ=true
    
    • /run/flannel/docker
    DOCKER_OPT_BIP="--bip=10.243.104.1/21"
    DOCKER_OPT_IPMASQ="--ip-masq=false"
    DOCKER_OPT_MTU="--mtu=1450"
    DOCKER_OPTS=" --bip=10.243.104.1/21 --ip-masq=false --mtu=1450"
    

    Docker将会读取这两个环境变量文件作为容器启动参数。

    Q&A

    ```

    相关文章

      网友评论

        本文标题:5.1 Flannel部署及维护

        本文链接:https://www.haomeiwen.com/subject/tvfqbktx.html