|
本以为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的先例,可以一试; 3 Z. l. q/ ^, m
参考了现网已有的大部分k8s部署教程,大都太流程化,不够细致; 考虑到k8s需要用最新版,flannel也就用最新版,不通过yum安装了,于是自己动手部署了flannel,把从细节收获的信息记下来,提供一个不一样的视角; 7 ]6 s) U5 r Y9 S0 Z4 ]
----以下是正文---- 依赖 flannel依赖etcd提供配置管理;为简化,我只使用了一个单点的etcd,没有组etcd集群; 部署flannel 解压后,得到一个二进制文件flanneld,一个脚本mk-docker-opts.sh,以及一个README.md;最后这个文件忽略就行了,其它两个放到/usr/bin下; mv flanneld /usr/binmv mk-docker-opts.sh /usr/bin
# A0 }9 b6 f8 `7 a- |" @5 Bflanneld服务配置 添加systemd的service管理文件: [backcolor=rgb(245, 245, 245) !important][url=] [/url]
4 Z# H6 B8 r/ 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]
; L; _" {* |$ n5 _9 { + F( M5 V( a" y% n1 k
flanneld环境变量配置 # cat /etc/systemd/system/flanneld.service.d/flannel.conf [Service]Environment="FLANNELD_ETCD_ENDPOINTS=http://xxxx:2379"Environment="FLANNELD_ETCD_PREFIX=/flannel/network" 3 {/ ]+ }+ o Z% O+ K f' D6 u- ~, |& b
启动flanneld查看环境变量是否生效,然后启动flanneld: systemctl daemon-reloadsystemctl show flanneld --property Environment
r) Z4 Q& p- C$ _; k& F5 Y
, |+ T$ b5 O F: lsystemctl start flanneld " A+ A! Y+ _% q F( J* P( A( C
查看启动日志: systemctl status flanneld -l 7 l* k+ S" m% R0 o& h2 ^1 i0 ?1 m* q
发现报错了: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"}' / B' J+ x2 d$ J3 ~) 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 ! [& o/ h+ ^& E+ t. W0 l
而这个文件正是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" ! P2 J1 r* P' ^8 A& P
这时看一下etcd,多了一条信息: # etcdctl get /flannel/network/subnets/172.10.63.0-24{"PublicIP":"xxxxxx"} 3 v, E2 I5 c* x% M" z# x, F/ r
看一下主机网卡 # ip a |grep flannel146: flannel0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1472 qdisc pfifo_fast state UNKNOWN qlen 500
6 Y5 x8 F M" [# U" D+ _看一下网卡详情 # 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
; {. V8 `. u% C# k% J( j. Vflanneld 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"}}'
: [ U+ A+ i9 F2 p: u6 J# U/ Z重启flanneld: systemctl restart flanneld " ?! k8 k4 t! ?( C
查看启动日志,已经能看到在使用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 ' q/ A o7 I( o& I% U+ [3 F' ]4 Z
再看一下etcd # etcdctl get /flannel/network/subnets/172.10.63.0-24{"PublicIP":"xxxx","BackendType":"vxlan","BackendData":{"VtepMAC":"e2:73:8e:db:83:56"}} , p* W' Y; O: k2 \* J# G
再看一下主机网卡 # ip a|grep flannel145: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN / @" T A/ Y( F' B5 D" [% B( j
再看一下网卡详情 # 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
% r& F" x, J% L4 s1 i tDocker使用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" ' A0 y" S. Z* n( }" |: ^' O' U- _
修改/lib/systemd/system/docker.service: EnvironmentFile=/run/docker_opts.env # 新加ExecStart=/usr/bin/dockerd $DOCKER_OPTS , M' l& B4 A% M4 _# K
重启docker服务: systemctl daemon-reloadsystemctl restart docker
' g+ J' r+ T* H# F, U; e- R查看bridge网络的信息: # docker network ls |grep bridged5ad3f19dc63 bridge bridge local# docker network inspect d5ad3f19dc63 | grep Subnet "Subnet": "172.10.63.1/24", / `( Z! i; v: t. O- d
这就已经是在flannel提供的网段内了; 测试然后在另一台主机上也照做一遍,分别启动一个container,互ping一下,测试通过; |