|
本以为docker准备妥当之后,就可以直接上k8s了,结果yum install kubernetes,报错:Error: docker-ce conflicts with docker-1.9.1 ..... 这才想起来,自己的docker不是从centos官方源获取的,而是用了docker的源安装docker-ce,参见上一遍docker的部署文档。 centos官方源提供的k8s在版本1.2,配套docker 1.9,而我用的docker-ce在版本18.03,经查k8s的changelog,至少要到1.8才能支持到docker 17.03,然后到1.11,都未提到过docker 18; 但参考了较新的k8s部署教程,已经有k8s 1.10配套docker-ce 18.03的先例,可以一试;
% i8 I; z$ m% e参考了现网已有的大部分k8s部署教程,大都太流程化,不够细致; 考虑到k8s需要用最新版,flannel也就用最新版,不通过yum安装了,于是自己动手部署了flannel,把从细节收获的信息记下来,提供一个不一样的视角;
/ x& x+ F& U! E6 V----以下是正文---- 依赖 flannel依赖etcd提供配置管理;为简化,我只使用了一个单点的etcd,没有组etcd集群; 部署flannel 解压后,得到一个二进制文件flanneld,一个脚本mk-docker-opts.sh,以及一个README.md;最后这个文件忽略就行了,其它两个放到/usr/bin下; mv flanneld /usr/binmv mk-docker-opts.sh /usr/bin $ g# V; ~3 j1 B- l i, Q
flanneld服务配置 添加systemd的service管理文件: [backcolor=rgb(245, 245, 245) !important][url=] [/url]
+ n) T& Y S- I, r# cat /usr/lib/systemd/system/ flanneld.service [Unit]Description= flannelBefore= docker.service[Service]ExecStart=/usr/bin/ flanneld[Install]WantedBy=multi- user.targetRequiredBy=docker.service [backcolor=rgb(245, 245, 245) !important][url=] [/url]
. W7 C" p2 D5 j! {+ J 3 C; O( d ^! L2 _' _2 b" E
flanneld环境变量配置 # cat /etc/systemd/system/flanneld.service.d/flannel.conf [Service]Environment="FLANNELD_ETCD_ENDPOINTS=http://xxxx:2379"Environment="FLANNELD_ETCD_PREFIX=/flannel/network"
Y- s q" M/ b5 E启动flanneld查看环境变量是否生效,然后启动flanneld: systemctl daemon-reloadsystemctl show flanneld --property Environment
: ?& E, l, K- a* U' E+ C& N8 u \$ d7 V8 F2 H
systemctl start flanneld & a# L4 x4 r# i7 S# v4 o
查看启动日志: systemctl status flanneld -l ' h. R7 D6 H# j8 b
发现报错了:Couldn't fetch network config: 100: Key not found 想起来etcd里还没写入网络配置信息呢; flanneld网络配置 docker默认用172.17.0.0/16这个段,我想换个段,以明确知道是在使用flanneld提供的网络,于是就用了172.10.0.0/16 etcdctl mk /flannel/network/config '{"Network":"172.10.0.0/16", "SubnetMin": "172.10.1.0", "SubnetMax": "172.10.254.0"}'
! u2 V' _5 L8 Y4 d) x因为flannel一直在尝试从etcd读配置信息,所以不需要重启flanneld,再看启动日志,flanneld已经获取到想要的子网地址了; 此时,在/run/flannel/subnet.env位置会生成这个host所分配到的子网信息: # cat /run/flannel/subnet.envFLANNEL_NETWORK=172.10.0.0/16FLANNEL_SUBNET=172.10.63.1/24FLANNEL_MTU=1472FLANNEL_IPMASQ=false
8 a( g9 {6 K$ t' N% N. A' M: X而这个文件正是mk-docker-opts.sh脚本的输入文件: # /usr/bin/mk-docker-opts.sh -c# cat /run/docker_opts.env DOCKER_OPTS=" --bip=172.10.63.1/24 --ip-masq=true --mtu=1472" " }; ~. T8 J/ _( t
这时看一下etcd,多了一条信息: # etcdctl get /flannel/network/subnets/172.10.63.0-24{"PublicIP":"xxxxxx"}
" s2 f5 H# q3 E& \$ n, a* Q看一下主机网卡 # ip a |grep flannel146: flannel0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1472 qdisc pfifo_fast state UNKNOWN qlen 500
! F" A$ M3 V, x看一下网卡详情 # ip -d link show dev flannel0147: flannel0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1472 qdisc pfifo_fast state UNKNOWN mode DEFAULT qlen 500 link/none promiscuity 0 tun
% ^. q: x, ~, K* m3 @flanneld vxlan网络配置推荐Kernel 3.9以上的主机启用vxlan网络(来源记不清了),CentOS7的内核已经到3.10,可以支持; 修改网络配置: etcdctl set /flannel/network/config '{"Network":"172.10.0.0/16", "SubnetMin": "172.10.1.0", "SubnetMax": "172.10.254.0", "Backend": {"Type": "vxlan"}}' ( T5 v/ u% |( Z, A7 F
重启flanneld: systemctl restart flanneld
3 @" j) k% `0 [ C# r A查看启动日志,已经能看到在使用vxlan backend了; 看一下/run/flannel/subnet.env文件,发现子网没变,但是MTU变了: # cat /run/flannel/subnet.env FLANNEL_NETWORK=172.10.0.0/16FLANNEL_SUBNET=172.10.63.1/24FLANNEL_MTU=1450FLANNEL_IPMASQ=false ; l$ _4 H' W. Q l6 V; V
再看一下etcd # etcdctl get /flannel/network/subnets/172.10.63.0-24{"PublicIP":"xxxx","BackendType":"vxlan","BackendData":{"VtepMAC":"e2:73:8e:db:83:56"}} 3 E% n% r4 ]5 v7 c3 V
再看一下主机网卡 # ip a|grep flannel145: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN
4 `, p$ d( U. Q0 Q9 k4 N0 o7 e再看一下网卡详情 # ip -d link show dev flannel.1145: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN mode DEFAULT link/ether e2:73:8e:db:83:56 brd ff:ff:ff:ff:ff:ff promiscuity 0 vxlan id 1 local 10.10.10.127 dev bond0 srcport 32768 65000 dstport 8472 nolearning ageing 300
0 E. F* C' a) a; N0 ]/ h3 _Docker使用flannel网络再重新生成一次docker_opts.env: # /usr/bin/mk-docker-opts.sh -c# cat /run/docker_opts.env DOCKER_OPTS=" --bip=172.10.63.1/24 --ip-masq=true --mtu=1450"
8 S1 p6 P9 h' f! O1 Y修改/lib/systemd/system/docker.service: EnvironmentFile=/run/docker_opts.env # 新加ExecStart=/usr/bin/dockerd $DOCKER_OPTS
* h9 ?6 O( Q3 K# u( t. z& i重启docker服务: systemctl daemon-reloadsystemctl restart docker 9 \& f" f7 s( x' v! r7 m4 n
查看bridge网络的信息: # docker network ls |grep bridged5ad3f19dc63 bridge bridge local# docker network inspect d5ad3f19dc63 | grep Subnet "Subnet": "172.10.63.1/24",
& d8 [+ X p; V9 |* Y. J/ c: h这就已经是在flannel提供的网段内了; 测试然后在另一台主机上也照做一遍,分别启动一个container,互ping一下,测试通过; |