作者:池晓东,蜘点商业网络服务有限公司技术总监,从事软件开发设计 10 多年,喜欢研究各类新技术,分享技术。

来源:本文由 11 月 25 日广州站 meetup 中讲师池晓东整理,整理于该活动中池老师所分享的同名议题内容。

公司平台介绍

蜘点成立于 2016 年 4 月,致力于打造社区电商业务(解决最后 3 公里的配送问题)。当初通过自建直营渠道、自建仓库、自建大型社区仓、和采用加盟仓的方式,实现在社区的电商业务的发展,配送本地化。最多的时候在全国各个省都有分公司及下属子公司,在每个省都有省仓,在南北的主要城市都建有大型仓。

后面随着电商行业的落幕,公司又转型做企业数字化整体解决方案(产业互联网方向)。整体发展如下图:

平台背景介绍

公司通过购买服务器组建了一个内部云,托管在 IDC 机房中,一直使用 VMware 的虚拟化技术,来实现虚拟机的管理。随着业务增加,项目从单体架构向分布式架构演进,虚拟机数量也随着增加,给开发与运维管理来了不少问题,随着微服务技术的发展,采用容器化架构成为了解决公司底层架构的问题。

  • 业务快速发展,不新增虚拟主机,环境搭建复杂,早期通过虚拟机模板解决;
  • 各个项目组之间的业务调用,都是通过 HTTP 接口交互,效率不高;
  • 部署靠人工编译打包上传,测试/上线,无 CI/CD,开发效率低;
  • 运维压力大,运维资源缺乏,各个服务、中间件的监控不到位,虽有 Zabbix,但管理不过来,缺少统一的监控面板;
  • 虚拟机的资源难以动态分配利用,资源被固定化;
  • 缺少专业的运维人员,环境安装、监控不够完善,资源使用情况难可视化(运维人员就一个);
  • 前端组也想采用容器化部署,不要在本地打包,通过 FTP 上传静态文件的方式;
  • 运维人员想减少虚拟机数量,新上线业务不需要创建很多虚拟机,只需要增加少量节点就可以。

平台选型

业务痛点

从前面的介绍,在从单体架向分布式架构的演变过程中,伴随着业务的快速发现,与快速响应,基础模块及业务模块越来越多,团队都忙在打包部署的过程中。

  • 修 Bug 打包部署。
  • 上线打包部署。
  • 每次上线全团队 StayBy, 折腾至深夜。
  • 效率低下,版本延迟。

引入 Jenkins 半自动化部署

为解决团队的效率问题,首先引入 Jenkins,通过 Jenkins 解决大部分部署问题。

引入 Kubernetes(K8s)

Jenkins 的引入,已经能很大的提高效率,但还是存在一些问题:

  • 服务太多,每次部署要排队。
  • 虚拟机太多,维护 Shell 脚本成本高。
  • 资源利用率低,没有用到点上。

自建 K8s 集群,可以解决繁锁的 Shell 脚本问题,结合 Jenkins 的 K8s 的插件,通过 Dockerfile + yaml 的方式进行部署。

自建 K8s 维护痛点:

  • 运维集群困难,缺乏简单方便的可视化工具,团队大多是开发人员,运维经验有限。
  • 操作 K8s 都是纯脚本形式,维护比较困难,由于缺乏可视化工具,应用部署与配置修改全是依靠命令脚本手动执行。
  • 还是达不到回收服务器权限的目的,排查问题还是要上 K8s,缺少资源监控与调度。

选择 KubeSphere 原由

在 K8s 可视化管理工具的调研过程中,发现 KubeSphere 比较适合公司,对比国外开源的 Kubernetes Dashboard、Rancher,KubeSphere 还是比较适合国内的使用。

  • 可视化的 K8s 管理工具,包含了所有 K8s 的功能。
  • 一体化的 DevOps,降低部署复杂度,应用生命周期。
  • 多租户管理,满足不同子公司的业务隔离需求。
  • 集成角色权限管理功能,满足对不同人员分配不同权限的需求。
  • 在线日志查看功能,降低对服务器用户的管理。
  • 集群可视化管理,监控可视化。
  • 平台中的所有功能都是可插拔与松耦合,可以根据业务场景可选安装所需功能组件。

落地实践、效果

平台微服务架构部署

KubeSphere 生产环境规划与安装

生产环的配置规划是: 3 个 Master Node:8C 16G 100G 磁盘, 10+ Worker Node(初期),20+ Worker Node(后续增加)。

