From 7864c86c44269316d2785491a6850660251da07d Mon Sep 17 00:00:00 2001 From: faweizhao26 Date: Wed, 15 Jun 2022 16:00:12 +0800 Subject: [PATCH] add new case Signed-off-by: faweizhao26 --- content/zh/case/_index.md | 4 + content/zh/case/gxjtkyy.md | 143 ++++++++++++++++++++++++++++ content/zh/case/turing.md | 16 +++- static/images/case/logo-gxjtkyy.png | Bin 0 -> 26818 bytes 4 files changed, 160 insertions(+), 3 deletions(-) create mode 100644 content/zh/case/gxjtkyy.md create mode 100644 static/images/case/logo-gxjtkyy.png diff --git a/content/zh/case/_index.md b/content/zh/case/_index.md index e8f791e8b..b870738a6 100644 --- a/content/zh/case/_index.md +++ b/content/zh/case/_index.md @@ -76,6 +76,10 @@ section2: content: "中科金财是国内领先的区块链技术与金融科技综合服务商,致力于打造领先的产业互联网科技赋能平台。" link: "sinodata/" + - icon: "images/case/logo-gxjtkyy.png" + content: "广西交科集团有限公司是一家在交通运输系统中具有重要影响力的高新技术企业,致力于为建设交通强国贡献智慧解决方案。" + link: "gxjtkyy/" + section3: title: 'KubeSphere 助力各行各业' tip: 全部 diff --git a/content/zh/case/gxjtkyy.md b/content/zh/case/gxjtkyy.md new file mode 100644 index 000000000..e12a2506e --- /dev/null +++ b/content/zh/case/gxjtkyy.md @@ -0,0 +1,143 @@ +--- +title: gxjtkyy +description: + +css: scss/case-detail.scss + +section1: + title: 广西交科集团 + content: 广西交科集团有限公司是一家在交通运输系统中具有重要影响力的高新技术企业,致力于为建设交通强国贡献智慧解决方案。 + +section2: + listLeft: + - title: 公司简介 + contentList: + - content: 广西交科集团有限公司软件研究院成立于 2017 年,前身为公司智能交通所软件研发中心,主要从事高速公路领域的软件开发、系统集成业务 , 为行业客户提供相关解决方案。现拥有软件著作权 74 项、软件产品 90 项,并通过 IS09001 质量体系认证,是广西高速公路领域最大的软件服务提供商。该院已获得美国 CMMI 研究院颁发的 CMMI5 级评估证书,在软件研发能力成熟度和项目管理方面达到了国际较高水平。 + - content: 该院专注高速公路收费领域,在高速公路收费、高速公路运营管理支持、城市公共交通支付等领域取得突出成果,研发的“高速公路 IC 卡‘一卡通’联网收费系统”使广西率先成为全国第一批实现高速:公路联网收费的省份;成功研发了广西第-套具有完全知识产权的“ETC 不停车收费系统”,包含广西高速公路联网电子不停车收费 (ETC) 系统服务及结算平台、ETC 联网清分中心系统、ETC 密钥管理系统等,ETC 不停车收费车道系统已经覆盖全广西范围内的高速公路并实现全国互联互通。二十多年来在广西累计建设 MTC 车道 3300 多条,ETC 车道 1600 多条,自动发卡机车道 370 多条。除专注发展高速公路收费领域外,该院在发展高速公路建管养一体化领域、口岸信息化领域也取得显著成果。 + image: https://pek3b.qingstor.com/kubesphere-community/images/gxjtkyy-1.png + + - title: 建设目标 + contentList: + - content: 我们期望基于 K8s 搭建 PaaS 云计算平台。使用多租户方式管理和使用资源。集成 CI/CD 支持灵活扩容与升级集群。构建企业级一站式 DevOps 架构,提供集群资源的可监控性服务。 + image: + + - title: 环境痛点 + contentList: + - content: 在使用 K8s 前,我们使用由第三方的运维团队负责的虚拟机管理平台。开发部署环境混乱,运维管理成本大,服务器资源利用率低。由于安全需要,每次登陆虚拟机都需要先经过一个堡垒机,然后再输入目标虚拟机的账户密码才能登录。 + - content: 由于虚拟机的账户密码每 3 个月就会更换一次,所以每次登录都需要先查表才能知道最新的密码,非常麻烦。另外,每次更换密码也都需要运维人员大量纯手工操作,极其耗费时间。开发人员上线新应用时,需要运维人员支持先分配一台或多台虚拟机后将 IP 和账户密码发给开发人员,从此开发人员就拥有这个虚拟机的使用权,开发人员需要从 0 开始配置虚机的系统环境,安装中间件,手动上传应用,最后,再手动将应用运行起来。 + - content: 应用下线时,开发人员一般是不会及时通知运维人员去回收资源的,因为重新配置一台机器非常麻烦,所以总是优先考虑留着资源,以备新的应用上线。由于运维人员对每个虚机的实际使用情况根本无法掌握,所以虚拟机资源经常无法回收,造成了大量服务器资源的浪费。 + image: + + - title: IT 运维与开发团队的规模 + contentList: + - content: 基础设施运维 3 人 , 开发团队 70 人。 + image: + + - title: 背景介绍 + contentList: + - content: 在拥抱云原生之前,我们有上百台虚拟机被运维和开发人员同时管理,应用分布散乱,管理起来既费时又费力,已经是失控的边缘。拥抱云原生,使用 K8s 之后,我们采用 DevOps,统一分配资源。释放了运维人员的生产力,提升了开发人员的开发效率。 + - content: 初期,我们部署了原生 K8s, 使用原生 Dashboard 运行了一段时间。后来觉得它对用户的认证方式过于粗放,UI 界面也不太友好,学习成本过高。直到有同事推荐了 KubeShpere,尝试着登录他们的官网,浏览帮助文档,登录社区论坛。 "more than Kubernetes and easier than Kubernetes"——“比 K8s 强大,又比 K8s 易用”,从部署到运维体现得淋漓尽致。相对于同类产品的优势在于国人开发,本地化程度很高,面向开发用户友好,多租户的权限细粒度管理,日志查询界面便捷,周边生态整合全面,可灵活配置需要模块。 + - content: 目前,我们已经搭建了两套 KubeSphere 环境。测试环境由 2 台物理机和一台虚机构成(1 个主节点 2 个工作节点)。生产环境由 5 台物理机构成(2 个主节点 3 个工作节点)。借着最近一个系统改造契机,我们已经把 80% 的应用运行在 KubeSphere 之上,后续的新开发的应用也都会直接部署 KubeSphere 环境上。 + image: + + - title: 实践过程 + contentList: + - specialContent: + text: KubeSphere 在相关业务的基础设施与部署架构 + level: 3 + - content: 我们依托 KubeSphere 部署 Redis、RabbitMq、搭建 Elasticsearch 集群,Kibana 等。 + - content: 部署 Redis + image: https://pek3b.qingstor.com/kubesphere-community/images/gxjtkyy-2.png + - title: + contentList: + - content: 部署 RabbitMQ + image: https://pek3b.qingstor.com/kubesphere-community/images/gxjtkyy-3.png + - title: + contentList: + - content: 部署 Elasticsearch 集群 + image: https://pek3b.qingstor.com/kubesphere-community/images/gxjtkyy-4.png + - title: + contentList: + - content: 部署 Kibana + image: https://pek3b.qingstor.com/kubesphere-community/images/gxjtkyy-5.png + - title: + contentList: + - content: 现在核心业务的数据库我们使用的是物理机部署 Oracle,后续的一些轻量级应用我们计划可以依托 KubeSphere 部署 MySQL。 + image: + - title: + contentList: + - specialContent: + text: KubeSphere 在 CI/CD 的应用 + level: 3 + - content: 由于在使用 KubeSphere 之前,我们已经有一套 CI/CD 流程,所以我们的 Jenkins 和 Harbor 没有使用 KubeSphere 提供的构建流水线服务,后续我们会进行一些探索,尝试采用 Helm 构建应用,更好贴合 KubeSphere 的应用市场。 + image: https://pek3b.qingstor.com/kubesphere-community/images/gxjtkyy-6.png + - title: + contentList: + - specialContent: + text: KubeSphere 自带集群监控 + level: 3 + - content: 整体监控 + image: https://pek3b.qingstor.com/kubesphere-community/images/gxjtkyy-7.png + - title: + contentList: + - content: 各个节点资源监控 + image: https://pek3b.qingstor.com/kubesphere-community/images/gxjtkyy-8.png + - title: + contentList: + - content: 应用监控 + image: https://pek3b.qingstor.com/kubesphere-community/images/gxjtkyy-9.png + - title: + contentList: + - content: 应用日志查看 + image: https://pek3b.qingstor.com/kubesphere-community/images/gxjtkyy-10.png + - title: + contentList: + - content: 自定义监控报警 + image: https://pek3b.qingstor.com/kubesphere-community/images/gxjtkyy-11.png + + - title: 公司业务与 KubeSphere 的契合点 + contentList: + - content: 我们项目组成员缺乏 Docker 和 K8s 的使用经验。KubeSphere 无缝契合 K8s,操作画面友好,我们的开发人员能够低成本上手使用 K8s,享受 K8s 带来的便携性。 + - content: KubeSphere 的多租户架构与我们集团公司的企业架构一致。架构分三个层级。集群,企业空间和项目。其中,KubeSphere 中的最底层的项目等同于 Kubernetes 的命名空间。集群、企业空间是构建在 K8s 的名字空间之上的进一步抽象。KubeSphere 可以为建立多个集群,对应一个集团公司,一个集群下可以建立多个企业空间,对应一个公司,一个企业空间可以建立多个项目,对应公司实际产品线,每个层级的一个实例就是一个 Workspace,其他与同层次其他实例的资源隔离。 + image: + + - type: 1 + contentList: + - content: 服务器资源利用率显著提高 + - content: 运维管理成本降低 + - content: 业务系统可靠性提高 + + - title: 落地成效 + contentList: + - content: 我们在落地了 KubeSphere 之后,有了以下成效。 + - content: 1. 开发部署环境已经被有序管理。应用都运行在容器平台中,使用多少资源一目了然。 + - content: 2. 运维管理成本降低。统一通过 KubeSphere 登录容器平台,不论查看应用日志,进入容器内部进行操作,修改应用配置都十分便利。 + - content: 3. 服务器资源利用率显着提高。我们原先使用了 30 多台物理机来构建我们应用,现在仅使用了 8 台物理机,解放了大量服务器资源。 + - content: 4. 务系统可靠性提高。K8s 自带容器存活探针,当应用无法正常使用给予预警提示,自动重启容器。以前我们升级应用的时候,一般都会发个通告,暂停业务半小时,现在升级应用对业务几乎无感。 + image: + + - type: 2 + content: 'KubeSphere 帮助我们有序管理服务器资源,简化了开发、测试、部署、运维各个流程。' + author: '广西交科集团' + + - title: 未来规划 + contentList: + - content: 未来我们会逐步扩大应用场景,在集团公司其他业务领域基建、口岸等信息化建设工程中应用。 + - content: 另外,我们想在服务网格方面进行探索,尽量在 KubeSphere 平台中实现业务与技术分离。 + - content: 目前,我们公司软件队伍主要利用 Java 语言做相关业务领域的开发,未来我们可以组建精通 Golang 技术的团队从事一些云原生中间件的开发。 + image: + + rightPart: + icon: /images/case/logo-gxjtkyy.png + list: + - title: 行业 + content: 交通 + - title: 地点 + content: 中国广西 + - title: 云类型 + content: 私有云 + - title: 挑战 + content: 统一的产品发布运维管理 + - title: 采用功能 + content: DevOps、日志、监控 +--- diff --git a/content/zh/case/turing.md b/content/zh/case/turing.md index e8ef3c0cb..f25ae4ef2 100644 --- a/content/zh/case/turing.md +++ b/content/zh/case/turing.md @@ -78,7 +78,13 @@ section2: contentList: - content: KubeSphere 平台在插件安装这块的体验比较好,只需要对配置文件相应做调整就能很容易实现。比如日志平台默认由 Elasticsearch 做存储,但我们已经自建有 Elasticsearch 集群,只需要调整 ks-installer 配置。 image: https://pek3b.qingstor.com/kubesphere-community/images/tuling-10.png + - title: + contentList: + - content: image: https://pek3b.qingstor.com/kubesphere-community/images/tuling-11.png + - title: + contentList: + - content: image: https://pek3b.qingstor.com/kubesphere-community/images/tuling-12.png - title: contentList: @@ -93,16 +99,20 @@ section2: contentList: - content: 1. 环境区分:我们的环境对应的是 KubeSphere 中的项目,通过在流水线中指定对应配置文件区分。 image: https://pek3b.qingstor.com/kubesphere-community/images/tuling-13.png + - title: + contentList: + - content: image: https://pek3b.qingstor.com/kubesphere-community/images/tuling-14.png - title: contentList: - - content: - content: 2. 前端 Node 环境指定:由于 KubeSphere 平台默认提供的 Node.js 版本和我们所需版本有差异,所以结合自己经验对平台 Node.js 环境通过 Jenkins 插件方式进行了修改,后续流水线中指定对应版本即可。这种方式稍显麻烦,可能通过在流水线中指定镜像应该也能满足,但还未实践。 image: https://pek3b.qingstor.com/kubesphere-community/images/tuling-15.png - image: https://pek3b.qingstor.com/kubesphere-community/images/tuling-16.png - title: contentList: - - content: + - content: + image: https://pek3b.qingstor.com/kubesphere-community/images/tuling-16.png + - title: + contentList: - content: 日志采集这块,KubeSphere 平台提供了 FluentBit Operator,在集群所有节点以 DaemonSet 运行,并统一部署配置了 Fluent Bit,同时查询方式能满足现有业务。只有 Elasticsearch 我们对接了自己的环境。 image: https://pek3b.qingstor.com/kubesphere-community/images/tuling-17.png diff --git a/static/images/case/logo-gxjtkyy.png b/static/images/case/logo-gxjtkyy.png new file mode 100644 index 0000000000000000000000000000000000000000..4b7b00f8f418f455b2c20c6c0bab6fd9854e73aa GIT binary patch literal 26818 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 literal 0 HcmV?d00001