1.技术干货!DPDK新手入门到网络功能深入理解
2.五分钟k8s实战-Istio 网关
3.基于 Zadig + Ingress 实现单应用灰度发布最佳实践
4.Acorn,用于 Kubernetes 的轻量级、可移植的 PaaS
技术干货!DPDK新手入门到网络功能深入理解
DPDK新手入门
一、安装
1. 下载源码
DPDK源文件由几个目录组成。自助售卖系统源码
2. 编译
二、配置
1. 预留大页
2. 加载 UIO 驱动
三、运行 Demo
DPDK在examples文件下预置了一系列示例代码,这里以Helloworld为例进行编译。
编译完成后会在build目录下生成一个可执行文件,通过附加一些EAL参数可以运行起来。
以下参数都是比较常用的
四、核心组件
DPDK整套架构是基于以下四个核心组件设计而成的
1. 环形缓冲区管理(librte_ring)
一个无锁的多生产者,多消费者的FIFO表处理接口,可用于不同核之间或是逻辑核上处理单元之间的通信。
2. 内存池管理(librte_mempool)
主要职责是在内存中分配用来存储对象的pool。 每个pool以名称来唯一标识,并且使用一个ring来存储空闲的对象节点。 它还提供了一些其他的服务,如针对每个处理器核心的缓存或者一个能通过添加padding来使对象均匀分散在所有内存通道的对齐辅助工具。
3. 网络报文缓冲区管理(librte_mbuf)
它提供了创建、释放报文缓存的能力,DPDK应用程序可能使用这些报文缓存来存储数据包。这个缓存通常在程序开始时通过DPDK的mempool库创建。这个库提供了创建和释放mbuf的API,能用来暂存数据包。
4. 定时器管理(librte_timer)
这个模块为DPDK的php源码 养生类执行单元提供了异步执行函数的能力,也能够周期性的触发函数。它是通过环境抽象层EAL提供的能力来获取的精准时间。
五、环境抽象层(EAL)
EAL是用于为DPDK程序提供底层驱动能力抽象的,它使DPDK程序不需要关注下层具体的网卡或者操作系统,而只需要利用EAL提供的抽象接口即可,EAL会负责将其转换为对应的API。
六、通用流rte_flow
rte_flow提供了一种通用的方式来配置硬件以匹配特定的Ingress或Egress流量,根据用户的任何配置规则对其进行操作或查询相关计数器。
这种通用的方式细化后就是一系列的流规则,每条流规则由多种匹配模式和动作列表组成。
一个流规则可以具有几个不同的动作(如在将数据重定向到特定队列之前执行计数,封装,解封装等操作),而不是依靠几个规则来实现这些动作,应用程序操作具体的硬件实现细节来顺序执行。
1. 属性rte_flow_attr
a. 组group
流规则可以通过为其分配一个公共的组号来分组,通过jump的流量将执行这一组的操作。较低的值具有较高的优先级。组0具有最高优先级,且只有组0的规则会被默认匹配到。
b. 优先级priority
可以将优先级分配给流规则。像Group一样,较低的值表示较高的优先级,0为最大值。
组和优先级是android开放源码任意的,取决于应用程序,它们不需要是连续的,也不需要从0开始,但是最大数量因设备而异,并且可能受到现有流规则的影响。
c. 流量方向ingress or egress
流量规则可以应用于入站和/或出站流量(Ingress/Egress)。
2. 模式条目rte_flow_item
模式条目类似于一套正则匹配规则,用来匹配目标数据包,其结构如代码所示。
首先模式条目rte_flow_item_type可以分成两类:
同时每个条目可以最多设置三个相同类型的结构:
a. ANY可以匹配任何协议,还可以一个条目匹配多层协议。
b. ETH
c. IPv4
d. TCP
3. 操作rte_flow_action
操作用于对已经匹配到的数据包进行处理,同时多个操作也可以进行组合以实现一个流水线处理。
首先操作类别可以分成三类:
a. MARK对流量进行标记,会设置PKT_RX_FDIR和PKT_RX_FDIR_ID两个FLAG,具体的值可以通过hash.fdir.hi获得。
b. QUEUE将流量上送到某个队列中
c. DROP将数据包丢弃
d. COUNT对数据包进行计数,如果同一个flow里有多个count操作,则每个都需要指定一个独立的id,shared标记的计数器可以用于统一端口的不同的flow一同进行计数。
e. RAW_DECAP用来对匹配到的数据包进行拆包,一般用于隧道流量的剥离。在action定义的时候需要传入一个data用来指定匹配规则和需要移除的内容。
f. RSS对流量进行负载均衡的操作,他将根据提供的数据包进行哈希操作,并将其移动到对应的队列中。
其中的视频嗅探 源码level属性用来指定使用第几层协议进行哈希:
g. 拆包Decap
h. One\Two Port Hairpin
七、常用API
1. 程序初始化
2. 端口初始化
3. 队列初始化
DPDK-网络协议栈-vpp-ovs-DDoS-虚拟化技术
DPDK技术路线视频教程地址立即学习
一、DPDK网络
1. 网络协议栈项目
2.dpdk组件项目
3.dpdk经典项目
二、DPDK框架
1. 可扩展的矢量数据包处理框架vpp(c/c++)
2.DPDK的虚拟交换机框架OvS
3.golang的网络开发框架nff-go(golang)
4. 轻量级的switch框架snabb(lua)
5. 高效磁盘io读写spdk(c)
三、DPDK源码
1. 内核驱动
2. 内存
3. 协议
4. 虚拟化
5. cpu
6. 安全
四、性能测试
1. 性能指标
2. 测试方法
3. 测试工具DPDK相关学习资料分享:点击领取,备注DPDK
DPDK新手入门原文链接:DPDK上手
五分钟k8s实战-Istio 网关
Istio 的网关功能相当强大,它与Ingress类似,用于将集群内部服务暴露给外部流量。特别是对于中大型企业,使用Istio-gateway可以更有效地管理内外网流量,通过同一个控制面实现。下面,我们来详细了解如何创建和配置Istio Gateway。
首先,创建Istio Gateway资源,通过selector匹配安装Istio时自带的gateway,如网关会代理www.service1.io的请求。接着,通过VirtualService将网关与服务绑定,指定流量进入特定的subset(如v1)。
访问域名后,你会看到请求进入了预期的v1分组。为了外部访问,需要配置本地host或获取到gateway的外网IP,并与域名绑定。在docker-desktop的kubernetes集群中,通常可以直接使用.0.0.1,flash 粒子效果 源码而在minikube中可能需要使用minikube tunnel。
Istio Gateway的路由流程类似于Kubernetes的Ingress,但通过VirtualService实现定制化路由。服务网格Istio的内容将在运维章节中继续扩展,包括Telemetry的trace、log和metrics功能。如果你对此感兴趣,可以关注我们的后续更新,源码可以在github.com/crossoverJie...找到。
基于 Zadig + Ingress 实现单应用灰度发布最佳实践
在软件开发竞争激烈的环境下,工程师们需面对如何确保发布过程中的稳定性、可靠性与高效性。企业通常会根据业务架构和应用场景选择适用的发布策略。在先前的文章「基于 Istio + Zadig,零负担实现云原生全链路灰度发布」中,Zadig 提供了微服务架构下的全链路灰度发布方案。然而,对于处于单体架构或单应用发布阶段的业务,需要更加针对性的安全保障方案。为此,结合 Zadig 与 Ingress 实现单应用灰度发布的最佳实践被提出。
本文将深入探讨如何利用 Zadig 和 Ingress 实现生产稳定发布的基本原理,并通过实际案例展示 Zadig 中的详细操作步骤。实现过程基于以下核心原理:
1. **部署蓝环境**:复制当前的 workload,设置新镜像,并创建一个指向该新镜像的 blue service。
2. **切换部分生产流量**:在原有 ingress 基础上创建一个与生产环境相同的 Host,并将 service 指向 blue service。启用 nginx.ingress.kubernetes.io... "true",同时调整权重配置为 nginx.ingress.kubernetes.io...:。
3. **执行蓝绿发布**:更新生产使用的 workload 镜像为新镜像。
4. **切断蓝环境流量**:修改 ingress 配置,禁用 nginx.ingress.kubernetes.io... "false"。
5. **蓝绿清理**:在工作流执行完成后,无论最终结果如何,删除 blue service 和 blue workload。
接下来,我们将详细说明如何在 Zadig 中结合 Ingress 实现这一生产发布流程。
首先,**项目准备**:创建项目并配置生产服务 a、b、c。参考项目源码和服务 YAML 配置文件。在服务 a 的 YAML 配置中添加 ingress 配置。
接着,**配置环境**:创建生产环境 prod,管理服务并添加 a、b、c。添加 ingress-blue 以准备生产发布。
配置工作流:创建工作流并选择「蓝绿发布」模板,配置工作流步骤包括部署蓝绿环境、导流量、检查新版本、人工审批和生产升级等。
执行**生产发布**:按照配置执行工作流,包含部署蓝环境、导入 % 流量到新版本、自动化测试新版本、人工审批、生产升级并切断流量。在待审批状态时验证流量走向。
最后,**效果验证**:在发布过程中,通过服务日志查看流量分配结果。在人工审批通过后,工作流自动更新生产环境镜像并切回生产,清理临时资源。至此,完整的生产发布流程完成。实际应用中,根据监控数据在人工审批阶段控制新版本上线时间,确保在低峰时段进行发布,减少对用户的影响。
Zadig 为工程师提供了稳定、高效且灵活的发布解决方案,让工程师能够更加专注于创新。通过结合 Zadig 和 Ingress,实现了单应用灰度发布的最佳实践,为企业提供了更加安全、可控的发布流程。
Acorn,用于 Kubernetes 的轻量级、可移植的 PaaS
Acorn 是一个用于 Kubernetes 的轻量级、可移植的 PaaS 框架,其设计旨在简化开发和部署基于 Kubernetes 的应用程序的流程。作为 K3s 的缔造者 Darren Shepherd 及其团队的成果,Acorn 强调了开源、简洁、轻量化和可移植性,使其成为在 Kubernetes 环境下构建和扩展微服务的理想选择。
Acorn 的核心目标是提供一个无需深入了解 Kubernetes 细节即可运行应用程序的平台。通过使用自己的类 JSON 领域特定语言(DSL),它抽象了 Kubernetes 的复杂性,使开发者能够轻松地描述基于微服务设计模式的现代应用程序。与 Cloud Foundry 类似,Acorn 专注于接受源代码或容器镜像并发布端点的工作流程,它在后台与 Kubernetes API 协商,创建资源并建立所需的管道。
在公有云环境下,AWS App Runner、Azure Container Apps 和 Google Cloud Run 等服务提供了类似 PaaS 的体验,但它们局限于特定的云平台,不可移植至其他环境。相比之下,Acorn 是一种能够从开发人员笔记本电脑上的 Kind 集群无缝扩展到多节点集群的框架之一,体现了其可移植性。
本文将详细分析 Acorn 的架构,并展示 Acorn 部署如何转换为 Kubernetes 对象,以及如何通过一系列步骤在 Minikube 中设置环境并部署应用程序。以下是设置和部署过程的关键步骤:
在 Mac 上安装 Minikube,并在其中启用 Nginx Ingress,以支持 Acorn 的功能。
使用 Homebrew 安装 Acorn CLI,并检查其版本,确保已正确安装。
通过运行 `acorn init` 命令配置 Minikube,以准备安装 Acorn。
安装 Acorn 后,会在 Kubernetes 集群中创建一组资源,用于处理应用程序的构建时间和运行时要求。这包括 `namespaces`,其中 `acorn-system` 用于 API 和控制器组件,而 `acorn` 用于应用程序资源。
安装程序会创建一个自定义资源定义(CRD),即 `AppInstance.internal.acorn.io`,用于映射集群内的 Acorn 应用程序。
Acorn API 服务器与 Kubernetes API 服务器关联,通过聚合机制与集群 API 对话。Acorn CLI 只需要与 API 组相关的 RBAC 权限。
API 服务器将入站请求转发给 Acorn 控制器,控制器将应用程序定义转换为 Kubernetes 资源,如 Deployments、ConfigMaps、Secrets 和 Volumes,负责管理和维护应用程序的生命周期。
部署 Acorn 应用程序的流程包括创建一个简单的基于 Nginx 镜像的 Web 服务器实例。在本地目录中创建一个 `Acornfile`,定义容器和端口配置。运行 `acorn run` 命令后,Acorn 会将 OCI 清单推送到集群内的内部注册表服务,并生成访问应用程序的 URL。
测试应用程序后,可以检查 Kubernetes 集群中生成的资源,如 Deployment、Pod 和服务。使用 Ingress 实现对外暴露,确保应用程序可访问。
通过将应用程序部署到生产集群,Acorn 实现了真正的可移植性,无需修改集群配置或部署额外资源。它支持 Docker 影响下的通用模式,为多容器应用程序提供运行环境,并与现有服务(如数据库和缓存)集成。
Acorn 的简单性和便携性使其成为开发者和运维人员的首选,它简化了 Kubernetes 应用程序的部署和管理过程。随着 Acorn 支持直接从 Git 存储库部署的能力,DevOps 团队将能够轻松地管理基于微服务的应用程序,从而实现高效、灵活的开发和运维流程。