一 部署flannel

1.1 安装flannel

kubernetes 要求集群内各节点(包括 master 节点)能通过 Pod 网段互联互通。flannel 使用 vxlan 技术为各节点创建一个可以互通的 Pod 网络,使用的端口为 UDP 8472。

flanneld 第一次启动时,从 etcd 获取配置的 Pod 网段信息,为本节点分配一个未使用的地址段,然后创建 flannedl.1 网络接口(也可能是其它名称,如 flannel1 等)。

flannel 将分配给自己的 Pod 网段信息写入 /run/flannel/docker 文件,docker 后续使用这个文件中的环境变量设置 docker0 网桥,从而从这个地址段为本节点的所有 Pod 容器分配 IP。
更多flannel参考:《008.Docker Flannel+Etcd分布式网络部署》。
提示:k8smaster01节点已下载相应二进制,可直接分发至node节点。

1.2 分发flannel

  1 [root@k8smaster01 ~]# cd /opt/k8s/work
2 [root@k8smaster01 work]# source /opt/k8s/bin/environment.sh
3 [root@k8smaster01 work]# for node_ip in ${NODE_IPS[@]}
4 do
5 echo ">>> ${node_ip}"
6 scp flannel/{flanneld,mk-docker-opts.sh} root@${node_ip}:/opt/k8s/bin/
7 ssh root@${node_ip} "chmod +x /opt/k8s/bin/*"
8 done

1.3 创建flannel证书和密钥


提示:k8smaster01节点已创建flanneld的CA证书请求文件,可直接分发至node节点。

1.4 分发证书和私钥

  1 [root@k8smaster01 ~]# cd /opt/k8s/work
2 [root@k8smaster01 work]# source /opt/k8s/bin/environment.sh
3 [root@k8smaster01 work]# for node_ip in ${NODE_IPS[@]}
4 do
5 echo ">>> ${node_ip}"
6 ssh root@${node_ip} "mkdir -p /etc/flanneld/cert"
7 scp flanneld*.pem root@${node_ip}:/etc/flanneld/cert
8 done

1.5 创建flanneld的systemd


提示:k8smaster01节点已创建创建flanneld的systemd,可直接分发至node节点。

1.6 分发flannel systemd

  1 [root@k8smaster01 ~]# cd /opt/k8s/work
2 [root@k8smaster01 work]# source /opt/k8s/bin/environment.sh
3 [root@k8smaster01 work]# for node_ip in ${NODE_IPS[@]}
4 do
5 echo ">>> ${node_ip}"
6 scp flanneld.service root@${node_ip}:/etc/systemd/system/
7 done

二 启动并验证

2.1 启动flannel

  1 [root@k8smaster01 ~]# source /opt/k8s/bin/environment.sh
2 [root@k8smaster01 ~]# for node_ip in ${NODE_IPS[@]}
3 do
4 echo ">>> ${node_ip}"
5 ssh root@${node_ip} "systemctl daemon-reload && systemctl enable flanneld && systemctl restart flanneld"
6 done

2.2 检查flannel启动

  1 [root@k8smaster01 ~]# source /opt/k8s/bin/environment.sh
2 [root@k8smaster01 ~]# for node_ip in ${NODE_IPS[@]}
3 do
4 echo ">>> ${node_ip}"
5 ssh root@${node_ip} "systemctl status flanneld|grep Active"
6 done

2.3 检查pod网段信息

  1 [root@k8smaster01 ~]# source /opt/k8s/bin/environment.sh
2 [root@k8smaster01 ~]# etcdctl \
3 --endpoints=${ETCD_ENDPOINTS} \
4 --ca-file=/etc/kubernetes/cert/ca.pem \
5 --cert-file=/etc/flanneld/cert/flanneld.pem \
6 --key-file=/etc/flanneld/cert/flanneld-key.pem \
7 get ${FLANNEL_ETCD_PREFIX}/config #查看集群 Pod 网段(/16)
  1 [root@k8smaster01 ~]# source /opt/k8s/bin/environment.sh
