东方通信基于 KubeSphere 的云计算落地经验

作者:周峰 吴昌泰

公司简介

东方通信股份有限公司(以下简称“东方通信”)创立于 1958 年,是一家集硬件设备、软件、服务为一体的整体解决方案提供商。公司于 1996 年成功改制上市,成为上海证交所同时发行 A 股和 B 股的国有控股上市公司。公司业务主要包括:专网通信及信息安全产品和解决方案、公网通信相关产品及 ICT 服务、金融电子设备及软件产品、智能制造业务。

十四五期间,公司主责主业聚焦在以专网通信、公网通信、ICT 服务为基础的“信息通信产业”,金融电子为基础的“金融科技产业”和“智能制造产业”三大产业,围绕主责主业不断创新与转型升级。 肩负“科技创造价值,共筑美好生活”的使命,东方通信坚持“诚信、务实、创新、共赢”的理念,致力于为客户提供优质的产品、便利的体验、完美的方案和满意的服务,努力成为在国际市场中拥有优势品牌、持续创新和发展的领先企业!

技术现状

  • 在使用 KubeSphere 之前,公司已经开始研究云原生和探索应用上云的道路。但是由于每个团队接触和学习云原生技术的时间不同,原生 Kubernetes 的使用还是存在一定的门槛。并且随着公司云的基础设施和使用团队的的增加,也提高了云平台团队对云的管理难度。
  • 项目的交付方式还是传统的瀑布式开发模式,没有高效的流程,不同的环境下需要对应的开发或运维人员手动部署,增大出现差异性和错误的几率。

团队规模

公司拥有国家级企业技术中心和博士后工作站,承担着多项国家重点研发项目,并多次荣获国家科技进步奖,现有员工 2500 余名,其中 75% 以上为技术专业人才。

背景介绍

近几年,云原生技术已经不再是一个新鲜词汇,根据权威 IT 研究公司 Gartner 预测,到 2025 年,云原生平台将成为 95%以上的新数字化计划的基础,而在 2021 年这一比例只有不到 40%。云原生技术在效率上的巨大优势,使其逐渐成为 IT 发展的主流趋势。

针对用户在业务上提出的一些需求,云原生技术能够为我们提供更多的选择。以我司最近的一个项目为例,用户要求为每条业务线路提供主备实例,同时还需要提供容灾备份。在传统部署方式下,需要采购的服务器数量是业务线路数量的 4 倍。但是使用云原生技术,通过容器的方式来实现业务线路之间的隔离,可以大大降低基础设施部署的成本,使用 Kubernetes 作为编排引擎,以声明式脚本的方式部署业务,规范并简化了部署流程,提高了可重复性和一致性。

上面举例中提到的只是云原生技术带来的其中一部分改变,随着业务更加深入的进行云化改造,还可以在业务的弹性和高可用,敏捷开发等方面带来更多的价值。

选型说明

工具选型的过程

公司与 KubeSphere 的相遇始于针对 Kubernetes 的 Dashboard 的选型。在使用 KubeSphere 之前,我们也研究和试用了许多其他的项目,比如 Kubernetes 官方的 Dashboard 和其他市场同类型产品。Kubernetes 官方的 Dashboard 的功能比较单一,只是提供了对集群资源的管理,市场同类型产品虽然功能更丰富,但还是无法完全满足我们的需求。

选择 KubeSphere 的原因

最终选择 KubeSphere 的原因有以下几点:

  • 首先,KubeSphere 不仅仅只是单纯的 Dashboard ,除了针对 Kubernetes 资源管理之外,还提供了统一的集群管理、包含日志、审计、监控在内的强大的可观测性等许多附加功能。同时提供可插拔组件的部署方式,既满足了功能多样性,又满足了部署的灵活性需求。
  • 其次,KubeSphere 很好的集成了 DevOps 自动化流程,而 DevOps 自动化流程是提高软件交付速度、保障质量和可靠性的最佳实践方法。
  • 最后,我们看重的是 KubeSphere 活跃的开源社区。最为一款开源产品,一个充满活力的开放性开源社区,才能提供充分的能力和技术知识支持,让大家能共享开源模式所带来的红利。

