软件介绍

  1. Docker版本:19.03
  2. Flannel版本:0.10

Node节点上安装docker

  1. 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
  1. 加载docker源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  1. 安装docker
yum install -y docker-ce
  1. 镜像加速
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://tmywam8k.mirror.aliyuncs.com"]
}
EOF
  1. 启动docker服务
systemctl daemon-reload
systemctl start docker

Flannel网络概念介绍

  • Vxlan网络图
    在这里插入图片描述
  • Overlay Network:
    覆盖网络,在网络基础上叠加一种虚拟网络技术模式,该网络中的主机通过虚拟链路连接起来。
  • Vxlan:
    将数据包封装到UDP中,并使用基础网络的IP/MAC作为外层报文头进行封装,然后再以太网上传输,到达目的地后由隧道端点解封装并将数据发送给目标地址。
  • Flannel:
    是Overlay网络的一种,也是将源数据包封装在另一种网络包里进行路由转发和通信。目前支持UDP,Vxlan,AWS VPC和GCE路由等数据转发方式。
    在这里插入图片描述

Flannel网络部署

  1. 写入分配的子网段到etcd,供flanneld使用(#master上)
/opt/etcd/bin/etcdctl \
--ca-file=/opt/etcd/ssl/ca.pem --cert-file=/opt/etcd/ssl/server.pem --key-file=/opt/etcd/ssl/server-key.pem \
--endpoints="https://192.168.18.10:2379,https://192.168.18.20:2379,https://192.168.18.30:2379" \
set /coreos.com/network/config '{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}'
  1. 下载二进制包(必须部署在node节点,master节点可选部署)
    https://github.com/coreos/flannel/releases
#下载:flannel-v0.10.0-linux-amd64.tar.gz
wget https://github.com/coreos/flannel/releases/download/v0.10.0/flannel-v0.10.0-linux-amd64.tar.gz
  1. 创建工作目录
mkdir -p /opt/kubernetes/{cfg,ssl,bin}
  1. 解压包,将执行文件放入目录中
tar -zxvf flannel-v0.10.0-linux-amd64.tar.gz
mv flanneld mk-docker-opts.sh /opt/kubernetes/bin/
  1. 创建flannel配置文件
cat <<EOF >/opt/kubernetes/cfg/flanneld
FLANNEL_OPTIONS="--etcd-endpoints=https://192.168.18.10:2379,https://192.168.18.20:2379,https://192.168.18.30:2379 \
-etcd-cafile=/opt/etcd/ssl/ca.pem \
-etcd-certfile=/opt/etcd/ssl/server.pem \
-etcd-keyfile=/opt/etcd/ssl/server-key.pem"
  1. 设置systemctl启动flanneld服务
cat <<EOF >/usr/lib/systemd/system/flanneld.service
[Unit]
Description=Flanneld overlay address etcd agent
After=network-online.target network.target
Before=docker.service

[Service]
Type=notify
EnvironmentFile=/opt/kubernetes/cfg/flanneld
ExecStart=/opt/kubernetes/bin/flanneld --ip-masq $FLANNEL_OPTIONS
ExecStartPost=/opt/kubernetes/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/subnet.env
Restart=on-failure

[Install]
WantedBy=multi-user.target

EOF
  1. 修改docker.service文件
vim /usr/lib/systemd/system/docker.service

在这里插入图片描述

  • 使得docker与flannel在同一网段
  1. 重新启动flanneld与docker
systemctl start flannel
systemctl daemon-reload
systemctl restart docker

在这里插入图片描述

  1. 另一台节点我们可以直接使用scp命令将配置文件直接拷到对应的目录中

部署完成的检测

  • Node1:
    docker0:172.17.36.1
    flannel:172.17.36.0
  • Node2:
    docker0:172.17.26.1
    flannel:172.17.26.0
  1. Node节点上ifconfig
    ifconfig查看flannel网络与docker在同一网段就表示完成了,如下图所示
    在这里插入图片描述
    在这里插入图片描述
  2. 不同node节点上容器的通信
#在两个node节点上都执行
docker run -it busybox
  • 用node1穿件的容器ping一下node2里docker的网关
    在这里插入图片描述
  • 两个容器之间的ping
    在这里插入图片描述
  1. etcd中查看flannel信息(master上执行)
/opt/etcd/bin/etcdctl \
--ca-file=/opt/etcd/ssl/ca.pem --cert-file=/opt/etcd/ssl/server.pem --key-file=/opt/etcd/ssl/server-key.pem \
--endpoints="https://192.168.18.10:2379,https://192.168.18.20:2379,https://192.168.18.30:2379" \
get /coreos.com/network/subnets/172.17.36.0-24

{“PublicIP”:“192.168.18.20”,“BackendType”:“vxlan”,“BackendData”:{“VtepMAC”:“96:d8:25:f6:bd:de”}}
这个子网被分配到node1节点上

/opt/etcd/bin/etcdctl \
--ca-file=/opt/etcd/ssl/ca.pem --cert-file=/opt/etcd/ssl/server.pem --key-file=/opt/etcd/ssl/server-key.pe m \
--endpoints="https://192.168.18.10:2379,https://192.168.18.20:2379,https://192.168.18.30:2379" \ 
get /coreos.com/network/subnets/172.17.26.0-24

{“PublicIP”:“192.168.18.30”,“BackendType”:“vxlan”,“BackendData”:{“VtepMAC”:“22:b9:26:63:49:06”}}
这个子网被分配到node2节点上

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