KubeSphere 在 vsleem 的落地实践

作者:方忠,苏州威视通智能科技有限公司技术经理,开源技术爱好者,长期活跃于 dromara 开源社区并参与贡献。

公司介绍

公司简介

苏州威视通智能科技有限公司,是一家全球领先的全景 AI 平台提供商,结合极致高效的数字孪生技术,实现房建公建、地产物业、城市更新、应急管理、石油化工、家装、零售等多元行业数字化赋能。

公司平台介绍

公司技术现状

  • 框架:SpringCloud
  • 部署模式:手动 Docker Compose
  • 监控:无
  • 告警:无
  • 日志查看:手动 Docker logs
  • 服务运维:纯手动

背景介绍

业务规模增长和痛点

随着公司业务增长,云端服务器和边端服务器数量增长迅速,而且伴随着海外业务的落地海外服务器也迅速增长,如果使用现在的技术去做运维,肯定是不可取的。

云原生的优势

云原生具有以下优势(篇幅所限,不展开介绍):

  • 弹性扩展
  • 高可用
  • 高效运维
  • 快速迭代
  • 降低成本
  • 灵活部署
  • 简化架构设计
  • 提高可移植性

选型说明

我们最终选择了 KubeSphere,是因为其具有以下功能特性,较符合我们的需求:

  • 简单多样化的安装方式(All in one、K8s、AWS)
  • 集群可视化、监控可视化
  • 多集群管理、多租户管理
  • 一体化的 DevOps(Jenkins+GitOps)
  • 丰富的开源组件(Fluent Bit、tower、jaeger)
  • 开箱即用的微服务治理
  • 支持 KubeEdge 边端运维

实践过程

架构演变

技术架构

生产集群规模

目前我们国内的业务部署在华为云、日本的业务部署在 AWS 上。

KubeSphere 安装

  1. 安装方式有 All-in-one、多节点和离线等多种安装方式,我们使用的是多节点安装
  2. 需要预先安装 socat、conntrack、ebtables、ipset
  3. 创建配置文件
// 版本号可以按照自己的需求配置
./kk create config --with-kubernetes v1.22.12 --with-kubesphere v3.3.0
// 使用修改后的配置文件安装集群
./kk create cluster -f config-sample.yaml
  1. 安装完成后控制台可以显示所有节点信息

多集群配置

  1. 多集群的连接方式有直接连接和代理连接,目前我的环境两套集群网络不互通所以采用了代理连接的方式
// 主集群配置
kubectl edit cc ks-installer -n kubesphere-system
// 配置文件修改
multicluster:clusterRole: hosthostClusterName: <主集群名称>
// 获取主集群的jwtSecret
kubectl -n kubesphere-system get cm kubesphere-config -o yaml | grep -v "apiVersion" | grep jwtSecret// 配置成员集群
kubectl edit cc ks-installer -n kubesphere-system
// 成员集群配置文件修改
authentication:jwtSecret: gfIwilcc0WjNGKJ5DLeksf2JKfcLgTZU
multicluster:clusterRole: member
  1. 在主集群上登录 KubeSphere 控制台添加集群即可

服务部署

  1. 制作服务的 dockerfile,以 gateway 服务为例
// 以springcloud的gateway服务为例
FROM swr.cn-east.myhuaweicloud.com/vsais/openjdk:11.0.02
MAINTAINER xxx
WORKDIR /home
COPY vs-gateway/target/vs-gateway.jar /home/vs-gateway.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","vs-gateway.jar"]
  1. 制作 gateway 的 service 文件
kind: Service
apiVersion: v1
metadata:name: gatewaynamespace: testlabels:app: gatewayversion: v1annotations:kubesphere.io/creator: adminkubesphere.io/serviceType: statelessservice
spec:ports:- name: http-0protocol: TCPport: 8080targetPort: 8080selector:app: gatewaytype: ClusterIP
  1. 部署 service 服务

  1. 制作 gateway 的 deployment 文件并部署
apiVersion: apps/v1
kind: Deployment
metadata:name: gateway  # Deployment 对象的名称,与应用名称保持一致namespace: testlabels:app: gateway  # 应用名称
spec:selector:matchLabels:app: gateway  #app 标签名称replicas: 1minReadySeconds: 30strategy: #部署策略更多策略 1.https://www.qikqiak.com/post/k8s-deployment-strategies/type: RollingUpdate #其他类型如下 1.重建(Recreate) 开发环境使用 2.RollingUpdate(滚动更新)rollingUpdate:maxUnavailable: 0maxSurge: 1template:metadata:labels:app: gatewayspec:volumes:- name: timezone-volumeconfigMap:name: timezone-configitems:- key: localtimepath: localtimerestartPolicy: Alwayscontainers:- name: gateway # 容器名称,与应用名称保持一致image: swr.cn-east.myhuaweicloud.com/vsais/gateway-test:v2.19env:- name: TZvalue: "Asia/Shanghai"volumeMounts:- name: timezone-volumereadOnly: truemountPath: /etc/localtimesubPath: localtimeimagePullPolicy: Always  #镜像拉取策略 1.IfNotPresent如果本地存在镜像就优先使用本地镜像。2.Never直接不再去拉取镜像了,使用本地的.如果本地不存在就报异常了。ports:- containerPort: 8080 #应用监听的端口protocol: TCP #协议 tcp和 udplivenessProbe:httpGet:path: /actuator/healthport: 8080initialDelaySeconds: 30periodSeconds: 10failureThreshold: 10readinessProbe:httpGet:path: /actuator/healthport: 8080initialDelaySeconds: 30periodSeconds: 10failureThreshold: 10imagePullSecrets:- name: huawei

  1. gateway 服务依赖了 configmap 和 secret 配置