实践过程

基础设施与部署架构

在使用 KubeSphere 的过程中,我们首先是借助 KubeSphere 提供的多集群和多租户功能对现有的集群资源和云上的组织整体架构做了调整,下图所示是我们现在基于 KubeSphere 的东信云组织架构。

利用多集群管理功能,对现有的集群资源进行了统一管理。既实现了隔离不同环境,又实现了跨集群的统一管理。通过统一的控制平面,将应用程序及其副本分发到不同集群,实现了集中监控、日志系统、事件和审计日志。

其次,借助多租户管理功能,为不同的事业部创建各自的企业空间(WorkSpace),在企业空间中控制资源访问权限。每个企业空间下按开发、测试、运维小组划分为不同的部门,同时为每个项目创建项目空间(NameSpace)。部门作为权限管理的逻辑单元,通过设置项目角色使部门拥有项目的对应权限,再将用户分配至部门后,简化对新加入成员的权限分配过程。

引入 DevOps 工作流,利用 S2I、B2I 实现镜像的快速交付,借助 Jenkins 流水线实现 CI/CD,帮助团队实现软件的快速、安全、可靠地交付。

借助 KubeSphere 的应用商店功能来管理应用程序的整个生命周期(提交、审核、测试、发布、升级和下架),同时我们还部署了 Harbor 来管理容器镜像。

存储实现方案

为了解决持久化存储的问题,采用基于 nfs-subdir-external-provisioner 的 storageclass 作为存储类,同时对不方便进行改造的业务支持使用本地存储。由用户创建业务 Pod 和 PVC 来申请使用一定量的存储资源,集群管理员管理存储类和 PV,如果使用的是 NFS 类型的存储,由 nfs-subdir-external-provisioner 根据 PVC 申请的存储大小自动创建 PV,如果使用的是本地存储,则由管理员负责手动创建 PV。

日志和监控方案

为了实现日志文件持久化存储,从容器中读取日志可读,且重启和掉电不丢。采用 EFK(Elasticsearch + Fluentd + Kibana)的日志收集和分析方案来帮助有效的管理和分析大规模日志数据。日志收集目标包括:Docker 组件日志、业务容器日志、管理面组件日志。Elasticsearch 组件目前是直接使用 KubeSphere 内置的 ES,后期为了提升性能,考虑接入外部的 Elasticsearch。

引入 Prometheus 服务作为监控中心,定时采集业务容器、控制面组件以及物理服务器三个层面的指标数据,通过 KubeSphere 界面或 Grafana 的界面展示详细信息。使用采集到的各种指标来判断业务或集群是否正常,针对异常可通过 Prometheus 的 AlarmManage 告警功能进行信息的转发,将告警信息同步到网管(内部管理平台)或通过邮箱、短信、钉钉等方式通知到运维人员。

多租户管理

这里我们想重点分享一下我们针对 KubeSphere 的多租户结构的分析,KubeSphere 在 Kubernetes 的 RBAC 和命名空间提供的基本的逻辑隔离能力基础上,增加了企业空间提供了跨集群、跨项目(即 Kubernetes 中的命名空间)共享资源的能力和权限控制。下面的分析都是基于我们公司使用的 KubeSphere V3.3.0 版本展开。

多租户元素资源类型来源
用户users.iam.kubesphere.ioKubeSphere crds
平台角色globalroles.iam.kubesphere.ioKubeSphere crds
平台角色绑定globalrolebindings.iam.kubesphere.ioKubeSphere crds
企业空间workspaces.tenant.kubesphere.ioKubeSphere crds
workspacesTemplate.tenant.kubesphere.ioKubeSphere crds
企业空间角色workspaceroles.iam.kubesphere.ioKubeSphere crds
企业空间角色绑定workspacerolebindings.iam.kubesphere.ioKubeSphere crds
项目namespaceK8s 自带
项目角色rolesK8s 自带
项目角色绑定rolebindingsK8s 自带
  1. 用户 Users

