我在创业公司的云原生架构之旅

9544faf4f26e09cf880ebd569afb8f7d.jpeg


前言

0eb30acd3c97042da3d4c124471ccf85.png

IT是一座道场!

3c041d893f9c0bcdfb6877986f8ae919.png

2020年5月中旬本科毕业后,进入严格意义上的第一家公司。当时带我的是阿里云的MVP,也是公司的CTO,跟着他(石老大)学到了很多很多,带领我经过了入道(机会,不是人人都有,请感恩,给你机会和帮助的人)。三个月后他离职了,感谢石老大,正是他的离职给了我独自闯道的机会。

2020年9月开始进入了闯道(孤独,痛苦和煎熬会时常与你共舞)、修道(别忘了,给风雨中的自己一个鼓励)、悟道(认知和思想,是拉开人与人之间的重要差距)阶段。可以说自石老大走后,我的任务都是自我安排,技术都是自我驱动实现的。

2019年7月离开学校时,告诉自己:我的路是一条追逐云原生的路。自2018年8月接触Kubernetes时就深深爱上了这条路。

2020年6月初进入公司后,实实在在感受到了创业公司的集群环境之乱(只有前端业务Kubernetes化且测试和生产通过namespace区分、生产Kubernetes资源特别低且服务副本数只有2个、GitLab代码仓库是部署在Kubernetes环境上的、权限混乱等)。提出了一些自己的解决方案:《一个完整的全面Kubernetes化的集群稳定架构》。

2020年6月构建以ELFK为技术核心的日志系统(只收集网关日志即nginx-ingress日志为唯一收集源)。

2020年7月围绕业务全面Kubernetes化展开,主导了业务从一到零再到一的过程。

2020年8月和9月忙于集群和CI/CD重构。新增了测试环境、预发环境,将网关由nginx-ingress改为kong-ingress,将GitLab从Kubernetes环境中剥离出来,借助cert-manager实现证书的自动申请和续签,增加堡垒机更正权限混乱问题,使用gitlab-runner实现多Kubernetes集群的自动化部署等。

2020年10月专攻于“监控预警系统”,实现三个纬度的监控,期间第一次参与并主导私有化项目的部署。

2020年11月以“ISTIO服务治理”为重心,在测试环境验证了连接、安全、流控、可视,期间开发了envoyfilter插件对接鉴权服务。

2020年12月和1月围绕“Kubernetes下微服务的日志系统”展开,实现了多Kubernetes集群服务和裸机服务的日志统一到一个管理平台。

2021年1月和2月实现了将预发环境的kong-ingress过度到istio。并对接了证书服务、监控预警系统和日志系统。

2021年3月忙于私有化部署和Istio准备上生产环境的验证。

2021年4月忙于旧服务器治理、私有化部署、聚石塔方面的有关工作。

2021年5月忙于Istio生产启用、聚石塔和私有化部署的工作。

在公司近1年中创建了13个代码仓库,写了130余篇技术文档。

2020年6月初经过规划了一张“基于Kubernetes的企业级集群架构”,经过和CTO及向有关人员的阐述,准备实施此架构:

078bddb7e5e90b30e6f5eb340ea83e13.png

此架构规划了三个集群环境:生产环境、预发环境、测试环境。

此架构除业务和项目外还增加了边界服务:统一日志管理平台、监控预警系统、链路追踪、统一管理平台、证书自动续签、流控等,下面将重点围绕此展开。

基于Kubernetes的企业级集群架构重点部分浅解

0732ed901aa97d6a0e9f2f84949c24ef.png

重构集群架构、业务全面容器化

这是一个从一到零再到一的过程,刚毕业即接触此类项目,实属幸运。

大致重构步骤如下:

  • 根据原有业务设计容器化架构方案;

  • 新增堡垒机Jumpserver;

  • 制作前后端业务镜像;

  • 新增测试环境Kubernetes集群、预发环境Kubernetes集群、改造原生产环境Kubernetes集群;

  • 借助Gitlab-Runner、GitLab、Kustomize等实现多集群的CI|CD;

  • 和有关同事一起定义前后端日志字段和输出形式;

  • 协助后端团队微调原裸机业务源码;

  • 借助Rancher实现对多Kubernetes集群的统一管理;

  • 用Cert-Manager实现域名证书的自动申请和续期;

  • 写Shell脚本对Gitlab备份进行检查、裸机服务备份进行检查、对域名有效期进行检查。

统一日志管理平台

此项目应是我近一年的最大收获了,思想上。

大致实现思路:多Kubernetes集群的namespace绝对不能重复,Elasticsearch、Kibana、Logstash、Kafka独立于集群环境外且共用一套,Filebeat、Metricbeat、kube-state-metrics需要在每个Kubernetes集群中都存在一套、Metricbeat和tag需要标准清晰明了、日志以json格式输出且不允许多行日志出现。

