作者:方忠,苏州威视通智能科技有限公司技术经理,开源技术爱好者,长期活跃于 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: 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
- 在主集群上登录 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: gatewaynamespace: testlabels:app: gatewayversion: v1annotations:kubesphere.io/creator: adminkubesphere.io/serviceType: statelessservice
spec:ports:- name: http-0protocol: TCPport: 8080targetPort: 8080selector:app: gatewaytype: ClusterIP
- 部署 service 服务
- 制作 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
- 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
- 其他服务依赖了 pvc 配置
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: report
spec:accessModes:- ReadWriteOnceresources: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 发布!