用户是 KubeSphere 的帐户实例,是登陆 KubeSphere 控制台的实体账号,在 KubeSphere 中使用 users.iam.kubesphere.io 资源对用户进行抽象。

用户信息中保存了用户名、密码、最后登陆时间等信息。

  • 平台角色 globalroles

在 KubeSphere 中平台角色使用 globalroles.iam.kubesphere.io 资源抽象。安装成功后,会预创建 4 个内置的平台角色,每个平台角色实际又关联着一个或多个平台模板角色(平台角色的权限是关联模板角色权限的集合)。

内置角色描述
workspaces-manager企业空间管理员,管理平台所有企业空间。
users-manager用户管理员,管理平台所有用户。
platform-regular平台普通用户,在被邀请加入企业空间或集群之前没有任何资源操作权限。
platform-admin平台管理员,可以管理平台内的所有资源。

以 users-manager 角色为例子,其关联了用户查看、角色查看、用户管理、角色管理四个模板角色,这让 users-manager 角色拥有了这四个角色模板下所对应的资源访问权限。

  • 平台角色绑定 globalrolebindings

创建用户后,需要为用户分配一个平台角色,使用 globalrolebindings.iam.kubesphere.io资源来抽象用户和平台角色的绑定关系。

在创建一个新的平台角色时,需要编辑权限,此时就是为新创建的平台角色关联预创建的角色模板。

  1. 企业空间 WorkSpace

企业空间是 KubeSphere 中用来管理项目、DevOps 项目、应用模板和应用仓库的一种逻辑单元。可以在企业空间中控制资源访问权限,也可以安全地在团队内部分享资源。在 KubeSphere 中使用 workspaces.tenant.kubesphere.ioworkspacesTemplate.tenant.kubesphere.io 资源对企业空间进行抽象。

  • 企业空间角色 workspaceroles

在 KubeSphere 中企业空间角色使用 workspaceroles.iam.kubesphere.io 资源抽象。安装成功后,会预创建 4 个内置的企业空间角色,每个企业空间角色实际又关联着一个或多个企业空间模板角色(企业空间角色的权限是关联企业空间模板角色权限的集合)。

名称描述
workspace-viewer企业空间观察员,可以查看企业空间中所有资源。
workspace-self-provisioner企业空间普通成员,可以查看企业设置、管理应用模板、创建项目和 DevOps 项目。
workspace-regular企业空间普通成员,可以查看企业空间设置。
workspace-admin企业空间管理员,可以管理企业空间中的所有资源。

以 system-workspace-viewer 为例子,其关联了业空间设置查看、角色查看、成员查看、部门查看、项目查看、DevOps 项目查看、应用模板查看、应用仓库查看八个模板角色。

  • 企业空间角色绑定 workspacerolebindings

在企业空间中,可以在企业空间成员处邀请用户加入企业空间,邀请用户加入时,还需要为其分配企业空间角色,使用 workspacerolebindings.iam.kubesphere.io 资源来抽象用户和企业空间角色的绑定关系。

此处以企业空间的默认管理员角色为例(管理员的角色绑定是在创建企业空间时选择管理员时绑定)。

  1. 项目 NameSpace

KubeSphere 中项目就是 K8s 中的命名空间,使用的就是 NameSpace 资源来抽象项目,企业空间和项目的关系是一对多,即一个企业空间下,可以创建多个项目。K8s 的默认命名空间和 KubeSphere 系统相关的命名空间,都归属于默认企业空间 system-workspace。

下面在前面创建的 demo-ws 企业空间下创建一个新的项目 demo-ws-project-01

  • 项目角色 roles

在 KubeSphere 中项目角色对应的就是 K8s 自带的 roles 资源。但是通过 KubeSphere 创建新项目时,会自动创建 3 个内置的项目角色,每个项目角色实际又关联着一个或多个项目模板角色(项目角色的权限是关联项目模板角色权限的集合)。

内置角色描述
viewer项目观察者,可以查看项目下所有的资源。
operator项目维护者,可以管理项目下除用户和角色之外的资源。
admin项目管理员,可以对项目下的所有资源执行所有操作。此角色可以完全控制项目下的所有资源。

