|
本以为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的先例,可以一试;
' S; M/ i- E5 v. \; }参考了现网已有的大部分k8s部署教程,大都太流程化,不够细致; 考虑到k8s需要用最新版,flannel也就用最新版,不通过yum安装了,于是自己动手部署了flannel,把从细节收获的信息记下来,提供一个不一样的视角;
3 j1 X1 ]9 c! K1 E----以下是正文---- 依赖 flannel依赖etcd提供配置管理;为简化,我只使用了一个单点的etcd,没有组etcd集群; 部署flannel 解压后,得到一个二进制文件flanneld,一个脚本mk-docker-opts.sh,以及一个README.md;最后这个文件忽略就行了,其它两个放到/usr/bin下; mv flanneld /usr/binmv mk-docker-opts.sh /usr/bin , T T `2 }( L! B1 h& C- `
flanneld服务配置 添加systemd的service管理文件: [backcolor=rgb(245, 245, 245) !important][url=] [/url]9 }" W% |# @: ]5 \$ {
# 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]+ c; o+ O: I$ {" V5 T
0 h. X& b v1 ~1 N' W; u7 \
flanneld环境变量配置 # cat /etc/systemd/system/flanneld.service.d/flannel.conf [Service]Environment="FLANNELD_ETCD_ENDPOINTS=http://xxxx:2379"Environment="FLANNELD_ETCD_PREFIX=/flannel/network" " N; N0 l, Y1 O1 z ]# Y# ^- y
启动flanneld查看环境变量是否生效,然后启动flanneld: systemctl daemon-reloadsystemctl show flanneld --property Environment& c2 z% b1 S, t, Z+ `
6 v5 C- Z. W1 \$ c2 J4 `systemctl start flanneld
. u$ i: |8 t& M2 Z# C+ f查看启动日志: systemctl status flanneld -l
" X& g$ d1 e0 h% ?- k4 s发现报错了: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"}' 2 R2 p4 T4 i3 d7 G: B" W
因为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
2 M& |3 f. E4 e而这个文件正是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"
! @! J4 G: w. M8 M0 v7 T这时看一下etcd,多了一条信息: # etcdctl get /flannel/network/subnets/172.10.63.0-24{"PublicIP":"xxxxxx"}
- L. Y* t* a3 s8 B# v看一下主机网卡 # ip a |grep flannel146: flannel0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1472 qdisc pfifo_fast state UNKNOWN qlen 500 7 ?- q. w) F# n/ Z1 {# a" c
看一下网卡详情 # 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
* @: @; e1 J% o1 Aflanneld 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"}}'
6 C* @( ]; \2 O0 k重启flanneld: systemctl restart flanneld , ~! D3 Y V$ \/ O8 s5 R4 h
查看启动日志,已经能看到在使用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 1 t2 j: x. y/ ?# n" M
再看一下etcd # etcdctl get /flannel/network/subnets/172.10.63.0-24{"PublicIP":"xxxx","BackendType":"vxlan","BackendData":{"VtepMAC":"e2:73:8e:db:83:56"}} $ U1 |& [- c; F- W
再看一下主机网卡 # ip a|grep flannel145: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN 6 P5 \: G& B$ e8 M' b7 m
再看一下网卡详情 # 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
. W1 h7 [4 k4 sDocker使用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" 1 T7 [ l% U0 e T3 ^7 p7 G
修改/lib/systemd/system/docker.service: EnvironmentFile=/run/docker_opts.env # 新加ExecStart=/usr/bin/dockerd $DOCKER_OPTS
7 j/ g4 c' V7 g% w, D- W重启docker服务: systemctl daemon-reloadsystemctl restart docker . [) T; o8 R" a! ]
查看bridge网络的信息: # docker network ls |grep bridged5ad3f19dc63 bridge bridge local# docker network inspect d5ad3f19dc63 | grep Subnet "Subnet": "172.10.63.1/24", : c. E e. F0 y* t
这就已经是在flannel提供的网段内了; 测试然后在另一台主机上也照做一遍,分别启动一个container,互ping一下,测试通过; |