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

  4. 安装完成后控制台可以显示所有节点信息

多集群配置

  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

  2. 在主集群上登录 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"]

  2. 制作 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

  3. 部署 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 发布!

相关推荐
嘟嘟太菜了4 小时前
使用阿里云试用资源快速部署web应用-dofaker为例
阿里云·云计算
大白_dev10 小时前
k8s的学习和使用
k8s
冰万森13 小时前
亚马逊AI编程工具Amazon Q 和 Amazon CodeWhisperer使用教程
云计算·aws
一棵树苗1 天前
单Master节点的k8s集群部署-完整版
k8s
静听山水2 天前
腾讯云新开端口
云计算·腾讯云
CLOUD ACE2 天前
谷歌地图 | 3D 地图新功能:开发更简单,体验更丰富
云计算·云服务·谷歌云·谷歌地图·3d地图
StevenZeng学堂2 天前
【云原生安全篇】Cosign助力Harbor验证镜像实践
网络·安全·云原生·容器·kubernetes·云计算·go
xybDIY2 天前
解决AWS Organizatiion邀请多个Linker账号数量限额问题
云计算·aws
mqiqe2 天前
云计算Openstack Neutron
云计算·openstack·perl
mqiqe2 天前
云计算Openstack Keystone
数据库·云计算·openstack