当前位置: 首页 > news >正文

CNP实现应用CD部署

上一篇整体介绍了cnp的功能,这篇重点介绍下CNP产品应用开发的功能。

简介

CNP的应用开发,主要是指的应用CD部署的配置管理。

应用列表,用来创建一个应用,一般与项目对应,也可以多个应用对应到一个项目。具体很灵活。然后应用配置明细中,其实就是提供了一个web看板,可以快速定义k8s对象,包括工作负载、ConfigMap、Secret等等k8s对象,并且提供部署功能。部署时可以选择到前面cnp配置好的环境中去,同时提供了环境部署过程的监控、日志等功能。

制品库管理,云原生的cd基本都是通过镜像部署实现,所以纳管一个制品库就是标配功能。这里支持纳管移动云自己的CIS镜像库、Harbor,以及其他镜像库(如nexus等)。最终是为部署过程提供镜像库使用。

插件管理,主要是提供ISTIO的服务网格管理功能。

应用路由,主要是集成了cnp内置的apisix的路由配置功能。提供了一个更简洁的直观的可视化配置界面。

制品库管理

应用部署都依托于制品库,所以首先我们要纳管我们使用的制品库。CNP支持的制品库有两种:传统镜像库(例如Harbor)、Helm Chart仓库。其中后面应用部署的Helm方式,需要基于Helm Chart库实现。

我们这里基于磐舟的Harbor进行配置。

需要确保仓库地址和CNP的网络能够通。

录入地址、用户名、密码,点击验证。然后关联一个部署目标,确定保存。比较简单。

这里注意仓库地址末尾不要加"/"。

插件管理

目前提供两个插件。Fluxcd和Istio。

Fluxcd主要针对helm部署方式。

Istio提供服务网格服务。

我们这里安装Istio组件。点击Istio组件进入组件安装界面。

点击安装按钮,选择集群及项目,启动安装。安装完成效果如上图。

安装了Istio组建后,在后面应用创建时才能选择启用服务治理功能。

应用列表

新建应用。这里新建应用的时候,会直接给你创建一个工作负载,所以首次创建的时候需要注意一下,提前规划好部署那个负载。

绑定环境是cnp配置的系统环境。就是生命部署到拿一个项目下的哪一个环境中。选择环境时,同时会默认使用项目设置的namespace。

应用组件类型是提供了几种对象创建方式。webservice是基于server API接口封装的一个Web控制台页面。同时也支持k8s-objects(yml方式),helm。

这里我们是用WebService方式创建。

推荐启用服务治理模块,会自动配置Istio,后期CNP会陆续增加基于sidecar的很多功能,提供更好的服务网格功能。服务治理需要提前安装istio插件。可以到插件管理中安装。否则部署时会报错。

容器镜像,选择好纳管的Harbor镜像源,然后补充具体项目路径及版本信息。点击回车可以匹配验证。

设置内存配额和cpu配额,设置容器端口号。提交保存即可完成。

首次配置完,只有一个组件。可以根据项目实际情况,继续新增组件。这里的组件,包括configMap和deployment等。

ConfigMap创建时,推荐试用yml方式创建。首先使用文本编辑工具提前标记好yml文件,然后新增组件是选择k8s-objects类型,将yml贴到应用配置的文本区域中执行即可。

注意yml方式执行时,偶尔会因为字符问题导致提交时格式错乱。整合是由于windows的字符集和unix字符集差异导致的。cnp目前对类似特殊字符处理正在优化中,暂时需要自行通过类似nodepad++等文本编辑器处理后提交。如果格式变形,会导致yml解析错误,直接引发应用容器启动异常。

点击部署,启动应用到集群的cd流程。

下方可以看到具体部署情况。

也可以看部署信息。

到这里我们完成cd推送的操作。

应用路由

应用镜像启动起来了,不代表就能对外提供服务了。我们还需要配置应用入口路由。这里基于Apisix进行路由配置。当然你可以继续使用k8s传统的ingress或者svc的方式开通服务,直接到kcs的控制台进行配置即可。这里不再单独描述。

Apisix作为一个高性能,使用广泛,灵活可配置的服务网关,被cnp选中集成到环境中来。

在安装了apisix的组件后,你可以直接通过apisix的控制看板进行路由配置,也可以通过cnp集成的apisix的路由配置功能进行操作。

目前cnp的路由配置正在不断优化中,针对后台转发重写地址,支持不好,需要到apisix中进行配置。直接默认联通的路由,可以一次性直接开通。

点击新增路由

输入路由名称和路由描述。选择应用,选择应用中对应的组件(deploy),选择部署目标,选择网关(apisix,安装名称可能不同),下一步。

