2 Star 2 Fork 18

Ken / kubeasz

forked from gjmzj / kubeasz 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
flannel.md 5.43 KB
一键复制 编辑 原始数据 按行查看 历史

06-安装flannel网络组件.md

本项目提供多种网络插件可选,如果需要安装flannel,请在/etc/ansible/hosts文件中设置变量 CLUSTER_NETWORK="flannel",更多设置请查看roles/flannel/defaults/main.yml

Flannel是最早应用到k8s集群的网络插件之一,简单高效,且提供多个后端backend模式供选择;本文介绍以DaemonSet Pod方式集成到k8s集群,需要在所有master节点和node节点安装。

roles/flannel/
├── defaults
│   └── main.yml
├── tasks
│   └── main.yml
└── templates
    └── kube-flannel.yaml.j2

请在另外窗口打开roles/flannel/tasks/main.yml文件,对照看以下讲解内容。

下载基础cni 插件

请到CNI 插件最新release页面下载cni-v0.6.0.tgz,解压后里面有很多插件,选择如下几个复制到项目 bin目录下

  • flannel用到的插件
    • bridge
    • flannel
    • host-local
    • loopback
    • portmap

Flannel CNI 插件的配置文件可以包含多个plugin 或由其调用其他pluginFlannel DaemonSet Pod运行以后会生成/run/flannel/subnet.env 文件,例如:

FLANNEL_NETWORK=10.1.0.0/16
FLANNEL_SUBNET=10.1.17.1/24
FLANNEL_MTU=1472
FLANNEL_IPMASQ=true

然后它利用这个文件信息去配置和调用bridge插件来生成容器网络,调用host-local来管理IP地址,例如:

{
	"name": "mynet",
	"type": "bridge",
	"mtu": 1472,
	"ipMasq": false,
	"isGateway": true,
	"ipam": {
		"type": "host-local",
		"subnet": "10.1.17.0/24"
	}
}

准备Flannel DaemonSet yaml配置文件

请阅读 roles/flannel/templates/kube-flannel.yaml.j2 内容,注意:

      ...
        env:
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: KUBERNETES_SERVICE_HOST   # 指定apiserver的主机地址
          value: {{ MASTER_IP }}
        - name: KUBERNETES_SERVICE_PORT   # 指定apiserver的服务端口
          value: {{ KUBE_APISERVER.split(':')[2] }}      
       ...

安装 flannel网络

  • 安装之前必须确保kube-master和kube-node节点已经成功部署
  • 只需要在任意装有kubectl客户端的节点运行 kubectl create安装即可
  • 等待15s后(视网络拉取相关镜像速度),flannel 网络插件安装完成,删除之前kube-node安装时默认cni网络配置

验证flannel网络

执行flannel安装成功后可以验证如下:(需要等待镜像下载完成,有时候即便上一步已经配置了docker国内加速,还是可能比较慢,请确认以下容器运行起来以后,再执行后续验证步骤)

# kubectl get pod --all-namespaces
NAMESPACE     NAME                    READY     STATUS    RESTARTS   AGE
kube-system   kube-flannel-ds-m8mzm   1/1       Running   0          3m
kube-system   kube-flannel-ds-mnj6j   1/1       Running   0          3m
kube-system   kube-flannel-ds-mxn6k   1/1       Running   0          3m

在集群创建几个测试pod: kubectl run test --image=busybox --replicas=3 sleep 30000

# kubectl get pod --all-namespaces -o wide|head -n 4
NAMESPACE     NAME                    READY     STATUS    RESTARTS   AGE       IP             NODE
default       busy-5956b54c8b-ld4gb   1/1       Running   0          9m        172.20.2.7     192.168.1.1
default       busy-5956b54c8b-lj9l9   1/1       Running   0          9m        172.20.1.5     192.168.1.2
default       busy-5956b54c8b-wwpkz   1/1       Running   0          9m        172.20.0.6     192.168.1.3

# 查看路由
# ip route
default via 192.168.1.254 dev ens3 onlink 
192.168.1.0/24 dev ens3  proto kernel  scope link  src 192.168.1.1 
172.17.0.0/16 dev docker0  proto kernel  scope link  src 172.17.0.1 linkdown 
172.20.0.0/24 via 192.168.1.3 dev ens3 
172.20.1.0/24 via 192.168.1.2 dev ens3 
172.20.2.0/24 dev cni0  proto kernel  scope link  src 172.20.2.1 

在各节点上分别 ping 这三个POD IP地址,确保能通:

ping 172.20.2.7
ping 172.20.1.5
ping 172.20.0.6
1
https://gitee.com/kenstime_admin/kubeasz.git
git@gitee.com:kenstime_admin/kubeasz.git
kenstime_admin
kubeasz
kubeasz
master

搜索帮助