部署 SpringCloud 的微服务套件,包括 Eureka,Redis, 电商平台的微服务,如商品、订单、会员等。ToB 微服务,企业数字化 10+ 项目。

KubeSphere 的使用规则

团队及项目划分

  • 按子公司及不同的端建立不同的企业空间 -- 企业空间。
  • 在项目管理中按不同的业务线,建立不同的项目组合。
  • 创建的用户,按 platform-regular 的角色。
  • 在企业空间、项目管理、流水线中添加成员。

节点管理及部署

  • 节点标签,为每个节点配置标签,和 yml 配合使用。
  • 不使用主机网络模式。
  • 重要数据文件采用挂载宿主机目录。
  • 对外服务需提供 NodePort 配置。

KubeSphere 集群

KubeSphere 应用部署与流水线

KubeSphere 使用效果

  • 全流程的 DevOps,释放开发频繁打包部署的工作,专注于研发。
  • 可视化的资源监控,配合告警等措施,提升运维的能力。
  • 多租户,多空间,项目的隔离,使用者权限的分管,让跨业务团队的管理更精准。
  • 缩减原来的虚拟主机(4C 8G),组成资源更大的节点,资源利用率提升。
  • 支持在线化的动态扩容,操作方便,想增加或减少实例,操作一下就搞定。
  • 前端也实现容器化部署,释放手动打包上传的工作量。

存在问题及解决方法

当时官方提供的 Maven 版本不是 3.6 的版本,如何解决?

解决:自己制作了一个 3.6 的 Maven 基础镜像,然后在 Clusterconfiguration,找到 Maven 的 image,修改即可。

自建了 nexus,如何修改 maven setting.xml?

解决:在 CRDs 筛选 kubesphere-devops-system,找到 ks-install,修改里面的 maven setting.xml 即可,修改后,要登录 Jenkins,重新 reload 配置。

如何访问 Jenkins?

解决:Master 的 ip + 30180,登录账号密码和 KubeSphere 的管理员。可以参考文件:https://juejin.cn/post/7124589639536476190

在容器中如何访问共享文件?

解决:通过挂载 NFS 系统来访问。

容器中的文件随着容器销毁而消失,想要保存更长时间文件?

解决:通过挂载宿主机的文件/或磁盘。

容器在滚动部署过程中会被销毁,其他服务调用还是走旧 IP 访问,404?

解决:通过在 Kubernetes 的 Service 来调用(SVC)。

DevOps 与自建 Gitlab 搭配怎么触发构建?

解决:进入 Jenkins 在流水线上使用通用钩子触发。

未来规划

通过引入 KubeSphere 中间件管理平台,极大地提交了整体的交付效率,节省在部署环节的时间支付,通过工具更好的实现了 CI/CD;提供了可视化的资源界面,能更清楚地知道各个服务器的资源使用情况,做到很好的监控。

随着平台的使用成熟,越来越多的业务将迁入平台,包括前端、.net、或者其他子公司的业务。KubeSphere 的更多功能,将为业务的发展提供很好的基础。

本文由博客一文多发平台 OpenWrite 发布!