下图展示的是 demo-ws-project-01 项目下的项目角色,如需查看其他项目下的角色,需要带-n参数指定项目名(命名空间)。

以 viewer 角色为例,关联了如下的项目模板角色。

  • 项目角色绑定 rolebindings

在项目下,可以在项目成员处邀请用户加入项目,邀请用户加入时,还需要为其分配项目角色,此时使用的就是 K8s 自带的 rolebindings 资源。

demo-ws-project-01 项目下绑定关系为例。

从下图可以看到,admin 用户绑定了该项目下的 admin 角色。

使用效果

对比使用 KubeSphere 之前,在针对 Kubernetes 集群的管理和使用上,我们有以下几点感受:

  • 在使用了 KubeSphere 之后,原有的分散管理的多个集群在逻辑上组成了一个大一统环境,集群管理的许多操作不需要再分别连接到不同集群上去操作,对多个集群的状态监控也能够在统一的入口获取,极大的提高了管理的效率。
  • 项目交付和部署更加的规范,减少了因环境和不同人员操作而可能产生的差异性,特别是应用商城让应用如同货架上的商品一样唾手可得,应用的部署也只需要很少的修改后即可一键安装。
  • 友好的用户界面和可视化的操作方式,降低了公司其他团队使用云的门槛,让即使是刚接触云原生的团队,也能很快的上手。

未来规划

未来我们计划探索和使用更多 KubeSphere 的组件功能,如审计日志、服务网格等。针对东信团队的内部需求,对 KubeSphere 的源码进行二次开发,并争取能够回馈社区。积极参与社区活动,与社区进行更加深入的交流。

同时,对于 KubeSphere,我们也有一些建议:

  • KubeSphere 页面上能提供的监控数据只有 CPU 内存这些基本数据,日志检索功能也不是特别方便,我们现在是通过手动跳转到 Grafana 和 Kibana 页面使用,希望未来能有更好用的日志和监控功能。

  • 目前官方提供的使用文档相对简单,有些功能只是简略带过,希望能细化文档,最好是出一些视频类的使用教程。

  • 源码中的注解信息比较少,增加了源码解读的难度,也希望官方能推出一些指导源码解读的文档。

本文由博客一文多发平台 OpenWrite 发布!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/38481.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jenkins手把手教你从入门到放弃01-jenkins简介(详解)

一、简介 jenkins是一个可扩展的持续集成引擎。持续集成,也就是通常所说的CI(Continues Integration),可以说是现代软件技术开发的基础。持续集成是一种软件开发实践, 即团队开发成员经常集成他们的工作,通…

Ribbon 负载均衡服务调用

文章目录 1 SpringCloud Load Balance2 总结:3 Ribbon工作流程:4 自定义Ribbon 负载均衡算法:4.1 iRule接口:4.2 Ribbon自带的负载均衡算法:4.3 负载均衡算法替代:4.3.1、在非启动类包及子包下创建配置类4.3.2、定义4.…

网络虚拟化相关的Linux接口介绍

Linux拥有丰富的网络虚拟化功能,能被虚拟机,容器还有云网络使用。在这篇文章中,我会给出所有通用网络虚拟化接口的简要介绍。没有代码分析,只有简短的接口介绍和在Linux上的使用操作。这系列接口都可以使用ip link命令实现。 这篇…

Spring核心和设计思想(1)

1.Spring是什么? 我们通常说的Spring指的是Spring FrameWork(Spring 框架),它是一个开源框架,有着活跃而庞大的社区,这就是它长久不衰的原因。Spring支持广泛的应用场景,它让Java企业级的应用程…

用html+javascript打造公文一键排版系统5:二级标题排版

公文中二级标题的一般以(X)标注(其中X为由"一二三四五六七八九十"中的字符组成的字符串),用楷体字加粗。 首先我们要判断一段文字是否包含二级标题,最简单的方法 就是判断文字中的头一个字符是否…

【Linux】Linux下的项目自动化构建工具——make和makefile