// configmap
apiVersion: v1
kind: ConfigMap
metadata:name: timezone-config
data:localtime: /usr/share/zoneinfo/Asia/Shanghai
// secret
kind: Secret
apiVersion: v1
metadata:name: dockerhubnamespace: testannotations:kubesphere.io/creator: adminsecret.kubesphere.io/force-insecure: 'true'
data:.dockerconfigjson: >-eyJhdXRocyI6eyY2tlci5pbyIXxVlcCIsInBhc3N3b3JkIjoiVlNBSVNfdnNkZWVwMjAyMCIsImVtYWlsIjoiIiwiYXV0aCI3T2VFFVbFRYM1p6Wkd9In19fQ==
type: kubernetes.io/dockerconfigjson

  1. 其他服务依赖了 pvc 配置
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: report
spec:accessModes:- ReadWriteOnceresources:requests:storage: 2Gi

  1. 服务代码配置
// 直接使用nacos的服务名来通信
<profile><id>prod</id><properties><profiles.active>prod</profiles.active><nacos.server>nacos.prod:8848</nacos.server><nacos.discovery.group>PROD_GROUP</nacos.discovery.group><nacos.config.group>PROD_GROUP</nacos.config.group><logstash.address>127.0.0.1:4560</logstash.address></properties>
</profile>

监控

CI/CD

CI 这块我们使用了其他开源项目,CD 则使用了 Argo CD 同步服务。

未来规划

  • 鉴于 KubeSphere 在华为云和 AWS-日本的成功落地、年底继续着手在 AWS-新加坡的部署
  • 使用 EdgeMesh,彻底打通云边、边边的网络通信
  • 使用灰度发布代替滚动更新部署
  • 使用 CPU 技术虚拟化 CPU,KubeSphere 是否有此功能待探究

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1.15作业

使用计数型信号量设计&#xff1a;生产者和消费者模型 总结今天学习的API函数&#xff0c;写出函数参数和返回值的意思&#xff0c;并且说明函数功能 创建队列 osMessageQueueId_t osMessageQueueNew (uint32_t msg_count, uint32_t msg_si…

GBASE日期计算

在进行数据迁移的过程中&#xff08;DB2–>GBASE&#xff09;涉及到日期计算函数的改写&#xff1a; 原式子如下&#xff1a; SELECT TIMESTAMP(1900-01-01) INT(LEFT(MAX(DB_TIMESTAMP),3)) YEAR INT(SUBSTR(MAX(DB_TIMESTAMP),4,3)) -1) DAY INT(SUBSTR(MAX(DB_TIMEST…

Java项目:121SSM记账管理系统

博主主页&#xff1a;Java旅途 简介&#xff1a;分享计算机知识、学习路线、系统源码及教程 文末获取源码 一、项目介绍 记账管理系统基于SpringSpringMVCMybatis开发&#xff0c;系统主要功能如下&#xff1a; 收入项管理 支出项管理 收入方式管理 支出方式管理 添加收入…

vue中使用高德地图渲染热力图组件

一、在 index.html 文件中引入高德地图 JavaScript API 的 2.0 版本 SDK <script src"https://webapi.amap.com/maps?v2.0&key你的高德地图Key"></script>二、创建一个 Vue 组件&#xff0c;用于渲染地图和热力图 <template><div class&…

《ORANGE’S:一个操作系统的实现》读书笔记(三十一)文件系统(六)

上一篇文章记录了对文件的读写操作&#xff0c;那么文件操作到目前为止&#xff0c;已经完成了创建和读写&#xff0c;还剩下的常用操作就是删除文件了。这篇文章就来记录删除文件的实现以及总结一下为文件系统添加系统调用的步骤。 删除文件 删除是添加的反过程&#xff0c;…

MC服务器备份脚本

前言 最近开了个mc服务器&#xff0c;为了提高数据的安全性&#xff0c;使用python写了个简单的备份脚本 备份存档数据 代码如下&#xff1a; # -*- coding: utf-8 -*-import os import zipfile import datetime# 设置备份目录和备份文件名 backup_dir "/home/minecr…

通过浏览器判断是否安装APP

场景 求在分享出来的h5页面中&#xff0c;有一个立即打开的按钮&#xff0c;如果本地安装了我们的app&#xff0c;那么点击就直接唤本地app&#xff0c;如果没有安装&#xff0c;则跳转到下载。 移动端 判断本地是否安装了app 首先我们可以确认的是&#xff0c;在浏览器中无…

