zoukankan      html  css  js  c++  java
  • Docker 使用Calico插件配置网络

    一、环境介绍:

    1、操作系统:CentOS 7

    2、主机结点:node1(192.168.5.251) node2(192.168.5.252) node3(192.168.5.253)

    3、软件版本:calicoctl(version v1.6.1) etcdctl(version: 3.2.15)  docker(version:17.12.0-ce)

    192.168.5.251     node1   安装docker+etcd+calicoctl
    192.168.5.252     node2   安装docker+etcd+calicoctl
    192.168.5.253     node3   安装docker+etcd+calicoctl
       
    [root@node1 ~]# cat /etc/redhat-release
    CentOS Linux release 7.5.1804 (Core)
       
    修改三个节点的主机名 (主机名最好和后面ETCD_NAME和calico的NODENAME名称起一样的名,否则最后可能会出现容器之间ping不通的现象)
    [root@node1 ~]# hostnamectl --static set-hostname node1
    [root@node1 ~]# echo "node1" > /etc/hostname
       
    [root@node2 ~]# hostnamectl --static set-hostname node2
    [root@node2 ~]# echo "node2" > /etc/hostname
       
    [root@node3 ~]# hostnamectl --static set-hostname node3
    [root@node3 ~]# echo "node3" > /etc/hostname
       
    关闭三台主机的防火墙。若开启iptables防火墙,则需要打开2380端口通信。
    [root@node1 ~]# systemctl disable firewalld.service
    [root@node1 ~]# systemctl stop firewalld.service
    [root@node1 ~]# iptables -F
    [root@node1 ~]# firewall-cmd --state
    not running
       
    在三台机器上都要设置hosts,均执行如下命令:
    [root@node1 ~]# vim /etc/hosts
    192.168.5.251     node1
    192.168.5.252     node2
    192.168.5.253     node3
       
    三台集机器上的ip转发功能打开
    [root@node1 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
    [root@node1 ~]# cat /etc/sysctl.conf
    ......
    net.ipv4.conf.all.rp_filter=1
    net.ipv4.ip_forward=1
    [root@node1 ~]# sysctl -p

    二、配置ETCD集群

    1、安装EPEL源
    http://fedoraproject.org/wiki/EPEL
    
    2、三台结点安装Etcd软件包
    [root@node1 ~]# yum install etcd -y
    
    3、三台结点配置ETCD集群模式
    [root@node1 ~]# cat /etc/etcd/etcd.conf 
    ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
    ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
    ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
    
    # 根据不同主机进行相应修改,分别为node1 node2 node3
    ETCD_NAME="node1"
    
    # 根据不同主机进行相应修改,分别为192.168.5.251 192.168.5.252 192.168.5.253
    ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.5.251:2380"
    ETCD_ADVERTISE_CLIENT_URLS="http://192.168.5.251:2379"
    
    ETCD_INITIAL_CLUSTER="node1=http://192.168.5.251:2380,node2=http://192.168.5.252:2380,node3=http://192.168.5.253:2380"
    
    3、启用Etcd服务,并测试是集群是否配置正确
    [root@node1 ~]# systemctl start etcd
    [root@node1 ~]# export ETCDCTL_API=3
    [root@node1 ~]# etcdctl member list
    24535a04231931b0, started, node3, http://192.168.5.253:2380, http://192.168.5.253:2379
    762f75df97deec48, started, node1, http://192.168.5.251:2380, http://192.168.5.251:2379
    7d53f37d27d9c631, started, node2, http://192.168.5.252:2380, http://192.168.5.252:2379

    二、 安装Docker,配置使用集群存储

    1、安装 Docker
    https://yq.aliyun.com/articles/110806
    
    
    2、配置Docker守护程序使用有群集存储
    [root@node1 ~]# cat /etc/docker/daemon.json
    
    {
      "registry-mirrors": ["https://7i5u59ls.mirror.aliyuncs.com"],
      "cluster-store": "etcd://192.168.5.251:2379"
    }
    
    3、重启Docker进程,并检查配置是否正确
    [root@node1 ~]# systemctl restart docker
    [root@node1 ~]# docker info | grep "Cluster Store"
    Cluster Store: etcd://192.168.5.251:2379

    三、配置calico基于sysinit方式启动

    1、三台主机分别添加calico-node配置文件
    [root@node1 calico]# cat /etc/calico/calico.env 
    ETCD_ENDPOINTS="http://192.168.5.251:2379,http://192.168.5.252:2379,http://192.168.5.253:2379"
    ETCD_CA_FILE=""
    ETCD_CERT_FILE=""
    ETCD_KEY_FILE=""
    # 根据不同主机进行配置,分别为node1 node2 node3
    CALICO_NODENAME="node1"
    CALICO_NO_DEFAULT_POOLS=""
    CALICO_IP="192.168.5.251"
    CALICO_IP6=""
    CALICO_AS=""
    CALICO_LIBNETWORK_ENABLED=true
    CALICO_NETWORKING_BACKEND=bird
    
    2、三台主机分别添加calico-node sysinit配置文件
    [root@node1 calico]# cat /etc/systemd/system/calico-node.service 
    [Unit]
    Description=calico-node
    After=docker.service
    Requires=docker.service
    
    [Service]
    EnvironmentFile=/etc/calico/calico.env
    ExecStartPre=-/usr/bin/docker rm -f calico-node
    ExecStart=/usr/bin/docker run --net=host --privileged 
     --name=calico-node 
     -e NODENAME=${CALICO_NODENAME} 
     -e IP=${CALICO_IP} 
     -e IP6=${CALICO_IP6} 
     -e CALICO_NETWORKING_BACKEND=${CALICO_NETWORKING_BACKEND} 
     -e AS=${CALICO_AS} 
     -e NO_DEFAULT_POOLS=${CALICO_NO_DEFAULT_POOLS} 
     -e CALICO_LIBNETWORK_ENABLED=${CALICO_LIBNETWORK_ENABLED} 
     -e ETCD_ENDPOINTS=${ETCD_ENDPOINTS} 
     -e ETCD_CA_CERT_FILE=${ETCD_CA_CERT_FILE} 
     -e ETCD_CERT_FILE=${ETCD_CERT_FILE} 
     -e ETCD_KEY_FILE=${ETCD_KEY_FILE} 
     -v /var/run/docker.sock:/var/run/docker.sock 
     -v /var/log/calico:/var/log/calico 
     -v /run/docker/plugins:/run/docker/plugins 
     -v /lib/modules:/lib/modules 
     -v /var/run/calico:/var/run/calico 
     calico/node:v2.6.1
    
    ExecStop=-/usr/bin/docker stop calico-node
    
    Restart=on-failure
    StartLimitBurst=3
    StartLimitInterval=60s
    
    [Install]
    WantedBy=multi-user.target
    
    
    3、三台主机分别启动calico-node服务
    [root@node1 calico]# systemctl daemon-reload
    [root@node1 calico]# systemctl start calico-node
    [root@node1 calico]# tail -f /var/log/messages
    ...
    Mar 11 12:23:46 node1 docker: Starting libnetwork service
    Mar 11 12:23:46 node1 docker: Calico node started successfully
    
    4、下载calicoctl二进制文件,并添加执行权限
    [root@node1 calico]# wget -O /usr/local/bin/calicoctl https://github.com/projectcalico/calicoctl/releases/download/v1.6.1/calicoctl
    [root@node1 calico]# chmod +x /usr/local/bin/calicoctl
    
    
    5、检查calico-node是否正常
    [root@node1 calico]# calicoctl node status
    Calico process is running.
    
    IPv4 BGP status
    +---------------+-------------------+-------+----------+-------------+
    | PEER ADDRESS  |     PEER TYPE     | STATE |  SINCE   |    INFO     |
    +---------------+-------------------+-------+----------+-------------+
    | 192.168.5.252 | node-to-node mesh | up    | 04:23:50 | Established |
    | 192.168.5.253 | node-to-node mesh | up    | 04:23:50 | Established |
    +---------------+-------------------+-------+----------+-------------+
    
    IPv6 BGP status
    No IPv6 peers found.
    
    [root@node1 calico]# calicoctl get node
    NAME    
    node1   
    node2   
    node3   

    三、测试calico网络

    1、创建网络
    [root@node1 ~]# docker network create --driver calico --ipam-driver calico-ipam net1
    #在任意一台主机,都可以看到新增的网络插件
    [root@node1 ~]# docker network ls
    ...
    9316f6603268        net1                calico              global
    ...
    2、在node1 node2 node3分别建立一个容器,查看IP地址
    [root@node1 ~]# docker run --net net1 --name workload-A -tid busybox
    [root@node1 ~]# docker exec -it workload-A ip addr
    ...
        inet 192.168.166.136/32 brd 192.168.166.136 scope global cali0
    ...
    
    [root@node2 ~]# docker run --net net1 --name workload-B -tid busybox
    [root@node1 ~]# docker exec -it workload-B ip addr
    ...
        inet 192.168.104.2/32 brd 192.168.104.2 scope global cali0
    ...
    
    [root@node3 ~]# docker run --net net1 --name workload-C -tid busybox
    [root@node1 ~]# docker exec -it workload-C ip addr
    ...
        inet 192.168.135.7/32 brd 192.168.135.7 scope global cali0
    ...
    
    3、在node1的容器中(workload-A),ping各结点的容器IP,测试网络是否正常
    
    / # ping 192.168.135.7
    PING 192.168.135.7 (192.168.135.7): 56 data bytes
    64 bytes from 192.168.135.7: seq=77 ttl=62 time=0.797 ms
    
    / # ping 192.168.104.2
    PING 192.168.104.2 (192.168.104.2): 56 data bytes
    64 bytes from 192.168.104.2: seq=0 ttl=62 time=56.072 ms
    
    4、查看各结点的路由表
    
    [root@node1 ~]# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         192.168.5.2     0.0.0.0         UG    100    0        0 ens33
    172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
    192.168.5.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33
    192.168.104.0   192.168.5.252   255.255.255.192 UG    0      0        0 ens33
    192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
    192.168.135.0   192.168.5.253   255.255.255.192 UG    0      0        0 ens33
    192.168.166.128 0.0.0.0         255.255.255.192 U     0      0        0 *
    192.168.166.136 0.0.0.0         255.255.255.255 UH    0      0        0 calia42c5f1e64a
    
    
    [root@node2 ~]# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         192.168.5.2     0.0.0.0         UG    100    0        0 ens33
    172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
    192.168.5.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33
    192.168.104.0   0.0.0.0         255.255.255.192 U     0      0        0 *
    192.168.104.2   0.0.0.0         255.255.255.255 UH    0      0        0 calic7493c5fa1e
    192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
    192.168.135.0   192.168.5.253   255.255.255.192 UG    0      0        0 ens33
    192.168.166.128 192.168.5.251   255.255.255.192 UG    0      0        0 ens33
    
    
    [root@node3 ~]# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         192.168.5.2     0.0.0.0         UG    100    0        0 ens33
    172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
    192.168.5.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33
    192.168.104.0   192.168.5.252   255.255.255.192 UG    0      0        0 ens33
    192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
    192.168.135.0   0.0.0.0         255.255.255.192 U     0      0        0 *
    192.168.135.7   0.0.0.0         255.255.255.255 UH    0      0        0 cali4a45031fc02
    192.168.166.128 192.168.5.251   255.255.255.192 UG    0      0        0 ens33

    参考 https://www.cnblogs.com/kevingrace/p/6864804.html?utm_source=itdadao&utm_medium=referral

            https://my.oschina.net/huangweibin/blog/1632932

    乌龟虽然跑的慢但是比兔子长寿啊
  • 相关阅读:
    POJ-1189 钉子和小球(动态规划)
    POJ-1191-棋盘分割(动态规划)
    Java实现 LeetCode 730 统计不同回文子字符串(动态规划)
    Java实现 LeetCode 730 统计不同回文子字符串(动态规划)
    Java实现 LeetCode 729 我的日程安排表 I(二叉树)
    Java实现 LeetCode 729 我的日程安排表 I(二叉树)
    Java实现 LeetCode 729 我的日程安排表 I(二叉树)
    Java实现 LeetCode 728 自除数(暴力)
    Java实现 LeetCode 728 自除数(暴力)
    Java实现 LeetCode 728 自除数(暴力)
  • 原文地址:https://www.cnblogs.com/nieqibest/p/9991411.html
Copyright © 2011-2022 走看看