❤️前言 大家好,好久不见!今天小狮子为大家带来的文章是一篇关于Linux下的项目自动化构建工具——make和makefile的博客,希望能帮助到大家。 正文 当我们进行涉及多文件的工程开发时,我们需要对很多不同类型、不同功能&#xff…

基于R语言Meta分析与【文献计量分析、贝叶斯、机器学习等】多技术融合方法与应用

Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,最早出现于“循证医学”,现已广泛应用于农林生态,资源环境等方面。…

XUbuntu22.04之解决蓝牙鼠标不停掉线问题(追凶过程)(一百八十五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

Linux网络基础 — 网络层

目录 IP协议 IP协议报头格式 网段划分 特殊的IP地址 IP地址的数量限制 私有IP地址和公网IP地址 路由 补充 网络层 在复杂的环境中确定一个合适的路径。 IP协议 ip具有将数据从 主机A 跨网络送到 主机B 的能力。 主机: 配有IP地址,但是不进行路由控制的设备…

【Redis】Transaction(事务)

🎯前言 Redis事务是一个组有多个Redis命令的集合,这些命令可以作为一个原子操作来执行。 Redis事务通常用于以下两种情况: 保证操作的原子性:在多个命令的执行过程中,如果有一个命令执行失败,整个事务都需…

挖矿记录+解决方案:利用GitLab组件对服务器进行挖矿导致CPU占用200%

文章目录 什么是云服务器挖矿?事件记录事件分析产生影响解决方案后期预防什么是云服务器挖矿? 云服务器挖矿是指利用云服务器从事赚取比特币的活动。比特币是一种虚拟数字货币,挖矿是将一段时间内比特币系统中发生的交易进行确认,并记录在区块链上形成新区块的过程。 用于…

【字节流】写数据的三种方式以及两个问题

字节流写数据 1.字节流写数据三种方式 void write(int b):将指定的字节写入此文件输出流一次写一个字节数据 package com.bytestream; import java.io.FileOutputStream; import java.io.IOException; public class FileOutputStreamDemo02 {public static void ma…

融云「北极星」数据监控平台:数据可视通晓全局,精准分析定位问题

↑ 点击预约“融云北极星”直播↑ 点击预约“实时社区”直播 近期,融云“北极星”数据系统完成功能迭代,新模块“数据监控平台”正式“履新上任”。关注【融云全球互联网通信云】了解更多 点击图片查看更多详情 此前,“北极星”系统主要为客…

水声功率放大器的作用是什么

水声功率放大器是一种专门用于水声设备的高功率电子设备,主要用于提升水下信号的传输距离和保证语音清晰度。它的作用在水下通信、水下测量、海洋科学等领域都非常重要。 其主要作用有以下几个方面: 增强信号传输距离 水声信号在水中传播会受到各种因素的…

有哪些好用的远程传输大文件的软件

随着网络技术的日益进步和普及,大文件远程传输已经成为了人们生活和工作中必不可少的一部分。然而,在远程传输大文件的过程中,经常会遇到传输速度慢、容易受到干扰等问题,因此需要一款高效、稳定、安全的大文件远程传输软件来解决…

离线安装docker

目录 1、下载docker 安装包 2、上传docker 到服务器目录/opt/ 3、解压docker-19.03.9.tgz 4、解压的docker文件夹全部移动至/usr/bin目录 5、将docker注册为系统服务 6、重启生效 6.1、重新加载配置文件 6.2、启动Docker服务 6.3、查看启动状态 ​6.4、 设置docker为开…

伦敦金分析时切勿过分自信

伦敦金价格会呈趋势变动,这是投资者进行技术分析最根本、最核心的因素。根据物理学上的动力法则,趋势的运行会延续,直到有反转的现象产生为止。事实上,虽然伦敦金的价格不断上下波动,但终究是朝一定的方向前进的&#…

数组

数组: 数字组成的组,组里即可以,int类型,string,字符串,数组当中的数据类型,可以由用户自定义 同一种,也可以是不同的数据类型组成的元素集合 数组最大的作用,可以一次…

JVM系列(5)——类加载过程

一、类的生命周期 加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using&#xff09…