微服务自动化docker-compose

一、docker-compose介绍 Docker Compose是一个用来定义和运行多个复杂应用的Docker编排工具。例如&#xff0c;一个使用Docker容器的微服务项目&#xff0c;通常由多个容器应用组成。那么部署时如何快速启动各个微服务呢&#xff0c;一个个手动启动&#xff1f;假如有上百个微服…

解决RecyclerView刷新,数据显示错乱

【问题现象】 做一个条目展示的的项目用到RecyclerView&#xff0c;在界面中有收藏和取消收藏的功能&#xff0c;第一个出现的问题就是点击按钮收藏或者取消收藏后&#xff0c;按钮的状态发生了改变&#xff0c;但是当收藏或者取消收藏的条目上下滑动滑出屏幕外再次进入时&…

在检验试验台底座应注意哪几个方面——河北北重

试验台铁底座检验标准主要包括以下几个方面&#xff1a; 外观检验&#xff1a;检查试验台铁底座的外观是否完好&#xff0c;表面是否平整&#xff0c;是否有裂纹、破损等缺陷。 尺寸检验&#xff1a;检查试验台铁底座的长度、宽度、高度等尺寸是否符合设计要求。 材质检验&am…

1. Java Config配置Bean

1. Java Config配置Bean Java 5 的推出&#xff0c;加上当年基于纯 Java Annotation 的依赖注入框架 Guice 的出现&#xff0c;使得 Spring 框架及其社区也“顺应民意”&#xff0c;推出并持续完善了基于 Java 代码和 Annotation 元信息的依赖关系绑定描述方式&#xff0c;即 …

计算机毕业设计 | SpringBoot+vue校园问卷调查系统(附源码)

1&#xff0c;绪论 研究目的 在进入21世纪以后&#xff0c;互联网得到了蓬勃的发展&#xff0c;电子问卷调查也开始逐渐流行起来。传统纸质问卷和电子问卷相比较后&#xff0c;传统问卷还存在很多弊端&#xff1a; 问卷分发起来比较困难&#xff0c;并且分发试卷耗费大量的金…

What is `@Component` does?

Component 是Spring注解&#xff0c;用于标记Java类为Spring容器管理的一个Bean&#xff08;组件&#xff09; 当Spring通过类路径扫描机制发现带有 Component 注解的类时&#xff0c;会自动将其纳入到Spring IoC容器中进行实例化、配置和管理。 使用样例 基本的Component注…

CSS 基本选择器 复合选择器

文章目录 基本选择器标记选择器类别选择器ID选择器测试基本选择器 复合选择器交集选择器并集选择器后代选择器全选选择器测试复合选择器 基本选择器 准备几个HTML标签用来测试 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"U…

智能小程序能做什么?

一. 自定义Tab页 涂鸦提供了丰富的场景化、个性化的 ToC 智能服务&#xff0c;不仅可以快速低成本的自由搭建出更多智能服务&#xff0c;还为你提供了基于小程序技术方案的可自主可控的自定义开发链路&#xff0c;为拓展更多品牌化、个性化、差异化智能服务提供生态基础。 我…

Javaweb之SpringBootWeb案例的详细解析

SpringBootWeb案例 前面我们已经讲解了Web前端开发的基础知识&#xff0c;也讲解了Web后端开发的基础(HTTP协议、请求响应)&#xff0c;并且也讲解了数据库MySQL&#xff0c;以及通过Mybatis框架如何来完成数据库的基本操作。 那接下来&#xff0c;我们就通过一个案例&#xf…

word无法插入方程式(方程式反灰)

word无法插入方程式&#xff08;方程式反灰&#xff09; 来自实测>插入方程式&#xff0c;反灰用不了>随便存在哪里&#xff0c;右键看属性&#xff1a;>发现真的是doc&#xff0c;得改成docx才可以&#xff1a;>打开原始档案&#xff0c;另存为word文件即可&#…

什么是google算法?

谷歌算法本身指的是谷歌针对搜索引擎做的规定 要想在别人的地盘玩&#xff0c;那肯定要了解这个地盘的规定&#xff0c;不然做了什么违反了规定&#xff0c;谷歌肯定不会让你继续玩下去 要想做谷歌&#xff0c;那肯定要了解谷歌的算法&#xff0c;然而谷歌的算法也不是一成不变…

ros2 基础学习04 -colcon构建工具

一、colcon构建工具介绍 1.1 构建系统与构建工具 构建系统与构建工具区分点在于针对的对象不同&#xff0c;构建系统只针对一个单独的包进行构建&#xff0c;而构建工具重点在于按照依赖关系依次调用构建系统完成一系列功能包的构建。 1.2 构建系统 构建系统包括CMake、Pyt…

【python】进阶--->MySQL数据库(四)

一、主键约束 primary key : 唯一标识数据库中的每一条记录. 被主键的值唯一 主键列不能为null 每个表应该都要设置主键添加主键约束 在创建表时,直接在字段后面添加主键约束 create table 表名 (字段名 类型(长度) primary key )创建表时,不直接在字段后面添加主键…