2 [root@k8smaster01 ~]# etcdctl \
3 --endpoints=${ETCD_ENDPOINTS} \
4 --ca-file=/etc/kubernetes/cert/ca.pem \
5 --cert-file=/etc/flanneld/cert/flanneld.pem \
6 --key-file=/etc/flanneld/cert/flanneld-key.pem \
7 ls ${FLANNEL_ETCD_PREFIX}/subnets #查看已分配的 Pod 子网段列表(/24)
8 [root@k8smaster01 ~]# etcdctl \
9 --endpoints=${ETCD_ENDPOINTS} \
10 --ca-file=/etc/kubernetes/cert/ca.pem \
11 --cert-file=/etc/flanneld/cert/flanneld.pem \
12 --key-file=/etc/flanneld/cert/flanneld-key.pem \
13 get ${FLANNEL_ETCD_PREFIX}/subnets/172.30.8.0-21 #查看某一 Pod 网段对应的节点 IP 和 flannel 接口地址
解释:


172.30.8.0/21 被分配给节点 k8snode02 (172.24.8.75);


VtepMAC 为 k8snode02 节点的 flannel.1 网卡 MAC 地址。

2.4 检查flannel网络信息

  1 [root@k8snode02 ~]# ip addr show
解释:flannel.1 网卡的地址为分配的 Pod 子网段的第一个 IP(.0),且是 /32 的地址。


[root@k8smaster01 ~]# ip route show |grep flannel.1


172.30.8.0/21 via 172.30.8.0 dev flannel.1 onlink


172.30.128.0/21 via 172.30.128.0 dev flannel.1 onlink


172.30.208.0/21 via 172.30.208.0 dev flannel.1 onlink


172.30.216.0/21 via 172.30.216.0 dev flannel.1 onlink


解释:


到其它节点 Pod 网段请求都被转发到 flannel.1 网卡;


flanneld 根据 etcd 中子网段的信息,如 ${FLANNEL_ETCD_PREFIX}/subnets/172.30.32.0-21 ,来决定进请求发送给哪个节点的互联 IP。

2.5 验证各节点flannel

在各节点上部署 flannel 后,检查是否创建了 flannel 接口(名称可能为 flannel0、flannel.0、flannel.1 等):
  1 [root@k8smaster01 ~]# source /opt/k8s/bin/environment.sh
2 [root@k8smaster01 ~]# for all_ip in ${ALL_IPS[@]}
3 do
4 echo ">>> ${all_ip}"
5 ssh ${all_ip} "/usr/sbin/ip addr show flannel.1|grep -w inet"
6 done
输出:


在各节点上 ping 所有 flannel 接口 IP,确保能通:
  1 [root@k8smaster01 ~]# source /opt/k8s/bin/environment.sh
2 [root@k8smaster01 ~]# for all_ip in ${ALL_IPS[@]}
3 do
4 echo ">>> ${all_ip}"
5 ssh ${all_ip} "ping -c 1 172.30.8.0"
6 ssh ${all_ip} "ping -c 1 172.30.32.0"
7 ssh ${all_ip} "ping -c 1 172.30.128.0"
8 ssh ${all_ip} "ping -c 1 172.30.208.0"
9 ssh ${all_ip} "ping -c 1 172.30.216.0"
10 done