蜘点云原生之 KubeSphere 落地实践过程的更多相关文章

  1. 精彩分享 | 欢乐游戏 Istio 云原生服务网格三年实践思考

    作者 吴连火,腾讯游戏专家开发工程师,负责欢乐游戏大规模分布式服务器架构.有十余年微服务架构经验,擅长分布式系统领域,有丰富的高性能高可用实践经验,目前正带领团队完成云原生技术栈的全面转型. 导语 欢 ...

  2. 系列文章:云原生Kubernetes日志落地方案

    在Logging这块做了几年,最近1年来越来越多的同学来咨询如何为Kubernetes构建一个日志系统或者是来求助在这过程中遇到一系列问题如何解决,授人以鱼不如授人以渔,于是想把我们这些年积累的经验以 ...

  3. 分布式注册服务中心etcd在云原生引擎中的实践

    作者:王雷 etcd是什么 etcd是云原生架构中重要的基础组件,由CNCF孵化托管.ETCD是用于共享配置和服务发现的分布式,一致性的KV存储系统,是CoreOS公司发起的一个开源项目,授权协议为A ...

  4. 给 K8s API “做减法”:阿里巴巴云原生应用管理的挑战和实践

    作者 | 孙健波(天元)  阿里巴巴技术专家本文整理自 11 月 21 日社群分享,每月 2 场高质量分享,点击加入社群. 早在 2011 年,阿里巴巴内部便开始了应用容器化,当时最开始是基于 LXC ...

  5. Mirantis 收购 Docker | 云原生生态周报 Vol. 28

    作者 | 禅鸣.进超.心水.心贵 业界要闻 Docker 将 Docker Enterprise 卖给 Mirantis Mirantis 是一家扎根于 OpenStack 的云公司,最近专注于 Ku ...

  6. 进击的 Java ,云原生时代的蜕变

    作者| 易立 阿里云资深技术专家 导读:云原生时代的来临,与Java 开发者到底有什么联系?有人说,云原生压根不是为了 Java 存在的.然而,本文的作者却认为云原生时代,Java 依然可以胜任&qu ...

  7. CNCF 宣布成立应用交付领域小组,正式开启云原生应用时代

    作者|赵钰莹 作为云原生领域的顶级开源社区, Cloud Native Computing Foundation (云原生基金会,以下简称 CNCF)近日宣布成立 Application Delive ...

  8. Kubernetes v1.16 发布 | 云原生生态周报 Vol. 20

    作者:心贵.进超.元毅.心水.衷源.洗兵 业界要闻 Kubernetes v1.16 发布 在这次发布中值得关注的一些特性和 Feature: CRD 正式进入 GA 阶段: Admission We ...

  9. 云原生生态周报 Vol. 21 | Traefik 2.0 正式发布

    作者 | 浔鸣.心水.元毅.源三.衷源 业界要闻 CNCF 计划将 TOC 升至 11 人 技术监督委员会(TOC)是 CNCF 的三大核心管理机构之一,从 2020 年 1 月起,TOC 将从 9 ...

  10. Knative 暂时不会捐给任何基金会 | 云原生生态周报 Vol. 22

    作者 | 新胜.心贵.进超.元毅.衷源 业界要闻 谷歌:不会向任何基金会捐赠 Knative 自 Knative 项目开始以来,一直存在关于是否将 Knative 捐赠给基金会(例如 CNCF)的疑问 ...

随机推荐

  1. 代码随想录Day4

    24.两两交换链表中的节点 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 示例 1: 输入:head = [1, ...

  2. 人工智能(AI)未来之方向:努力培养人才、科研创新!

    地址: https://baijiahao.baidu.com/s?id=1801824912676717630&wfr=spider&for=pc 人工智能(AI)未来之方向 1. ...

  3. 【转载】 DeepMind 提出元梯度强化学习算法,显著提高大规模深度强化学习应用的性能

    原文地址: https://www.jiqizhixin.com/articles/053104 李亚洲翻译 2018/05/31 12:38 Pedro 路参与 ================== ...

  4. NVRM: Xid (PCI:0000:b1:00): 13, pid=1375637, Graphics SM Global Exception on (GPC 0, TPC 1, SM 1): Multiple Warp Errors

    显卡服务器中一个显卡崩溃了: May 16 05:38:58 dell kernel: [14244871.006970] NVRM: Xid (PCI:0000:b1:00): 13, pid=13 ...

  5. JAVA集合专题之深入学习

    1.背景 集合虽然用起来非常简单... 但是面试确问得很多,很深.... 最重要的是集合的设计里面使用了大量的非常典型的多线程设计... 如果能把集合中的源码学一遍,相信你的多线程功底会大大提升... ...

  6. notepad++安装HexEdit插件

    notepad++安装HexEdit插件 打开notepad++,选择插件->插件管理 在这里找到HexEdit点击安装就可以 点击完,notepad++会自动重启,重启完成就安装好了

  7. Tim定时器初始化的方法

    #include "stm32f10x.h" // Device header void TimerInit(void) { RCC_APB1PeriphClockCmd(RCC_ ...

  8. 神经网络之卷积篇:详解卷积步长(Strided convolutions)

    详解卷积步长 卷积中的步幅是另一个构建卷积神经网络的基本操作,让向展示一个例子. 如果想用3×3的过滤器卷积这个7×7的图像,和之前不同的是,把步幅设置成了2.还和之前一样取左上方的3×3区域的元素的 ...

  9. 【牛客刷题】HJ10 字符个数统计

    题目链接 简单的说这题就是字符串去重以后检查长度.如果用Java的话,可以遍历字符串,然后利用Set来进行去重,最后统计Set的size就可以了.但是如果是Go语言,则稍微麻烦点.基本思路就是用map ...

  10. JAVA IO流-小白版

    I/O流原理 I/O 是 Input / Output 的缩写,I / O 流技术是非常实用的技术,用于处理数据传输.如读/写文件,网络通讯等: Java中对于数据的输入/输出操作以"流(s ...