96SEO 2026-02-19 20:06 0
。

这次的分享内容将从Flannel的介绍、工作原理及安装和配置三方…1.Flannel概念剖析
主机拥有一个完整的子网。
这次的分享内容将从Flannel的介绍、工作原理及安装和配置三方面来介绍这个工具的使用方法。
Flannel通过给每台宿主机分配一个子网的方式为容器提供虚拟网络它基于Linux
TUN/TAP使用UDP封装IP包来创建Overlay网络并借助Etcd维护网络的分配情况。
Flannel
Flannel是CoreOS团队针对Kubernetes设计的一个网络规划服务简单来说它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的IP地址。
在默认的Docker配置中每个Node的Docker服务会分别负责所在节点容器的IP分配。
Node内部得容器之间可以相互访问但是跨主机(Node)网络相互间是不能通信。
Flannel设计目的就是为集群中所有节点重新规划IP地址的使用规则从而使得不同节点上的容器能够获得同属一个内网并且不重复的IP地址并让属于不同节点上的容器能够直接通过内网IP通信。
启动之后后台进程首先检索配置和正在使用的子网列表然后选择一个可用的子网然后尝试去注册它。
Etcd也存储这个每个主机对应的IP。
使用Etcd的watch机制监视/atomic.io/network/subnets下面所有元素的变化信息并且根据它来维护一个路由表。
为了提高性能Flannel优化了Universal
Flannel默认使用8285端口作为UDP封装报文的端口VxLan使用8472端口。
那么一个网络报文请求是怎么从一个容器发送到另外一个容器的呢例如从node1上的Container1容器IP10.244.0.13访问node2上面Container2容器IP10.244.1.14容器。
Container1容器10.244.0.13直接访问目标容器Container2的IP
10.244.1.14请求默认通过容器内部的eth0网卡发送出去。
请求报文通过Veth
pair虚拟设备对被发送到Docker宿主机VethXXX设备上。
VethXXX设备是直接连接到虚拟交换机Docker0Cni0的所以请求报文通过虚拟Bridge
Docker0发送出去。
然后查找Docker宿主机的路由表信息同时外部容器IP的报文都会转发到Flannel0虚拟网卡这是一个P2P的虚拟网卡然后报文就被转发到监听在另一端的Flanneld进程。
因为Flannel在Etcd中存储着子网和宿主机ip的对应关系所以能够找到10.244.1.14对应的宿主机IP为11.101.1.3进而开始组装UDP数据包发送数据到目的主机。
这个请求得以完成的原因每个节点上都启动着一个Flanneld
udp进程都监听着8285端口所以node1通过Flanneld进程把数据包通过宿主机的Interface网卡发送给node2的Flanneld进程的相应端口即可。
请求报文到达node2之后继续往上传输到传输层交给监听在8285端口的Flanneld程序处理。
请求数据被解包然后发送给Flannel0虚拟网卡。
查找路由表发现对应容器的报文要交给Docker0cni0。
Docker0找到连到自己的容器把报文发送给Container2反之同样的工作方式。
Kubernetes集群是一组节点这些节点可以是物理服务器或者虚拟机在其上安装Kubernetes平台。
下图为了强调核心概念有所简化。
Kubernetes架构图。
从上图我们可以看到K8S组件和逻辑关系Kubernetes集群主要由Master和Node两类节点组成。
Master的组件包括Apiserver、Controller-manager、Scheduler和Etcd等几个组件其中Apiserver是整个集群的网关。
Node主要由kubelet、kube-proxy、docker引擎等组件组成。
kubelet是K8S集群的工作与节点上的代理组件。
在企业生产环境中一个完整的K8S集群还包括CoreDNS、Prometheus或HeapSter、Dashboard、Ingress
Controller等几个附加组件。
其中cAdivsor组件作用于各个节点master和node节点之上用于收集及收集容器及节点的CPU、内存以及磁盘资源的利用率指标数据这些统计数据由Heapster聚合后可以通过apiserver访问。
客户端提交创建Deployment、Namespace、Pod请求可以通过API
Server处理用户的请求并且存储相关的数据Deployment、Namespace、Pod到Etcd配置数据库中。
K8S
Server查看未绑定的Pod。
尝试为该Pod分配Node主机资源。
过滤主机
(调度预选)调度器用一组规则过滤掉不符合要求的主机。
比如Pod指定了所需要的资源量那么可用资源比Pod需要的资源量少的主机会被过滤掉。
主机打分(调度优选)对第一步筛选出的符合要求的主机进行打分在主机打分阶段调度器会考虑一些整体优化策略比如把容一个Replication
Controller的副本分布到不同的主机上使用最低负载的主机等。
选择主机选择打分最高的主机进行binding操作结果存储到etcd中。
Node节点上Kubelet根据调度结果调用主机上的Docker引擎执行Pod创建操作绑定成功后Scheduler会调用APIServer的API在etcd中创建一个boundpod对象描述在一个工作节点上绑定运行的所有pod信息。
同时运行在每个工作节点上的Kubelet也会定期与etcd同步boundpod信息一旦发现应该在该工作节点上运行的boundpod对象没有更新则调用Docker
Docker仓库主要用于存放Docker镜像Docker仓库分为公共仓库和私有仓库基于registry可以搭建本地私有仓库使用私有仓库的优点如下
可以基于GIT或者SVN、Jenkins更新本地Docker私有仓库镜像版本。
Registry来构建本地私有仓库目前最新版本为v2最新版的docker已不再支持v1Registry
v2使用Go语言编写在性能和安全性上做了很多优化重新设计了镜像的存储格式。
如下为在192.168.1.147服务器上构建Docker本地私有仓库的方法及步骤
/data/registry:/var/lib/registry
docker.io/registryDocker本地仓库启动后台容器启动如图24-2所示
默认情况下会将仓库存放于容器内的/tmp/registry挂载到容器内的/tmp/registry下。
客户端上传镜像至本地私有仓库如下以busybox镜像为例将busybox上传至私有仓库服务器。
192.168.1.147:5000/busybox4检测本地私有仓库
http://192.168.1.147:5000/v2/_catalog
http://192.168.1.147:5000/v2/busybox/tags/list5客户端使用本地私有仓库
客户端docker配置文件添加如下代码同时重启docker服务获取本地私有仓库如图24-3所示
192.168.1.147:5000至此docker本地私有仓库部署完毕可以向仓库中添加或者更新Docker镜像。
insecure-registries:[192.168.1.147:5000]
在企业生产环境中通常会将K8SJenkinsDocker仓库整合起来实现业务全自动发布。
需求如下
1K8S云计算平台、Jenkins平台、Docker仓库平台提前准备好
2部署一套bbs.jfedu.net业务在Jenkins创建工程-绑定SVN仓库地址-从SVN下载网站代码
3网站代码下载成功-制作CentOS7镜像-将网站程序打包至镜像中
4将制作的CentOS7镜像网站程序-上传至Docker仓库平台
5基于K8S云计算平台-部署bbs.jfedu.net业务CentOS云主机-NodePort端口-外网用户访问。
6编写SHELL编程脚本实现以上步骤整合操作SHELL代码如下
/root/.jenkins/workspace/bbs.jfedu.net/
16adfc69-ecf1-48d3-9190-518ecffb8818resourceVersion:
2022-11-23T13:02:03Zlabels:k8s-app:
bbs-jfedu-netannotations:deployment.kubernetes.io/revision:
2022-11-23T13:02:03ZfieldsType:
FieldsV1fieldsV1:f:metadata:f:labels:.:
{}f:spec:f:progressDeadlineSeconds:
{}f:strategy:f:rollingUpdate:.:
{}f:template:f:metadata:f:labels:.:
{}f:spec:f:containers:k:{name:bbs-jfedu-net}:.:
{}f:terminationGracePeriodSeconds:
kube-controller-manageroperation:
2022-11-23T13:02:04ZfieldsType:
FieldsV1fieldsV1:f:metadata:f:annotations:.:
{}f:deployment.kubernetes.io/revision:
bbs-jfedu-nettemplate:metadata:name:
bbs-jfedu-netcreationTimestamp:
10.0.12.13:5000/centos7-ssh:v2resources:
/dev/termination-logterminationMessagePolicy:
IfNotPresentsecurityContext:privileged:
AlwaysterminationGracePeriodSeconds:
default-schedulerstrategy:type:
RollingUpdaterollingUpdate:maxUnavailable:
2022-11-23T13:02:04ZlastTransitionTime:
MinimumReplicasUnavailablemessage:
2022-11-23T13:02:04ZlastTransitionTime:
#创建bbs-jfedu-net-service.yaml文件
catbbs-jfedu-net-service.yamlEOF
c259b7a1-4688-4e51-b5ce-7b9d0a600e15resourceVersion:
2022-11-23T13:16:20Zlabels:k8s-app:
2022-11-23T13:16:20ZfieldsType:
FieldsV1fieldsV1:f:metadata:f:labels:.:
{}f:spec:f:externalTrafficPolicy:
#基于yaml文件部署bbs-jfedu-net业务和Service
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback