安装配置 flannel

上一节我们部署了 etcd,本节安装和配置 flannel。

build flannel

flannel 没有现成的执行文件可用,必须自己 build,最可靠的方法是在 Docker 容器中 build。不过用于做 build 的 docker 镜像托管在 gcr.io,国内可能无法直接访问,为方便大家,我把它 mirror 到了 docker hub,构建步骤如下:

  1. 下载并重命名 image。

    docker pull cloudman6/kube-cross:v1.6.2-2

    docker tag cloudman6/kube-cross:v1.6.2-2 gcr.io/google_containers/kube-cross:v1.6.2-2

  2. 下载 flannel 源码。

    git clone https://github.com/coreos/flannel.git

  3. 开始构建。

    cd flannel

    make dist/flanneld-amd64

  4. 将 flanneld 执行文件拷贝到 host1 和 host2。

    scp dist/flanneld-amd64 192.168.56.104:/usr/local/bin/flanneld

    scp dist/flanneld-amd64 192.168.56.105:/usr/local/bin/flanneld

将 flannel 网络的配置信息保存到 etcd

先将配置信息写到文件 flannel-config.json 中,内容为:

{

  "Network": "10.2.0.0/16",

  "SubnetLen": 24,

  "Backend": {

    "Type": "vxlan"

  }

}

  1. Network 定义该网络的 IP 池为 10.2.0.0/16

  2. SubnetLen 指定每个主机分配到的 subnet 大小为 24 位,即10.2.X.0/24

  3. Backend  vxlan,即主机间通过 vxlan 通信,后面我们还会讨论host-gw

将配置存入 etcd:
etcdctl --endpoints=192.168.56.101:2379 set /docker-test/network/config < flannel-config.json

/docker-test/network/config 是此 etcd 数据项的 key,其 value 为 flannel-config.json 的内容。key 可以任意指定,这个 key 后面会作为 flanneld 的一个启动参数。执行 etcdctl get 确保设置成功。

启动 flannel

在 host1 和 host2 上执行如下命令:
flanneld -etcd-endpoints=http://192.168.56.101:2379 -iface=enp0s8 -etcd-prefix=/docker-test/network

-etcd-endpoints 指定 etcd url。

-iface 指定主机间数据传输使用的 interface。

-etcd-prefix 指定 etcd 存放 flannel 网络配置信息的 key。

host1 上输出如下:

① enp0s8 被选作与外部主机通信的 interface。

② 识别 flannel 网络池 10.2.0.0/16。

③ 分配的 subnet 为 10.2.40.0/24。

flanneld 启动后,host1 内部网络会发生一些变化:

  1. 一个新的 interface flannel.1 被创建,而且配置上 subnet 的第一个 IP 10.2.40.0。

  2. host1 添加了一条路由:目的地址为 flannel 网络 10.2.0.0/16 的数据包都由 flannel.1 转发。 

host2 输出类似,主要区别是 host2 的 subnet 为 10.2.17.0/24:

当前环境网络拓扑如图所示:

flannel 已经就绪,下一节演示如何在 Docker 中使用 flannel 网络。

二维码+指纹.png

### 安装配置 Flannel 网络插件 为了使 Kubernetes 集群中的 Pod 能够相互通信,在 VMware 上运行的 CentOS 7 中安装配置 Flannel 是必要的。以下是具体的操作方法: #### 创建和编辑 `k8s.conf` 文件 由于某些 IPv4 流量不会通过 iptables 的链,这可能导致流量丢失。因此需要创建 `/etc/sysctl.d/k8s.conf` 并添加特定设置来解决此问题。 ```bash [root@master-26 ~]# touch /etc/sysctl.d/k8s.conf [root@master-26 ~]# echo 'net.bridge.bridge-nf-call-ip6tables=1' >> /etc/sysctl.d/k8s.conf [root@master-26 ~]# echo 'net.bridge.bridge-nf-call-iptables=1' >> /etc/sysctl.d/k8s.conf [root@master-26 ~]# echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.d/k8s.conf [root@master-26 ~]# echo 'vm.swappiness=0' >> /etc/sysctl.d/k8s.conf ``` 这些命令会向新创建的文件中追加四条记录[^1]。 #### 加载系统参数 完成上述修改之后,需执行如下指令让新的内核参数生效: ```bash [root@master-26 ~]# sysctl --system ``` 该命令读取所有位于 `/etc/sysctl.d/` 下面的 `.conf` 文件,并应用其中定义的参数值。 #### 获取 Flannel YAML 文件 接着从 GitHub 获取官方维护的 Flannel 插件部署文件: ```bash wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml ``` 这条语句用于下载最新的 Flannel 版本描述文档至本地环境[^2]。 #### 应用 Flannel 至 K8S 集群 最后一步就是利用 kubectl 工具将获取到的 Flannel 描述应用于现有的 Kubernetes 集群之中: ```bash kubectl apply -f kube-flannel.yml ``` 以上操作完成后,可以通过检查 pod 列表确认 Flannel 是否成功启动: ```bash kubectl -n kube-system get pods ``` 如果一切正常,则应该能看到名为 `kube-flannel-ds-*` 的 DaemonSet 类型 Pods 正常工作状态显示为 Running 或者 Completed。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值