一提之举在:实现了多集群、多环境日志的统一化管理。

CI/CD

基于我司目前的研发现状,选择的自动化部署工具为gitlab-runner。代码仓库创建规范可以参考:https://www.cnblogs.com/zisefeizhu/p/13621797.html。

大致实现思路:研发提交代码代码到特定分支(分支区分环境,生产分支需要项目总监merge) --> 镜像打包(由预发Kubernetes集群的一台特定节点执行) --> 根据.gitlab-ci.yml规则进行业务Pod化。

一提之举在:

  • 通过分支区分环境

  • 镜像打包只在一台预发环境的特定节点执行,减少因打包镜像而对生产环境带来的波动,且可以存在镜像利用

  • 大量借助内置变量通过提前写的脚本提高Kubernetes 部署部分的资源清单的重复可用性

监控预警系统

实现三个纬度(业务监控、应用监控、操作系统)的监控预警系统。

其中业务监控主要是研发提供一些业务指标、业务数据。对其增上率、错误率等进行告警或展示,需要提前定义规范甚至埋点。

应用程序的监控主要有探针和内省。其中探针主要是从外部探测应用程序的特征,比如监听端口是否有响应。内省主要是查看应用程序内部的内容,应用程序通过检测并返回其内部的状态、内部的组件,事务和性能等度量,它可以直接将事件、日志和指标直接发送给监控工具。

操作系统主要是监控主要组件的使用率、饱和度以及错误,比如CPU的使用率、CPU的负载等。

一提之举在:

  • 三个纬度

  • 裸机也进行监控

  • Windows也进行监控

服务治理

随着业务的不断微服务化、对于服务的运行的失控感越来越强、且对东西向流量的管理成为了急需解决的痛点、而Kong网关的A/B test是付费版的开箱即用功能,而我司恰恰开始需要此功能。基于上服务治理开始进行视野。

我司对于服务治理的使用应算中度依赖,主要使用到如下点:

  • 负载均衡:基础服务使用最少连接策略,业务层服务使用一致性哈希负载均衡。

  • 健康检测:输出健康检测具体配置方案。(如:基础移出时间30秒,10秒内出现3次错误移出,检测时间间隔为10秒……)

  • 连接池:创建连接池,每个实例最大处理请求数为10,每个连接处理2个请求后关闭,重试次数为3次,连接超时时间为500ms。

  • 熔断策略:根据健康检测和连接池策略实现熔断策略

  • 重试策略:最多重试3次,每次调用超时为2秒。

  • 限流策略:后期用户数提高后再实行。

  • 链路追踪

一提之举在:基于EnvoyFilter和Lua开发对接鉴权服务和Istio。

私有化部署

因我司主打产品为3D编辑器,数据保密性要求极高,大型企业更在意数据由自己掌握,所以在这近一年中做了好几个私有化部署项目。

在做私有化部署项目中学到了很多:

  • 业务:需要知道客户需求牵扯到的服务有那些,作出路由规划表。

  • 集群:根据客户的需求,估算出资源需求。

  • 沟通:需要和客户(基本是非技术类)、我司运营等人于啊进行技术上的沟通,需要将繁琐的技术通俗化。

  • 时间:根据客户的规定时间和我司的实际现状规划出准备、部署、测试、交付的时间段,考验项目时间把握度。

  • 协调:在项目部署中难免会出现一些配置类的问题,需要后端人员介入。

一提之举在:私有化部署严重考验对业务、集群的熟悉度,是考验一个运维人员的技能修养的。

总结

39ecd59968c86b93b066fe3b336e7332.png

始终认为IT是一座道场,修道,修道,修一座自己的道场。在毕业的近1年中,经历了入道、闯道、修道阶段,到目前的悟道阶段。

需要提升和掌握的知识还有很多,技术没有止境,依然在路上。云原生是一条充满机遇的路,坚持与不断追求才能翻过一座又一座高山。

展望

0b60dbf07dadfd4f4962ad44e36407bd.png

  • 悟道(认知和思想,是拉开人与人之间的重要差距)

  • 试道(出道下山、世界这么大)

  • 围绕Kubernetes展开云原生的涉猎,更快的参与二开和社区。

过手如登山,一步一重天!

原文链接:https://www.cnblogs.com/zisefeizhu/p/14601287.html

推荐阅读

干货|如何步入Service Mesh微服务架构时代

实战|Service Mesh微服务架构实现服务间gRPC通信

再见Nacos,我要玩Service Mesh了!

玩转Service Mesh微服务熔断、限流骚操作

利用阿里云免费镜像仓库,实现微服务的k8s部署

如何在Service Mesh微服务架构中实现金丝雀发布?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值