作者:方忠,苏州威视通智能科技有限公司技术经理,开源技术爱好者,长期活跃于 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 发布!

KubeSphere 在 vsleem 的落地实践的更多相关文章

  1. Dubbo Mesh 在闲鱼生产环境中的落地实践

    本文作者至简曾在 2018 QCon 上海站以<Service Mesh 的本质.价值和应用探索>为题做了一次分享,其中谈到了 Dubbo Mesh 的整体发展思路是“借力开源.反哺开源” ...

  2. [转载]DevOps在传统企业的落地实践及案例分享

    内容来源:2017年6月10日,优维科技高级解决方案架构师黄星玲在“DevOps&SRE 超越传统运维之道”进行<DevOps在传统企业的落地实践及案例分享>演讲分享.IT 大咖说 ...

  3. DEVOPS落地实践分享

    DEVOPS落地实践分享 转载本文需注明出处:微信公众号EAWorld,违者必究. 引言: DevOps的理念已经说了很多年,其带来的价值逐渐被接受,很多企业也逐渐引入了DevOps.目前普元DevO ...

  4. MOT大连站 | 卓越研发之路:前沿技术落地实践

    还在讨论究竟哪种编程语言更容易深度学习?哪种编程语言更具有价值?如果你是资深技术人员又或者是团队负责人,在机器学习.微服务.Spring 5反应式编程等方面遇到了问题,不妨参加一场由msup和微软联合 ...

  5. SpringCloud落地实践

    这几年微服务架构越来越火.伴随着微服务概念的提示,越来越多的组织为了方便开发,结合实际提供很多微服务机构, 之前工作中一直使用dubbo作为微服务框架, dubbo只是专注于服务之间的通讯,所以更灵活 ...

  6. python coding style guide 的高速落地实践

    python coding style guide 的高速落地实践 机器和人各有所长,如coding style检查这样的可自己主动化的工作理应交给机器去完毕,故发此文帮助你在几分钟内实现coding ...

  7. python coding style guide 的快速落地实践——业内python 编码风格就pep8和谷歌可以认作标准

    python coding style guide 的快速落地实践 机器和人各有所长,如coding style检查这种可自动化的工作理应交给机器去完成,故发此文帮助你在几分钟内实现coding st ...

  8. 鸿蒙HarmonyOS应用开发落地实践,Harmony Go 技术沙龙落地北京

    12月26日,华为消费者BG软件部开源中心与51CTO Harmony OS技术社区携手,共同主办了主题为"Harmony OS 应用开发落地实践"的 Harmony Go 技术沙 ...

  9. DevOps落地实践点滴和踩坑记录-(1)

    记录初衷 本人一直在从事企业内DevOps落地实践的工作,走了不少弯路,也努力在想办法解决面临的问题,期间也经历过不少人和事情,最近突然有想法把经历过的,不管好的不好的都记录下来,分享给和我一样的一线 ...

  10. 互联网研发效能之去哪儿网(Qunar)核心领域DevOps落地实践

    本文从业务目标角度出发,确定了开源+自建模式搭建 Qunar 研发工具链整体生态:通过 APPCODE 打通工具链,流程规范化自动化:多种手段+发布门禁助力质量提升:建立应用画像确定运维最小单元,可发 ...

随机推荐

  1. Nvidia的Metropolis平台 —— AI监控解决方案和视频分析技术

    相关: https://baijiahao.baidu.com/s?id=1566933142821989&wfr=spider&for=pc https://baijiahao.ba ...

  2. Ubuntu22.04下vscode安装python代码格式化(Format Document)black模块及设置

    相关: 如何在vscode中支持python的annotation(注解,type checking)--通过设置pylance参数实现python注解的type checking ubuntu22. ...

  3. DophinScheduler 如何定期删除日志实例?

    转载自东华果汁哥 Apache DophinScheduler 运行一段时间后,实例调度日志越来越多,需要定期清理. SQL 错误 [1701] [42000]: Cannot truncate a ...

  4. 微信小程序wx.getUserInfo授权获取用户信息(头像、昵称)

    这个接口只能获得一些非敏感信息,例如用户昵称,用户头像,经过用户授权允许获取的情况下即可获得用户信息,至于openid这些,需要调取wx.login来获取. index.wxml <!-- 当已 ...

  5. 使用 SpanMetrics Connector 将 OpenTelemetry 跟踪转换为指标

    原文:https://last9.io/blog/convert-opentelemetry-traces-to-metrics-using-spanconnector/ 如果您已经实施了跟踪但缺乏强 ...

  6. NeoVim 安装

    NeoVim 官网 安装 macOS brew install neovim Windows 使用 winget: winget install Neovim.Neovim 也可以使用 scoop: ...

  7. 【爬虫实战】——利用bs4和sqlalchemy操作mysql数据库,实现网站多行数据表格爬取数据

    前言 此篇接上一篇的内容,在其基础上爬取网站的多行表格数据,以及把数据写入到mysql数据库中 目录 一.定位表格查找元素 二.提取数据 三.写入mysql数据库 四.附录 一.定位表格查找元素 首先 ...

  8. MS SQL的ROUND函数用来数值的四舍五入

    MS SQL的ROUND函数用来数值的四舍五入 MS SQL要进行数值的四舍五入,有一好用的函数ROUND. 语法 ROUND ( numeric_expression , length [ ,fun ...

  9. 005.MinIO-DirectPV分布式多租户存储部署

    MinIO部署准备 部署概述 本实验结合Kubernetes进行MinIO部署,实现MinIO于Kubernetes的融合. minio官方支持通过简单的快速部署,以便于进行基础测试: curl ht ...

  10. Transforms的使用

    Transform的作用 把图片经过Transforms的一些函数之后就会对图片进行一些变化.比如,resize就是改变其大小,totensor就是把图片PIL或者numpy类型转化为Tensor类型 ...