选择服务端口。这里跟上一步选择的组件是绑定的。

输入域名。需要解析到对应的负载均衡ip上。

输入路径。/* 表示所有路径。

优先级。优先级高的交叉路由会被优先执行。

提交保存。

去到apisix看一下。

apisix中创建了两个对象。一个“上游”,一个“路由”。

这里其实和到apisix直接配置是等效的。

转发配置

对于一些特殊设计,例如后台多个微服务之间的转发,可能会调整请求路径path,需要对请求进行重写。目前cnp对路径重写并不支持,需要到apisix中直接进行配置。配置如下。

先确定是否存在上游配置。上游配置就是请求到那个deployment的指向配置。

这里我们有一个独立的java的服务,叫asia-info。首先我们配置这个上游。

这里如果你熟悉kcs的配置,可以通过apisix直接配置。

但是更建议利用cnp的路由管理创建相关对象,确保无误。

我们先创建一个应用路由,按照路由选择对应的应用和组件。

路径可以先配置入口路径,优先级设置1。

然后cnp就会给我们创建好对应的apisix的上游和路由对象。

我们只需要重新创建一个路由对象,吧优先级设置为9,即可以让路由走我们的新路由来进行转发。具体如下。

在请求改写这里,采用正则改写,然后根据需要,配置正则表达式,然后填入转发模板。这里的意思是转发的时候移除“/prod-api/”这个路径。

下一步的时候直接选择cnp生成的那个上游对象,提交保存即可。

当你将所有的路由都配置上以后,应用就能够通过apisix进行访问了。

例如:village.sdchbn.com:30443

PS

        路由的配置,可以根据测试或者开发环境上,能够正常运行的应用的nginx的conf文件进行设计。如果开发环境是通过端口号进行的路由定义,你需要改写成一个入口的path,然后用路由转发到不通的服务镜像内。因为k8s集群肯定都是一个入口过来。当然你也可以使用二级域名进行入口路由。同时,增加path,需要打包镜像的时候对nginx也做相应的配置。总之需要根据具体情况进行设计。后面会分享一些具体实现配置。

相关文章:

CNP实现应用CD部署

上一篇整体介绍了cnp的功能,这篇重点介绍下CNP产品应用开发的功能。 简介 CNP的应用开发,主要是指的应用CD部署的配置管理。 应用列表,用来创建一个应用,一般与项目对应,也可以多个应用对应到一个项目。具体很灵活。…...

kubeadm join 192.168.10.16:6443 --token xxx报错Failed to request cluster-info

1、node节点执行 kubeadm join 192.168.10.16:6443 --token hak4zi.hrib9uv4p62t1uok --discovery-token-ca-cert-hash sha256:4337638eef783ee6a66045ad699722079e071c2dfbaa21e37d3174f04d58ea97 --v2 报错 [discovery] Failed to request cluster-info, will try again: G…...

车载以太网-传输层-TCP

文章目录 TCP协议TCP协议报文格式TCP报文的示例TCP建立连接TCP断开连接TCP协议测试TCP协议 车载以太网TCP协议是一种在车载以太网网络中使用的传输控制协议(TCP)。它是一种面向连接的协议,用于在车辆之间或车辆与基础设施之间传输数据。TCP协议提供了可靠的数据传输,确保数…...

java:简单入门定时任务的几种方式Timer、Quartz、Spring Task

背景 后端的定时任务在许多应用中都扮演着重要的角色,它们可用于处理重复性任务、执行定期操作或处理需要定时触发的任务。以下是一些使用场景的示例: 数据同步:在分布式系统中,不同系统之间经常需要进行数据同步。例如&#xf…...

木子-前端-方法标签属性小记(普通jsp/html篇)2023~2024

目录 1、如何在前端页面将base转成存进input的图片格式 2、通过前端页面判断当前使用方式PC端还是手机端的极简易方法 1、如何在前端页面将base转成存进input的图片格式 不是直接存进input里,只是将文件转成对应的格式。 data.picPath是base64编码,我…...

音视频项目—基于FFmpeg和SDL的音视频播放器解析(十七)

介绍 在本系列,我打算花大篇幅讲解我的 gitee 项目音视频播放器,在这个项目,您可以学到音视频解封装,解码,SDL渲染相关的知识。您对源代码感兴趣的话,请查看基于FFmpeg和SDL的音视频播放器 如果您不理解本…...

使用netty实现WebSocket协议通信

服务器与浏览器之间实现通信,一般都是由浏览器发起http请求,服务端对http请求进行响应,要实现服务端主动向浏览器推送数据,一般采用的方案都是websocket主动推送,或者前端实现轮询方式拉取数据,轮询方式多少…...

uniapp开发小程序,包过大解决方案

1、首先和大家说一下 微信小程序 主包限制不能超过2M 分包一共不能超过8M 然后具体解决优化步骤如下, 将主包进行分包 在pages.json 下subPackages里面进行配置分包 分包配置完 配置过的文件都需要进行修改对应的路径 2 、 在运行的时候 一定要勾选 压缩代码 有…...

Go语言中string与byte转换

简介 string与byte的转换是最常见的一种,通常我们会使用强转方式,但其实还有另一种更加高效的方式,本文会演示两种转换方式。 普通转换 func main() {fmt.Println([]byte("abcd"))fmt.Println(string([]byte{1, 2, 3})) }输出 […...

机器学习8:在病马数据集上进行算法比较(ROC曲线与AUC)

ROC曲线与AUC。使用不同的迭代次数(基模型数量)进行 Adaboost 模型训练,并记录每个模型的真阳性率和假阳性率,并绘制每个模型对应的 ROC 曲线,比较模型性能,输出 AUC 值最高的模型的迭代次数和 ROC 曲线。 …...

70. 爬楼梯 --力扣 --JAVA

题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 解题思路 通过对爬楼梯进行分解,爬到当前台阶的方式分为两种,即由上一个台阶通过爬1和上两个台阶爬2,同公…...

体感互动游戏VR游戏AR体感游戏软件开发

随着科技的不断发展,体感互动游戏正逐渐成为游戏行业的一个重要趋势。这类游戏通过利用传感器、摄像头和运动控制器等技术,使玩家能够通过身体动作与游戏进行实时互动,极大地提升了娱乐体验。 1. 游戏设计与互动元素 体感互动游戏的核心在于…...

计算3个点的6种分布在平面上的占比

假设平面的尺寸是6*6,用11的方式构造2,在用21的方式构造3 2 2 2 1 2 2 2 2 2 1 2 2 2 2 2 1 2 2 3 3 3 x 3 3 2 2 2 1 2 2 2 2 2 1 2 2 在平面上有一个点x,11的操作吧平面分成了3部分2a1,2a…...

【香橙派】实战记录1——简介及烧录 Linux 镜像

文章目录 一、简介1、参数2、结构3、其他配件4、下载资料 二、基于 Windows PC 将 Linux 镜像烧写到 TF 卡的方法1、使用 balenaEtcher 烧录 Linux 镜像的方法2、效果 一、简介 Orange Pi Zero 3 香橙派是一款开源的单板卡片电脑, 新一代的arm64开发板,…...

redis之高可用

(一)redis之高可用 1、在集群当中有一个非常重要的指标,提供正常服务的时间的百分比(365天)99.9% 2、redis的高可用的含义更加广泛,正常服务是指标之一,数据容量的扩展、数据的安全性 3、在r…...

使用 Core Tools 在本地开发 Azure Functions

学习模块 使用 Core Tools 在本地创建和运行 Azure Functions - Training | Microsoft Learn 文档 使用 Core Tools 在本地开发 Azure Functions | Microsoft Learn GitHub - Azure/azure-functions-core-tools: Command line tools for Azure Functions 其它 安装适用于 A…...

Java零基础——Spring篇

1.Spring框架的介绍 1.1 传统的项目的架构 在传统的项目中,一般遵循MVC开发模型。 (1) view层与用户进行交互,显示数据或者将数据传输给view层。 (2) 在controller层创建service层对象,调用service层中业务方法。 (3) 在service层创建dao…...

jenkins清理缓存命令

def jobName "yi-cloud-operation" //删除的项目名称 def maxNumber 300 // 保留的最小编号&#xff0c;意味着小于该编号的构建都将被删除 Jenkins.instance.getItemByFullName(jobName).builds.findAll { it.number < maxNumber }.each { it.delet…...

什么是深度学习

一、深度学习的发展历程 1.1 Turing Testing (图灵测试) 图灵测试是人工智能是否真正能够成功的一个标准&#xff0c;“计算机科学之父”、“人工智能之父”英国数学家图灵在1950年的论文《机器会思考吗》中提出了图灵测试的概念。即把一个人和一台计算机分别放在两个隔离的房…...

数字IC基础:有符号数和无符号数加、减法的Verilog设计

相关阅读 数字IC基础https://blog.csdn.net/weixin_45791458/category_12365795.html?spm1001.2014.3001.5482 本文是对数字IC基础&#xff1a;有符号数和无符号数的加减运算一文中的谈到的有符号数加减法的算法进行Verilog实现&#xff0c;有关算法细节请阅读原文&#xff0…...

采购成本总是说不清?怎么打造让老板一眼看透的采购成本地图?

每100元营收中&#xff0c;就有超过60元经由采购之手花出去。 然而&#xff0c;辛辛苦苦一年&#xff0c;到了年底&#xff0c;采购最常听到的却是…… “钱到底花哪了&#xff1f;” “还能再降降吗&#xff1f;” 只有采购人员知道&#xff0c;各项费用成本明细分散在纸质合同…...

TIDAL音乐下载器终极指南:tidal-dl-ng让您轻松收藏高品质音乐

TIDAL音乐下载器终极指南&#xff1a;tidal-dl-ng让您轻松收藏高品质音乐 【免费下载链接】tidal-dl-ng TIDAL Media Downloader Next Generation! Up to HiRes / TIDAL MAX 24-bit, 192 kHz. 项目地址: https://gitcode.com/gh_mirrors/ti/tidal-dl-ng 还在为TIDAL平台…...

创业团队如何利用 Taotoken 以最小成本试验多种大模型能力

创业团队如何利用 Taotoken 以最小成本试验多种大模型能力 对于资源有限的创业团队而言&#xff0c;在产品早期验证阶段&#xff0c;快速、低成本地试验不同大模型的能力至关重要。直接对接多个厂商意味着需要分别注册账户、管理多个 API Key、理解不同的计费规则和接口规范&a…...

从OpenAI插件到GPTs Actions:基于Flask构建AI后端服务的完整指南

1. 项目概述与核心价值最近在整理一些旧项目&#xff0c;翻到了OpenAI早期推出的ChatGPT插件快速入门项目。虽然官方已经明确表示插件&#xff08;Plugins&#xff09;被GPTs和Actions所取代&#xff0c;但这个openai/plugins-quickstart仓库依然是一个极佳的学习样本。它用最精…...

因为电力公司接线员水平差/有人偷电导致家里电压偏高烧毁电线和充电器

我们这个楼梯有10个接线的人&#xff0c;三相电本来一边是中性线&#xff0c;另外有3根出线&#xff0c;也就是三相4线制&#xff0c;一般中性线电压0&#xff0c;其他3根出现电压220V&#xff0c;也不知道是电力公司的人接错了&#xff0c;还是有人故意在搞鬼&#xff0c;有人…...

KrkrzExtract:krkrz引擎XP3资源解包工具技术文档

KrkrzExtract&#xff1a;krkrz引擎XP3资源解包工具技术文档 【免费下载链接】KrkrzExtract The next generation of KrkrExtract 项目地址: https://gitcode.com/gh_mirrors/kr/KrkrzExtract KrkrzExtract是一款专门针对krkrz游戏引擎设计的下一代资源解包工具&#xf…...

Android框架层深入解析与面试指南

本文基于Android开发工程师职位描述,聚焦于Android框架层(Framework Layer)的核心内容。Framework层是Android系统的核心骨架,负责管理应用生命周期、资源分配、进程间通信等关键功能。职位描述中强调的AMS(Activity Manager Service)、PMS(Package Manager Service)、…...

别再手动拼接Prompt了!用LangChain的Prompt Templates和Output Parsers,5分钟搞定结构化输出

告别Prompt拼接时代&#xff1a;用LangChain实现结构化输出的工业级实践 在构建大语言模型应用时&#xff0c;开发者常陷入两个典型困境&#xff1a;一是需要反复手工拼接复杂的Prompt模板&#xff0c;二是要处理模型返回的非结构化文本。这种工作不仅低效&#xff0c;而且容易…...

ORB-SLAM3 从理论到代码实现(五):sim3 优化

1. 前言 该函数实现于 src/Optimizer.cc 文件中&#xff0c;被 src/LoopClosing.cc 文件中的LoopClosing::ComputeSim3() 调用。如果当前关键帧&#xff0c;与某一候选关键帧匹配时&#xff0c;则会计算两帧之间的 Sim3 变换 gScm&#xff08;候选关键帧到当前帧的Sim3变换&am…...

现代化终端模拟器开发:从原理到实践,构建智能开发环境

1. 项目概述&#xff1a;一个面向未来的终端模拟器在开发者的日常工作中&#xff0c;终端&#xff08;Terminal&#xff09;是连接我们与计算机系统核心的桥梁。无论是进行服务器运维、代码编译、版本控制还是日常的文件操作&#xff0c;一个高效、稳定且功能强大的终端模拟器&…...