kubernetes 部署flannel

简介

默认情况下个电脑间的 docker 容器相互之间不能通信

部署了 flannel 后就可以相互通信了

 

先决条件

确保已经正确安装了

etcd     etcd 安装

docker  docker 安装 用法, 其实centos下你装了 k8s ,docker 一般都自带了

              k8s 安装 示例

 

下载并安装

https://github.com/coreos/flannel   点开 release 下载最新的

wget https://github.com/coreos/flannel/releases/download/v0.10.0/flannel-v0.10.0-linux-amd64.tar.gz

解压

tar -vxf flannel-v0.10.0-linux-amd64.tar.gz 

拷贝到运行目录

其实就是把2个文件拷贝到运行目录

sudo mv flanneld /usr/bin
sudo mv mk-docker-opts.sh  /usr/bin

 

开机启动

/lib/systemd/system/flanneld.service

[Unit]
Description=Flanneld overlay address etcd agent
After=network.target
Before=docker.service

[Service]
Type=notify
EnvironmentFile=-/etc/sysconfig/flanneld
ExecStart=/usr/bin/flanneld  -etcd-endpoints=${FLANNEL_ETCD}  \$FLANNEL_OPTIONS
Restart=on-failure

[Install]
WantedBy=multi-user.target

配置文件

/etc/sysconfig/flanneld

FLANNEL_ETCD="http://192.168.255.130:2379"
FLANNEL_ETCD_KEY="/coreos.com/network"

注意 : 把上面的 ip 换成自己电脑的

 

etcd上加入如下字段

ETCDCTL_API=2 etcdctl set /coreos.com/network/config '{"network":"10.0.0.1/16"}'

 

docker 应该是已经启动的,我们需要把它关了

systemctl stop docker

 

然后启动 flannel

systemctl start flanneld

正常的话,应该就可以启动了。如果失败,建议 直接运行

类似下面这样。然后看看日志输出 解决相关问题。

systemctl status flanneld 的错误日志 不清不楚,不好定位问题

flanneld -etcd-endpoints="http://192.168.255.130:2379"

 

我启动后没有成功,systemctl status flanneld 提示如下

systemctl status flanneld
● flanneld.service - Flanneld overlay address etcd agent
   Loaded: loaded (/usr/lib/systemd/system/flanneld.service; disabled; vendor preset: disabled)
   Active: activating (start) since Thu 2019-01-10 20:39:20 CST; 43s ago
 Main PID: 54929 (flanneld)
    Tasks: 15
   Memory: 29.2M
   CGroup: /system.slice/flanneld.service
           └─54929 /usr/bin/flanneld -etcd-endpoints=http://192.168.254.158:2379 \$FLANNEL_OPTIONS

Jan 10 20:39:59 wjs flanneld[54929]: timed out
Jan 10 20:39:59 wjs flanneld[54929]: E0110 20:39:59.312410   54929 main.go:349] Couldn't fetch net...used
Jan 10 20:40:00 wjs flanneld[54929]: timed out
Jan 10 20:40:00 wjs flanneld[54929]: E0110 20:40:00.313829   54929 main.go:349] Couldn't fetch net...used

 应该是 没能连上etcd,查看后发现  etcd 开启的侦听ip地址有问题,应该要 0.0.0.0 才行

netstat -tln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.0.1:10249         0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:2379          0.0.0.0:*               LISTEN     

修改 etcd.service 配置文件,问题解决。 详细配置请参考 etcd 安装

修改后 如果 etcd 启动不成功。 试试把 /var/lib/etcd/ 目录下的内容清空

 

重启docker

为docker 生成必要的参数

mk-docker-opts.sh -i

编辑 /lib/systemd/system/docker.service 如下

EnvironmentFile=-/run/flannel/subnet.env
ExecStart=/usr/bin/dockerd -H unix://\
          --bip=${FLANNEL_SUBNET} \
          --mtu=${FLANNEL_MTU}

其实就是把 --bip=子网网段 和 mtu 传给docker的启动参数

systemctl start docker

如果 ip addr 显示 docker0 子网段还没改过来,可以 systemctl stop docker 后再 systemctl start docker。

也许就可以了

 

如果有k8s,通常还需要重启 kubelet

systemctl restart kubelet

 

查看结果

如下,可以看到 docker 默认分配的网段已经变成了 flannel 一样的。

/var/lib/kubelet # ip addr
5: docker0:  mtu 1472 qdisc noqueue state UP group default 
    link/ether 02:42:53:3a:39:a8 brd ff:ff:ff:ff:ff:ff
    inet 10.0.34.1/24 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:53ff:fe3a:39a8/64 scope link 
       valid_lft forever preferred_lft forever
40: flannel0:  mtu 1472 qdisc pfifo_fast state UNKNOWN group default qlen 500
    link/none 
    inet 10.0.34.0/16 scope global flannel0
       valid_lft forever preferred_lft forever
    inet6 fe80::5264:6a18:3541:4b4f/64 scope link flags 800 
       valid_lft forever preferred_lft forever

再看看 kubectl 生成的 ip 已经都是 10.0子网下面的了 

kubectl get ep
NAME         ENDPOINTS              AGE
kubernetes   192.168.255.130:6443   11d
mysql        10.0.34.4:3306         5d
myweb        10.0.34.3:8080         5d

 

参考  《kubenetes 权威指南2》

 

附录

前面是我在centos下部署的 虚拟机 ip  192.168.255.130

现在我在ubuntu下再部署一个 flannel.  我ubuntu的ip地址是 192.168.255.129

 

scp 把 centos下的文件拷贝到我的 ubuntu 虚拟机中

scp flannel-v0.10.0-linux-amd64.tar.gz [email protected]:/home/wangjunsheng/kubernetes/flannel

 

下面这个是写给我自己看的

emacs 下打开相关文件
(opo "/sudo:localhost:/lib/systemd/system/docker.service")
(opo "/sudo:localhost:/lib/systemd/system/flanneld.service")
(opo "/sudo:localhost:/etc/sysconfig/flanneld")

flanneld 配置文件的 etcdip 不同 其余的 和 centos 下的一样

FLANNEL_ETCD="http://192.168.255.130:2379"

然后在 ubuntu 下 试试  果然可以 ping 通 centos 下docker 创建的容器

~/kubernetes $ ping 10.0.34.4
PING 10.0.34.4 (10.0.34.4) 56(84) bytes of data.
64 bytes from 10.0.34.4: icmp_seq=1 ttl=61 time=1.83 ms
64 bytes from 10.0.34.4: icmp_seq=2 ttl=61 time=0.490 ms

 

你可能感兴趣的:(kubernetes)