012.Kubernetes二进制部署worker节点Flannel的更多相关文章

  1. 013.Kubernetes二进制部署worker节点Nginx实现高可用

    一 Nginx代理实现kube-apiserver高可用 1.1 Nginx实现高可用 基于 nginx 代理的 kube-apiserver 高可用方案. 控制节点的 kube-controller ...

  2. 015.Kubernetes二进制部署所有节点kubelet

    一 部署 kubelet kubelet 运行在每个 worker 节点上,接收 kube-apiserver 发送的请求,管理 Pod 容器,执行交互式命令,如 exec.run.logs 等. k ...

  3. 016.Kubernetes二进制部署所有节点kube-proxy

    一 部署 kube-proxy kube-proxy 运行在所有节点上,它监听 apiserver 中 service 和 endpoint 的变化情况,创建路由规则以提供服务 IP 和负载均衡功能. ...

  4. Kubernetes 二进制部署(一)单节点部署(Master 与 Node 同一机器)

    0. 前言 最近受“新冠肺炎”疫情影响,在家等着,入职暂时延后,在家里办公和学习 尝试通过源码编译二进制的方式在单一节点(Master 与 Node 部署在同一个机器上)上部署一个 k8s 环境,整理 ...

  5. K8s二进制部署单节点 etcd集群,flannel网络配置 ——锥刺股

    K8s 二进制部署单节点 master    --锥刺股 k8s集群搭建: etcd集群 flannel网络插件 搭建master组件 搭建node组件 1.部署etcd集群 2.Flannel 网络 ...

  6. K8s二进制部署单节点 master组件 node组件 ——头悬梁

    K8s二进制部署单节点   master组件 node组件   --头悬梁 1.master组件部署 2.node   组件部署 k8s集群搭建: etcd集群 flannel网络插件 搭建maste ...

  7. Kubernetes 二进制部署(二)集群部署(多 Master 节点通过 Nginx 负载均衡)

    0. 前言 紧接上一篇,本篇文章我们尝试学习多节点部署 kubernetes 集群 并通过 haproxy+keepalived 实现 Master 节点的负载均衡 1. 实验环境 实验环境主要为 5 ...

  8. 007.Kubernetes二进制部署Flannel

    一 部署flannel 1.1 安装flannel kubernetes 要求集群内各节点(包括 master 节点)能通过 Pod 网段互联互通.flannel 使用 vxlan 技术为各节点创建一 ...

  9. 003.Kubernetes二进制部署准备

    一 前置准备 1.1 前置条件 相应的充足资源的Linux服务器: 设置相应的主机名,参考命令: hostnamectl set-hostname k8smaster Mac及UUID唯一: 若未关闭 ...

随机推荐

  1. Django中CKEditor富文本编译器的使用

    CKEditor富文本编辑器 1. 安装 pip install django-ckeditor 2. 添加应用 在INSTALLED_APPS中添加 INSTALLED_APPS = [ ... ' ...

  2. MySQL基础(三)多表查询(各种join连接详解)

    Mysql 多表查询详解 一.前言 二.示例 三.注意事项 一.前言 上篇讲到Mysql中关键字执行的顺序,只涉及了一张表:实际应用大部分情况下,查询语句都会涉及到多张表格 : 1.1 多表连接有哪些 ...

  3. 「看完不后悔系列!」Maya的建模小技巧

    Maya 将最大的联合影响力降至最低 最大的联合影响力是游戏角色装备的已知要求. 但是,对于每种类型的生产来说,这实际上都是一个很好的工作流程. 从透视图上看,如果你将联合影响力从4更改为5,则不一定 ...

  4. Python_散点图绘制

    为了可视化一些数据分布,需要以散点图的形式呈现 引入绘图工具 import matplotlib.pyplot as plt from matplotlib.font_manager import F ...

  5. 对新手严重不友好的强者——Nginx那些俯拾皆是的坑

    1.if和后边的括号要隔一个空格,变量后面也要有空格. 2.location / 和location = / 的意味不一样.前面的是通用匹配,后面的匹配根节点访问请求,前面的使用不好很容易引发重定向过 ...

  6. 【MongoDB详细使用教程】四、python操作MongoDB

    目录 1.安装pymongo 2.连接数据库 3.操作数据库 3.1.查 3.2.增 3.3.改 3.4.删 使用第三方库pymongo来实现python对MongoDB的操作 pymongo官方文档 ...

  7. 通过一个生活中的案例场景,揭开并发包底层AQS的神秘面纱

    本文导读 生活中案例场景介绍 联想到 AQS 到底是什么 AQS 的设计初衷 揭秘 AQS 底层实现 最后的总结 当你在学习某一个技能的时候,是否曾有过这样的感觉,就是同一个技能点学完了之后,过了一段 ...

  8. JVM学习记录3--垃圾收集器

    贴个图 Serial收集器 最简单的收集器,单线程,收集器会暂停用户线程,称为"stop the world". ParNew收集器 Serial收集器的多线程版本,其它类似.默认 ...

  9. IIS服务器文件跨域问题(几乎可以解决大多数跨域问题)

    Windows server 服务器 1:在管理工具中选择,找到IIS 2:打开IIS管理,找到网站 3:找到HTTP响应头标 4:打开HTTP响应头标 5:添加 添加:Access-Control- ...

  10. Yii 1.1.x 单元测试

    代码若不整洁,只会越来越糟糕:代码写不好,公司要黄是迟早. Yii 的应用有两种,下面记录这两种应用的单元测试方法 webApplication consoleApplication 在protect ...