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: host
    hostClusterName: <主集群名称>
// 获取主集群的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: gateway
  namespace: test
  labels:
    app: gateway
    version: v1
  annotations:
    kubesphere.io/creator: admin
    kubesphere.io/serviceType: statelessservice
spec:
  ports:
    - name: http-0
      protocol: TCP
      port: 8080
      targetPort: 8080
  selector:
    app: gateway
  type: ClusterIP
  1. 部署 service 服务

  1. 制作 gateway 的 deployment 文件并部署
apiVersion: apps/v1
kind: Deployment
metadata:
  name: gateway  # Deployment 对象的名称,与应用名称保持一致
  namespace: test
  labels:
    app: gateway  # 应用名称
spec:
  selector:
    matchLabels:
      app: gateway  #app 标签名称
  replicas: 1
  minReadySeconds: 30
  strategy: #部署策略更多策略 1.https://www.qikqiak.com/post/k8s-deployment-strategies/
    type: RollingUpdate #其他类型如下 1.重建(Recreate) 开发环境使用 2.RollingUpdate(滚动更新)
    rollingUpdate:
      maxUnavailable: 0
      maxSurge: 1
  template:
    metadata:
      labels:
        app: gateway
    spec:
      volumes:
        - name: timezone-volume
          configMap:
            name: timezone-config
            items:
              - key: localtime
                path: localtime
      restartPolicy: Always
      containers:
        - name: gateway # 容器名称,与应用名称保持一致
          image: swr.cn-east.myhuaweicloud.com/vsais/gateway-test:v2.19
          env:
            - name: TZ
              value: "Asia/Shanghai"
          volumeMounts:
            - name: timezone-volume
              readOnly: true
              mountPath: /etc/localtime
              subPath: localtime
          imagePullPolicy: Always  #镜像拉取策略 1.IfNotPresent如果本地存在镜像就优先使用本地镜像。2.Never直接不再去拉取镜像了,使用本地的.如果本地不存在就报异常了。
          ports:
            - containerPort: 8080 #应用监听的端口
              protocol: TCP #协议 tcp和 udp
          livenessProbe:
            httpGet:
              path: /actuator/health
              port: 8080
            initialDelaySeconds: 30
            periodSeconds: 10
            failureThreshold: 10
          readinessProbe:
            httpGet:
              path: /actuator/health
              port: 8080
            initialDelaySeconds: 30
            periodSeconds: 10
            failureThreshold: 10
      imagePullSecrets:
        - 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: dockerhub
  namespace: test
  annotations:
    kubesphere.io/creator: admin
    secret.kubesphere.io/force-insecure: 'true'
data:
  .dockerconfigjson: >-
    eyJhdXRocyI6eyY2tlci5pbyIXxVlcCIsInBhc3N3b3JkIjoiVlNBSVNfdnNkZWVwMjAyMCIsImVtYWlsIjoiIiwiYXV0aCI3T2VFFVbFRYM1p6Wkd9In19fQ==
type: kubernetes.io/dockerconfigjson

  1. 其他服务依赖了 pvc 配置
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: report
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    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 发布!

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

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

相关文章

界面控件DevExpress WPF属性网格 - 让应用轻松显示编辑各种属性事件

DevExpress WPF Property Grid&#xff08;属性网格&#xff09;灵感来自于Visual Studio&#xff0c;Visual Studio启发的属性窗口(对象检查器)让在WPF应用程序显示和编辑任何对象的属性和事件变得更容易&#xff01; P.S&#xff1a;DevExpress WPF拥有120个控件和库&#x…

Elasticsearch添加7.17.10IK分词器

Elasticsearch添加7.17.10IK分词器 在https://github.com/medcl/elasticsearch-analysis-ik/tree/7.x中未找到7.17.10版本的发布版本&#xff0c;如歌ik版本和Elasticsearch版本不同安装后无法启动。所以下载git上的源代码&#xff0c;并手动编译指定版本IK分词器。 &#xff…

2. 示例:Spring Boot 入门

1.1 概述 Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化新Spring应用的初始搭建以及开发过程。习惯优于配置 1.2 为什么使用Spring Boot J2EE笨重的开发、繁多的配置、低下的开发效率、复杂的部署流程、第三方技术集成难度大。 1.3 Spring Bo…

HarmonyOS 通过 animateTo讲解角度动画效果

