zoukankan      html  css  js  c++  java
  • 9 安装flannel

    k8s设计了网络模型,但却将他的实现交给了网络插件,CNI网络插件最主要的功能
    就是实现POD资源能够跨主机进行通信

    最常见的CNI网络插件:
    Flannel、Calico、Cancl、OpenContrail、NSX-T、Kube-router

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


    长传安装包

    [root@rstx-203 ~]# cd /opt/src/
    [root@rstx-203 src]# ls
    flannel-v0.12.0-linux-amd64.tar.gz
    
    [root@rstx-203 src]# mkdir /opt/flannel-v0.12.0
    
    [root@rstx-203 src]# tar xf flannel-v0.12.0-linux-amd64.tar.gz -C /opt/flannel-v0.12.0/
    

    创建软链接

    [root@rstx-203 src]# ln -s /opt/flannel-v0.12.0/ /opt/flannel
    
    [root@rstx-203 src]# cd ..
    [root@rstx-203 opt]# ll
    总用量 0
    drwx--x--x 4 root root  28 12月 17 10:52 containerd
    lrwxrwxrwx 1 root root  21 12月 18 09:48 flannel -> /opt/flannel-v0.12.0/
    drwxr-xr-x 2 root root  64 12月 18 09:47 flannel-v0.12.0
    lrwxrwxrwx 1 root root  24 12月 17 10:35 kubernetes -> /opt/kubernetes-v1.15.2/
    drwxr-xr-x 4 root root  50 12月 17 10:35 kubernetes-v1.15.2
    drwxr-xr-x 2 root root 100 12月 18 09:46 src
    

    拷贝证书

    [root@rstx-203 opt]# cd flannel
    [root@rstx-203 flannel]# mkdir certs
    [root@rstx-203 flannel]# cd certs/
    
    [root@rstx-203 certs]# scp rstx-203.host.com:/opt/certs/ca.pem .
    [root@rstx-203 certs]# scp rstx-203.host.com:/opt/certs/client.pem . 
    [root@rstx-203 certs]# scp rstx-203.host.com:/opt/certs/client-key.pem .
    
    [root@rstx-203 certs]# cd ..
    

    [root@rstx-203 flannel]# vi subnet.env
    
    FLANNEL_NETWORK=172.7.0.0/16    #pod的网段
    FLANNEL_SUBNET=172.7.203.1/24   #本机运行pod的网段
    FLANNEL_MTU=1500
    FLANNEL_IPMASQ=false
    
    

    创建启动脚本

    [root@rstx4-203 flannel]# cat flanneld.sh 
    #!/bin/sh
    ./flanneld 
      --public-ip=192.168.1.203 
      --etcd-endpoints=https://192.168.1.202:2379,https://192.168.1.203:2379,https://192.168.1.204:2379 
      --etcd-keyfile=./certs/client-key.pem 
      --etcd-certfile=./certs/client.pem 
      --etcd-cafile=./certs/ca.pem 
      --iface=enp3s0 
      --subnet-file=./subnet.env 
      --healthz-port=2401
    
    
    
    
    ./flanneld 
      --public-ip=192.168.1.203 				# 本机IP
      --etcd-endpoints=https://192.168.1.202:2379,https://192.168.1.203:2379,https://192.168.1.204:2379 	# etcd的IP
      --etcd-keyfile=./certs/client-key.pem 
      --etcd-certsfile=./certs/client.pem 
      --etcd-cafile=./certs/ca.pem 
      --iface=enp2s0 							# 注意更改网卡名称
      --subnet-file=./subnet.env 
      --healthz-port=2401
    
    
    [root@rstx-203 flannel]# chmod +x flanneld.sh 
    
    [root@rstx-203 flannel]# mkdir -p /data/logs/flanneld
    

    操作etcd,增加host-gw模型

    [root@rstx-203 ~]# cd /opt/etcd
    
    Flannel的host-gw模型,所有node ip必须在同一个物理网关设备下才能使用
    [root@rstx-203etcd]# ./etcdctl set /coreos.com/network/config '{"Network": "172.7.0.0/16", "Backend": {"Type": "host-gw"}}'
    {"Network": "172.7.0.0/16", "Backend": {"Type": "host-gw"}}
    

    查看etcd集群

    [root@rstx-203 etcd]# ./etcdctl member list
    1221562a073d0c1a: name=etcd-server-203 peerURLs=https://192.168.1.203:2380 clientURLs=http://127.0.0.1:2379,https://192.168.1.203:2379 isLeader=true
    89fe55dc5058e687: name=etcd-server-204 peerURLs=https://192.168.1.204:2380 clientURLs=http://127.0.0.1:2379,https://192.168.1.204:2379 isLeader=false
    af26e2bc543fbfba: name=etcd-server-202 peerURLs=https://192.168.1.202:2380 clientURLs=http://127.0.0.1:2379,https://192.168.1.202:2379 isLeader=false
    

    查看flanneld网络

    [root@rstx-203 etcd]# ./etcdctl get /coreos.com/network/config
    {"Network": "172.7.0.0/16", "Backend": {"Type": "host-gw"}}
    

    [root@rstx-203 flannel]# vi /etc/supervisord.d/flannel.ini

    [program:flanneld-203]
    command=/opt/flannel/flanneld.sh                             ; the program (relative uses PATH, can take args)
    numprocs=1                                                   ; number of processes copies to start (def 1)
    directory=/opt/flannel                                       ; directory to cwd to before exec (def no cwd)
    autostart=true                                               ; start at supervisord start (default: true)
    autorestart=true                                             ; retstart at unexpected quit (default: true)
    startsecs=30                                                 ; number of secs prog must stay running (def. 1)
    startretries=3                                               ; max # of serial start failures (default 3)
    exitcodes=0,2                                                ; 'expected' exit codes for process (default 0,2)
    stopsignal=QUIT                                              ; signal used to kill process (default TERM)
    stopwaitsecs=10                                              ; max num secs to wait b4 SIGKILL (default 10)
    user=root                                                    ; setuid to this UNIX account to run the program
    redirect_stderr=true                                         ; redirect proc stderr to stdout (default false)
    stdout_logfile=/data/logs/flanneld/flanneld.stdout.log       ; stderr log path, NONE for none; default AUTO
    stdout_logfile_maxbytes=64MB                                 ; max # logfile bytes b4 rotation (default 50MB)
    stdout_logfile_backups=4                                     ; # of stdout logfile backups (default 10)
    stdout_capture_maxbytes=1MB                                  ; number of bytes in 'capturemode' (default 0)
    stdout_events_enabled=false                                  ; emit events on stdout writes (default false)
    killasgroup=true
    stopasgroup=true
    
    [root@rstx-203 flannel]# supervisorctl update
    flanneld-7-121: added process group
    [root@rstx-203 flannel]# supervisorctl status
    flanneld-7-121                    RUNNING   pid 9463, uptime 0:00:54
    kube-kubelet-7-121                RUNNING   pid 6683, uptime 18:24:51
    kube-proxy-7-121                  RUNNING   pid 32574, uptime 17:50:07
    
    

    详解flanneld工作原理

    [root@rstx-203 etcd]# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
    169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
    172.7.67.0      192.168.1.204   255.255.255.0   UG    0      0        0 eth0
    172.7.203.0     0.0.0.0         255.255.255.0   U     0      0        0 docker0
    192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
    

    flannel原理就是:给宿主机添加一个静态路由,到达pod ip

    Flannel的host-gw模型,所有node ip必须在同一个物理网管设备下才能使用


    flannel的其他网络模型

    Vxlan模型
    '{"Network": "172.7.0.0/16", "Backend": {"Type": "VxLAN"}}'
    [root@hdss7-14 etcd]# ./etcdctl set /coreos.com/network/config '{"Network": "172.7.0.0/16", "Backend": {"Type": "VxLAN"}}'

    直接路由模型
    '{"Network": "172.7.0.0/16", "Backend": {"Type": "VxLAN","Directrouting": true}}'

    更改flanneld的网络模型

    [root@rstx-203 flannel]# supervisorctl stop flanneld-7-11
    [root@rstx-203 flannel]# ps aux | grep flanneld 
    [root@rstx-203 flannel]# kill 
    

    删除路由

    [root@rstx-203 flannel]# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         192.168.16.1    0.0.0.0         UG    100    0        0 enp2s0
    172.7.11.0      192.168.16.11   255.255.255.0   UG    0      0        0 enp2s0
    172.7.12.0      0.0.0.0         255.255.255.0   U     0      0        0 docker0
    172.7.13.0      192.168.16.13   255.255.255.0   UG    0      0        0 enp2s0
    172.7.14.0      192.168.16.14   255.255.255.0   UG    0      0        0 enp2s0
    172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-7957b5310092
    192.168.16.0    0.0.0.0         255.255.255.0   U     100    0        0 enp2s0
    
    [root@rstx-203 flannel]# route del -net 172.7.12.0/24 gw 192.168.16.12
    [root@rstx-203 flannel]# route del -net 172.7.11.0/24 gw 192.168.16.11
    
    [root@rstx-203 flannel]# ./etcdctl rm /coreos.com/network/config
    
    [root@rstx-203 etcd]# ./etcdctl set /coreos.com/network/config '{"Network": "172.7.0.0/16", "Backend": {"Type": "VxLAN"}}'
    
    [root@rstx-203 flannel]# supervisorctl start flanneld-7-11
    
    

    直接路由模型 -- 当node不在同一个物理网关下,走vxaln模型,在同一个网关下,走host-gw模型
    '{"Network": "172.7.0.0/16", "Backend": {"Type": "VxLAN","Directrouting": true}}'
    

    iptables优化

    所有节点运行 -- 不优化的话,iptables会占有大量的资源

    ~]# yum install iptables-services -y
    
    ~]# systemctl start iptables 
    
    ~]# systemctl enable iptables 
    
    ~]# iptables-save | grep -i postrouting
    
    # 此条命令。重启docker会自动添加上,需要写个脚本,每次开机自动自动运行
    ~]# iptables -t nat -D POSTROUTING -s 172.7.203.0/24 ! -o docker0 -j MASQUERADE		# 删除172.7.203.0/24 为此主机上运行的pod网段
    
    ~]# iptables -t nat -I POSTROUTING -s 172.7.203.0/24 ! -d 172.7.0.0/16 ! -o docker0 -j MASQUERADE	# 添加172.7.203.0/24 为此主机上运行的pod网段
    
    ~]# iptables-save |grep -i postrouting
    
    ~]# iptables-save > /etc/sysconfig/iptables
    

    192.168.1.203主机上,来源是172.7.203.0/24段的docker的ip,目标ip不是172.7.0.0/16段,网络发包不从docker0桥设备上出站的,才进行SNAT转换,pod之间看到的是真实的pod ip

    删除 filter表上的两个规则

    [root@rstx-203 ~]# iptables-save | grep -i reject
    
    [root@rstx-203 ~]# iptables -t filter -D INPUT -j REJECT --reject-with icmp-host-prohibited
    [root@rstx-203 ~]# iptables -t filter -D FORWARD -j REJECT --reject-with icmp-host-prohibited
    
    ~]# iptables-save > /etc/sysconfig/iptables
    
    [root@rstx-203 ~]# service iptables save
    
  • 相关阅读:
    冲刺第二阶段第十天
    冲刺第二阶段第九天
    冲刺第二阶段第八天
    冲刺第二阶段第七天
    第十三周学习进度条
    冲刺第二阶段第六天
    第二冲刺阶段绩效评估
    Beta版总结会议
    Alpha版总结会议
    第二次冲刺阶段站立会议(十)
  • 原文地址:https://www.cnblogs.com/yangtao416/p/13359734.html
Copyright © 2011-2022 走看看