上一篇了解了K8S中有许多的网络组件,Flannel是其中之一,本章节将来学习如何部署。
安装Flannel
从官方的github上可以得知,从k8s1.17之后的版本,可以通过下面命令来直接部署,但是有个前提。默认的pod网段没有被修改。需要是10.244.0.0/16 。如果在master初始化的时候单独指定过pod的网段。则需要修改配置文件里面的规划。
如果不确定之前的网段,可以通过master节点中 /etc/kubernetes/manifests/kube-controller-manager.yaml 的配置文件中的--cluster-cidr 来确认。
1.将kube-flannel.yaml文件下载下来。
wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
2. 编辑文件,确认pod网段,在net-conf.json这里面包含了pod的网段
vim kube-flannel.yml
...
net-conf.json: |
{
"Network": "10.244.0.0/16",
"EnableNFTables": false,
"Backend": {
"Type": "vxlan"
}
...
3. 修改flannel镜像地址 ,由于外网原因,这里将镜像地址修改为daocloud的镜像地址
image: ghcr.io/flannel-io/flannel:v0.26.5
image: ghcr.io/flannel-io/flannel-cni-plugin:v1.6.2-flannel1
image: ghcr.io/flannel-io/flannel:v0.26.5
修改为
image: m.daocloud.io/docker.io/flannel/flannel:v0.26.5
image: m.daocloud.io/docker.io/flannel/flannel-cni-plugin:v1.6.2-flannel1
image: m.daocloud.io/docker.io/flannel/flannel:v0.26.5
一键修改命令为
sed -i 's#ghcr.io/flannel-io#m.daocloud.io/docker.io/flannel#g' kube-flannel.yml
4.安装flannel组件
kubectl apply -f kube-flannel.yml
①创建kube-flannel的命名空间,这个后面会单独讲到
② 创建kube-flannel的sa,这个后面会单独讲到
③ 创建kube-flannel的权限和绑定,这个后面会单独讲到
④创建kube-flannel的的configmap,这个后面会单独讲到
⑤创建kube-flannel的控制器。模式为daemonset,这个后面会单独讲到
5.查看flannet的pod是否启动,并解决报错
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-flannel-ds-9w9q7 0/1 CrashLoopBackOff 6 (3m25s ago) 9m29s 172.21.176.4 k8s-node01 <none> <none>
kube-flannel-ds-cfxgc 0/1 CrashLoopBackOff 6 (3m25s ago) 9m29s 172.21.176.3 k8s-master <none> <none>
通过上面命令可以看到,在kube-flannel这个namespace中,创建了2个pod,但是状态都为CrashLoopBackOff ,可以下面命令来查看
kubectl describe pod -n pod的命名空间 pod的名称,
在本文中就是kubectl describe pod -n kube-flannel kube-flannel-ds-9w9q7来查看描述的报错内容。
在报错的最后几句中可以看到有这么一段报错
E0310 06:26:21.489184 1 main.go:268] Failed to check br_netfilter: stat /proc/sys/net/bridge/bridge-nf-call-iptables: no such file or directory
说明没有启用这个内核参数,那么就去解决它。在节点服务器中运行下面的2行命令
modprobe br_netfilter
sysctl -p /etc/sysctl.conf
6. 重新运行kube-flannel.yml
先delete
kubectl delete -f kube-flannel.yml
再apply
kubectl apply -f kube-flannel.yml
再次查看node节点,会发现status状态已经发生改变