本文 我们依旧来说动画 这次 我们来说角度 我们先写一个这样的代码模板 Entry Component struct Index {build() {Column({space: 30}) {Text("修改元素尺寸").fontSize(38).margin({top:188})Image("https://img2.baidu.com/it/u1814561676,2470063876&f…

gradle版本中-bin与-all区别

打开android studio下载的gradle文件&#xff0c;发现-all比-bin多了一个docs文件夹和一个src文件夹。-bin是编译后的二进制发布版&#xff0c;-all还包含了源码和文档&#xff0c;比-bin大了几十兆&#xff0c;两者其余没有区别。 android开发只关注gradle功能不关注实现的情况…

Rust-借用检查

Rust语言的核心特点是&#xff1a;在没有放弃对内存的直接控制力的情况下&#xff0c;实现了内存安全。 所谓对内存的直接控制能力&#xff0c;前文已经有所展示&#xff1a;可以自行决定内存布局&#xff0c;包括在栈上分配内存&#xff0c;还是在堆上分配内存&#xff1b;支…

虾皮广告数据:​如何利用广告数据优化虾皮(Shopee)销售业绩

在虾皮&#xff08;Shopee&#xff09;平台上&#xff0c;广告数据对于卖家来说是至关重要的&#xff0c;它可以帮助卖家了解广告的效果并进行相应的优化。通过监控和分析这些广告数据&#xff0c;卖家可以更好地理解广告的表现&#xff0c;调整广告策略&#xff0c;提高广告的…

网站监测工具的极与极,Site24x7 与百川云

今天我们聊聊我用 Site24x7 的感受。对于有网站监测有需求的站长们来说&#xff0c;Site24x7 确实是个很强大的应用。但是它与百川云网站监测完全不一样&#xff0c;百川云网站监测是适合用中小微企业的交互极简的saas 应用&#xff0c;Site24x7 完全是另一个极端&#xff0c;适…

【我与Java的成长记】之继承详解(二)

系列文章目录 能看懂文字就能明白系列 C语言笔记传送门 Java笔记传送门 &#x1f31f; 个人主页&#xff1a;古德猫宁- &#x1f308; 信念如阳光&#xff0c;照亮前行的每一步 文章目录 系列文章目录&#x1f308; *信念如阳光&#xff0c;照亮前行的每一步* 前言一、super关…

跨境电商账号频繁?你的IP可能“不干净”了

疫情促进了跨境电商行业的加速发展&#xff0c;许多卖家也抓住了这波流量红利&#xff0c;跨境电商月入数万&#xff0c;数十万甚至数百万的造福神话也不断在上演&#xff0c;但由于国内外电商运营模式不同&#xff0c;多店运营、用户数据收集、刷单等行为都受到了国外平台的严…

【复现】Tenda信息泄露漏洞_19

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 Tenda远端WEB管理是为了在外网&#xff08;其他网络&#xff09;可以访问路由器&#xff0c;从而进行管理。 电脑可以通过网线连接…

关于K8S组件,你真正了解多少?

Kubernetes架构图 Kubernetes系统用于管理分布式节点集群中的微服务或容器化应用程序&#xff0c;并且其提供了零停机时间部署、自动回滚、缩放和容器的自愈&#xff08;其中包括自动配置、自动重启、自动复制的高弹性基础设施&#xff0c;以及容器的自动缩放等&#xff09;等…

SpringBoot源码分析

一&#xff1a;简介 由Pivotal团队提供的全新框架其设计目的是用来简化新Spring应用的初始搭建以及开发过程使用了特定的方式来进行配置快速应用开发领域 二&#xff1a;运行原理以及特点 运行原理&#xff1a; SpringBoot为我们做的自动配置&#xff0c;确实方便快捷&#…

鸿蒙开发之如何使用ios的页面布局方式开发鸿蒙app

创建一个页面&#xff0c;使用 Stack&#xff08;&#xff09; 设置其宽高都是 100% 背景颜色设置为粉色&#xff0c;方便查看 Entry Component struct Page {State message: string Hello World 2build() {Row() {Column() {Stack() {Text(this.message).fontSize(50).f…

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

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

mysql8 源码编译 客户端连接运行 报段异常解决

mysql8 源码编译 客户端连接运行 报段异常解决。解决方案&#xff1a;删除之前编译的文件。先安装libncurses-dev依赖&#xff0c;在重新编译。原因&#xff1a;第一次编译没有libncurses-dev依赖&#xff0c;编译告警&#xff0c;再次编译有缓存&#xff0c;没有引入声明头文件…

选择安全数据交换系统时 要考虑哪些因素?

安全数据交换系统是一种专门设计用于在不同的网络环境&#xff08;如内部不同网络&#xff0c;内部网络和外部网络&#xff09;之间安全传输数据的解决方案。它通常包括一系列的技术和流程&#xff0c;旨在确保数据在传输过程中的完整性、机密性和可用性。 安全数据交换系统可以…

基于Apache POI-操作Excel数据-读写

实现&#xff1a; 读&#xff08;获取&#xff09; 写&#xff08;导入&#xff09; 2.1 介绍 Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是&#xff0c;我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。 一般情…

web前端(第二次作业)

1、计算用户指定的数值内的奇数和。例如用户输入的是 10&#xff0c;则计算 1 3 5 7 9 的和 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><script>var nprompt("请输入数值&#xff1a;&…

String引用类型

目录 前言&#xff1a; String类&#xff1a; 字符串的比较&#xff1a; 关于String的一些方法&#xff1a; charAt&#xff1a; indexOf&#xff1a; lastIndexOf: valueOf: parselnt: toLowerCase和toUpperCase: toCharArray: format: replace: replace…