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 安装
- 安装方式有 All-in-one、多节点和离线等多种安装方式,我们使用的是多节点安装
- 需要预先安装 socat、conntrack、ebtables、ipset
- 创建配置文件
// 版本号可以按照自己的需求配置 ./kk create config --with-kubernetes v1.22.12 --with-kubesphere v3.3.0 // 使用修改后的配置文件安装集群 ./kk create cluster -f config-sample.yaml
- 安装完成后控制台可以显示所有节点信息
多集群配置
- 多集群的连接方式有直接连接和代理连接,目前我的环境两套集群网络不互通所以采用了代理连接的方式
// 主集群配置 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
- 在主集群上登录 KubeSphere 控制台添加集群即可
服务部署
- 制作服务的 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"]
- 制作 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
- 部署 service 服务
- 制作 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
- 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
- 其他服务依赖了 pvc 配置
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: report spec: accessModes: - ReadWriteOnce resources: requests: storage: 2Gi
- 服务代码配置
// 直接使用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 发布!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
我成为开源贡献者的原因竟然是做MySql-CDC数据同步
今年下半年机缘巧合下公司决定搭建自己的数据中台,中台的建设势必少不了数据集成。首先面临的就是数据集成技术选型的问题,按照社区活跃度、数据源适配性、同步效率等要求对市面上几个成熟度较高的开源引擎进行了深度调研。 最终经过内部讨论决定用Apache SeaTunnel作为数据集成的基础能力。 贡献经历 在了解Apache SeaTunnel之前,自己基本没有深入参与过开源项目,大多都是工作需要从而来使用。虽然内心有想尝试开源,但由于没有合适的机会,就一直没有实践。而SeaTunnel目前正处于高速迭代的阶段,这让我看到了一丝契机。 碰到问题 大概是在今年的7月份,公司在使用MySql-CDC做数据同步时遇到了一个问题,在数据同步前期任务可以正常运行,但是在运行一段时间后发现Server端日志中出现大量的GC输出,并且看到GC对内存回收效率不高。 尝试解决 因为在这之前我们的批作业是能够正确完成,所以首先排除了由于使用不当的原因。由于是内存问题,我们尝试减小JVM堆内存参数,并开启了JMX内存监控,重新运行CDC任务尝试复现问题,不出意外问题再一次出现了,根据内存监控发现CDC任务运行过程中...
- 下一篇
开发人员应该了解哪些 SQL 知识?
SQL(结构化查询语言)是数据库的通用语言,它无处不在、功能强大,并且对于开发人员来说理解非常重要。从这些技巧开始。 作者:Charly Batista 本文和封面来源:https://www.infoworld.com/,爱可生开源社区翻译。 本文约 2700 字,预计阅读需要 9 分钟。 自 20 世纪 70 年代初发明 SQL 以来,它一直是管理与数据库交互的默认方式。根据 Stack Overflow 的数据, SQL 仍然是排名前五的编程语言之一,大约 50% 的开发人员在工作中使用它。 尽管 SQL 无处不在,但它仍然以困难或令人生畏而闻名。只了解 SQL 是什么,还是远远不够的。 同时,由于当今的企业越来越重视他们的数据,因此熟练使用 SQL 将为你提供更多机会,让你成为一名优秀的软件开发人员并推动职业发展。那么应该了解 SQL 哪些知识,以及应该避免哪些问题呢? 不要害怕 SQL SQL 很容易使用,因为它是结构化的。SQL 严格定义了如何将查询组合在一起,使它们更易于阅读和理解。如果你正在查看其他人的 SQL,应该很容易理解他的的查询目标。 然而,许多开发人员对复杂 ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- Hadoop3单机部署,实现最简伪集群
- CentOS8编译安装MySQL8.0.19
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程