默认情况下个电脑间的 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 生成必要的参数
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