当前位置:首页 > 文章 > 正文内容

做微服务研发工程师的一年来的总结

廖万里3年前 (2022-10-27)文章43507

前述

18年的那个留校夏天,极其偶然接触到了《Docker+Kubernetes》,由纯运维的发展方向转到了云原生运维的发展方向。19年5月以《linux helmsman platform》获得IT创新大赛二等奖,其实质是围绕云原生的边侧服务集成部署。20年5月以《基于Kubernetes的舵手集群系统的设计与实现》获得河南省优秀毕业论文,其实质是在《linux helmsman platform》的基础上进行补丁而成。20年6月初在创业型公司做唯一的云原生运维,那是段足以影响一生的经历:https://www.cnblogs.com/zisefeizhu/p/14601287.html 。
21年6月底极其偶然的机会(面的kubernetes运维岗,入职了微服务研发工程师岗)来到这家公司以微服务研发工程师的角色实质开启纯研发历程,至今已一年有余。在项目空闲期回忆这一年的路程,承上启下。

一年来做的项目

这一年来重点围绕以下项目展开:

1)、 独立开发xxx项目的混合云容器模块:运用go+gin+gorm+mysql+client-go+kubernetes技术栈,实现对kubernetes集群的创建/导入、节点的管理、名称空间的管理、工作负载的管理、配置中心的管理、...、凭证的管理、镜像仓库的适配(harbor/acr/ccr/aws)、集群的适配(tke/ack/aws/自建集群)、等功能。总的来说此项目主要是api的对接,并不具备复杂的技术栈,在实际开发中最大的收获是:1、根据需求实现业务的开发考量 2、对各厂商的字段封装 3、开发中遇到问题的实际处理(1、返回错误信息 2、列表类接口的错误处理 3、数据库字段的设计 4、api接口的设计 5、适配层的转换 6、面向错误的开发、等)。期间思考了下图
做微服务研发工程师的一年来的总结

  • ps:上图只是个人对容器平台的构想,实际项目中并没有用此构思,所以谈不上涉密问题。

做微服务研发工程师的一年来的总结
 1 func Init(g *gin.Engine) { 2     // 跨域 3     g.Use(Cors()) 4     // 定义输出日志格式 5     g.Use(middleware.LoggerToFile()) 6     g.Any("/", v1.Hello) 7     g.GET("/health", v1.Health) 8     api := g.Group("/container/api") 9     clusterRouters(api)10     nodeRouters(api)11     nsRouters(api)12     workloadRouters(api)13     podRouters(api)14     pluginRouters(api)15     registryRouters(api)16     credentialRouters(api)17     configRouters(api)18     csiRouters(api)19     g.GET("/swagger/*any", gs.WrapHandler(swaggerFiles.Handler))20 }
做微服务研发工程师的一年来的总结

 

2)、根据开发devops同事的需求,独自设计与实现(运用helm+kubernetes技术栈)jenkins集群+插件的一键部署。总体来说此项目并不复杂,更多的是考验helm的书写与合理的利用kubernetes的特性。实际构思图如下:
做微服务研发工程师的一年来的总结

做微服务研发工程师的一年来的总结
  1 # Default values for jenkins.  2 # This is a YAML-formatted file.  3 # Declare variables to be passed into your templates.  4 # By zisefeizhu  5 # Time 2021年 8月26日 星期四 10时45分56秒 CST  6   7 # namespaceOverride jenkins部署到的名称空间  8 namespaceOverride: devops  9  10 securityContext: 11   enabled: true 12   privileged: true 13   runAsUser: 0 14 # replicaCount 副本数 15 replicaCount: 1 16  17 # image 镜像信息 18 image: 19   repository: registry.cn-shenzhen.aliyuncs.com/zisefeizhu/annet 20   pullPolicy: IfNotPresent 21   # Overrides the image tag whose default is the chart appVersion. 22   tag: "jenkinsci-blueocean-v0.1.1" 23   baseImageTag: "jenkins-plugins-v0.1.4" 24  25 # dockerRegistry Concentrated verification of consciousness 26 dockerRegistry: 27   enabled: true 28   secretName: jenkins 29   user: xxxx 30   password: xxxxxx 31  32  33 # containerPorts jenkins pod 端口 34 containers: 35   ports: 36   - containerPort: 8080 37     name: web 38     protocol: TCP 39   - containerPort: 50000 40     name: agent 41     protocol: TCP 42  43 nameOverride: "" 44 fullnameOverride: "" 45  46 serviceAccount: 47   # Specifies whether a service account should be created 48   create: true 49   # Annotations to add to the service account 50   annotations: {} 51   # The name of the service account to use. 52   # If not set and create is true, a name is generated using the fullname template 53   name: "" 54  55 # service 类型和端口信息 56 service: 57   ports: 58   - name: web 59     port: 8080 60     targetPort: web 61     nodePort: 31031 62   - name: agent 63     port: 50000 64     targetPort: agent 65   type: NodePort 66 #  port: 31031   #端口 67  68 # pvc的access类型 69 pvc: 70   enabled: true 71   scName: xxxx 72   accessModes: ReadWriteMany 73   storage: xxx 74  75 ingress: 76   enabled: false 77   className: "" 78   annotations: {} 79     # kubernetes.io/ingress.class: nginx 80     # kubernetes.io/tls-acme: "true" 81   hosts: 82     - host: chart-example.local 83       paths: 84         - path: / 85           pathType: ImplementationSpecific 86   tls: [] 87   #  - secretName: chart-example-tls 88   #    hosts: 89   #      - chart-example.local 90  91 # resources limit range obtained from pressure measurement 92 resources: 93   enabled: falase 94   limits: 95     cpu: 1 96     memory: 1Gi 97   requests: 98     cpu: 200m 99     memory: 512Mi100 101 # startupProbe 存活性探针102 startupProbe:103   enabled: false104   probe:105     failureThreshold: 3106     httpGet:107       path: /login108       port: 8080109       scheme: HTTP110     initialDelaySeconds: 30111     periodSeconds: 10112     successThreshold: 1113     timeoutSeconds: 1114 115 # livenessProbe 存活性探针116 livenessProbe:117   enabled: false118   probe:119     failureThreshold: 3120     httpGet:121       path: /login122       port: 8080123       scheme: HTTP124     initialDelaySeconds: 30125     periodSeconds: 10126     successThreshold: 1127     timeoutSeconds: 5128 129 # readinessProbe 就绪性探针130 readinessProbe:131   enabled: false132   probe:133     failureThreshold: 3134     httpGet:135       path: /login136       port: 8080137       scheme: HTTP138     initialDelaySeconds: 30139     periodSeconds: 10140     successThreshold: 1141     timeoutSeconds: 5142 143 autoscaling:144   enabled: true145   minReplicas: 1146   maxReplicas: 10147   targetCPUUtilizationPercentage: 80148   targetMemoryUtilizationPercentage: 80
做微服务研发工程师的一年来的总结

 

3)、根据架构师构思(16年工作经验),独自验证/输出文档,运用:logstash+ceph+operator技术栈。实现es集群之间的全量/增量/全量+增量同步迁移、持久化队列/死信等功能。此项目具有一定复杂度。在实际开发中需要1、对logstash有一定程度的运用(需要对涉及到的功能点进行一一验证实践)、2、对operator有一定的掌握(特别是对spec和status的深度理解)。3、对k8s有较深度的掌握,理解涉及到的核心资源的运用。
做微服务研发工程师的一年来的总结

  • 架构图及源码涉密。

做微服务研发工程师的一年来的总结
  1 # Default values for jenkins.  2 # This is a YAML-formatted file.  3 # Declare variables to be passed into your templates.  4 # By zisefeizhu  5 # Time 2021年 8月26日 星期四 10时45分56秒 CST  6   7 # namespaceOverride jenkins部署到的名称空间  8 namespaceOverride: devops  9  10 securityContext: 11   enabled: true 12   privileged: true 13   runAsUser: 0 14 # replicaCount 副本数 15 replicaCount: 1 16  17 # image 镜像信息 18 image: 19   repository: registry.cn-shenzhen.aliyuncs.com/zisefeizhu/annet 20   pullPolicy: IfNotPresent 21   # Overrides the image tag whose default is the chart appVersion. 22   tag: "jenkinsci-blueocean-v0.1.1" 23   baseImageTag: "jenkins-plugins-v0.1.4" 24  25 # dockerRegistry Concentrated verification of consciousness 26 dockerRegistry: 27   enabled: true 28   secretName: jenkins 29   user: xxxx 30   password: xxxxxx 31  32  33 # containerPorts jenkins pod 端口 34 containers: 35   ports: 36   - containerPort: 8080 37     name: web 38     protocol: TCP 39   - containerPort: 50000 40     name: agent 41     protocol: TCP 42  43 nameOverride: "" 44 fullnameOverride: "" 45  46 serviceAccount: 47   # Specifies whether a service account should be created 48   create: true 49   # Annotations to add to the service account 50   annotations: {} 51   # The name of the service account to use. 52   # If not set and create is true, a name is generated using the fullname template 53   name: "" 54  55 # service 类型和端口信息 56 service: 57   ports: 58   - name: web 59     port: 8080 60     targetPort: web 61     nodePort: 31031 62   - name: agent 63     port: 50000 64     targetPort: agent 65   type: NodePort 66 #  port: 31031   #端口 67  68 # pvc的access类型 69 pvc: 70   enabled: true 71   scName: xxxx 72   accessModes: ReadWriteMany 73   storage: xxx 74  75 ingress: 76   enabled: false 77   className: "" 78   annotations: {} 79     # kubernetes.io/ingress.class: nginx 80     # kubernetes.io/tls-acme: "true" 81   hosts: 82     - host: chart-example.local 83       paths: 84         - path: / 85           pathType: ImplementationSpecific 86   tls: [] 87   #  - secretName: chart-example-tls 88   #    hosts: 89   #      - chart-example.local 90  91 # resources limit range obtained from pressure measurement 92 resources: 93   enabled: falase 94   limits: 95     cpu: 1 96     memory: 1Gi 97   requests: 98     cpu: 200m 99     memory: 512Mi100 101 # startupProbe 存活性探针102 startupProbe:103   enabled: false104   probe:105     failureThreshold: 3106     httpGet:107       path: /login108       port: 8080109       scheme: HTTP110     initialDelaySeconds: 30111     periodSeconds: 10112     successThreshold: 1113     timeoutSeconds: 1114 115 # livenessProbe 存活性探针116 livenessProbe:117   enabled: false118   probe:119     failureThreshold: 3120     httpGet:121       path: /login122       port: 8080123       scheme: HTTP124     initialDelaySeconds: 30125     periodSeconds: 10126     successThreshold: 1127     timeoutSeconds: 5128 129 # readinessProbe 就绪性探针130 readinessProbe:131   enabled: false132   probe:133     failureThreshold: 3134     httpGet:135       path: /login136       port: 8080137       scheme: HTTP138     initialDelaySeconds: 30139     periodSeconds: 10140     successThreshold: 1141     timeoutSeconds: 5142 143 autoscaling:144   enabled: true145   minReplicas: 1146   maxReplicas: 10147   targetCPUUtilizationPercentage: 80148   targetMemoryUtilizationPercentage: 80
做微服务研发工程师的一年来的总结

  

4)、近期为了加深operator的理解,写了workload-operator,实现对deployments/statefulsets/daemonsets/cronjobs/jobs/services 功能的封装。本项目为个人项目,难点在对控制器的理解与status的处理。


operator 的书写逻辑 围绕以下四点即可:

观察:通过监控Kubernetes资源对象变化的事件来获取当前对象状态,只需要注入EventHandler让client-go 将变化的事件对象信息放入WorkQueue中

分析:确定当前状态和期望状态的不同,由Worker完成.

执行:执行能够驱动对象当前状态变化的操作,由Worker完成.

更新:更新对象的当前状态,由Worker完成.

5)、最近在看同事的xxx项目的devops模块,有所感悟:1、开发对需求的实现能力外,其实也应该对要实现的功能有一定的理解。2、对于中间件的掌握(比如Jenkins 的pipeline的书写)。

6)、这一年还帮助同事处理运维问题,帮助同学处理运维问题,也接过外快处理运维相关的问题,也基本每周都抽时间看看云原生相关的知识。偏向开发是必然要的,运维也是规划的重点,需要有意多接触。

综上,其实在过去的一年开发严格意义还是围绕云原生在进行,也符合对职业生涯的规划:运维 --> 云原生运维 --> 容器开发(运维开发) --> sre(偏向开发的运维岗) -->

一年来的收获

这一年来收获很多,依如20年的云原生运维工作一样,对职业产生深远影响:

1、查找资料由csdn/博客园 --> github/官网

2、研发能力由面向百度 --> 面向google/pkg

3、由遇到问题就请教同事 --> 和同事探讨/自我处理

4、由在一家初创企业 --> 一家还算适中的公司

展望下一年

在接下来的一年,重点实现以下几点:

1、巩固已掌握的

2、具备独立解决问题的能力

3、不断降低bug率 ,做到需求即理解、理解即实现、实现即交付。

4、对服务治理、微服务、数据库中间件、serverless 、算法 展开攻关

5、跳槽 ,再入江湖,出道下山、世界这么大

特别感谢

依如20年的贵人,阿里云MVP 如今入职字节的石老大一样,在过去的一年,遇到了我飞飞哥哥,不断骚扰与学习他的长处,嘿嘿嘿。

未来一年,依然坚信,懂云原生的go开发 是属于当下及未来一个时期的所需。

凡是过往、皆为序章。

过手如登山,一步一重天


本文链接:https://www.kkkliao.cn/?id=143 转载需授权!

分享到:

版权声明:本文由廖万里的博客发布,如需转载请注明出处。


“做微服务研发工程师的一年来的总结” 的相关文章

华为梅开二度:鸿蒙3.0正式版推送+5.5G网络,网友:遥遥领先

华为梅开二度:鸿蒙3.0正式版推送+5.5G网络,网友:遥遥领先

对于华为手机来说,虽然手机业务受到了很大的压力,但是华为在很多领域的表现都不差,无论是汽车领域还是通信领域,都有着不错的市场表现力。而且这几年的华为在技术研发方面的投入资金也不小,这也意味着进步很大。而且从目前的市场角度来看,华为也迎来了梅开二度的情况,不仅针对鸿蒙OS3.0正式版进行了推送和变化,...

美设备大厂接连表态,反转出现了,外媒:华为将“打”出和平

美设备大厂接连表态,反转出现了,外媒:华为将“打”出和平

华为5G的横空出世,一举打破了美国数十年的通信霸权,也首次将中国通信带到了全球最顶端的位置,堪称是中国人的骄傲。然而,这却引起了老美的忌惮,它为了巩固自己的科技霸权地位,近些年频繁修改芯片规则,妄图通过断供来放倒华为。大家都知道,技术封锁是美帝霸凌主义惯用的手段,且屡试不爽,日本东芝和法国阿尔斯通的...

美媒:ASML开始被中企无情地“打脸”了

美媒:ASML开始被中企无情地“打脸”了

点击关注,每天精彩不断!导读:美媒:ASML开始被中企无情的“打脸”了!自从我国华为公司被打压以后,很多科技企业都意识到了自主研发和生产半导体芯片的重要性;而想要生产芯片并不是一件容易的事情;作为21世纪最伟大的发明之一,半导体芯片如今在整个科技领域都起着至关重要的作用,虽然说一个小小的芯片看上去只...

骁龙8和骁龙8+的日常体验,到底有多大差距?

骁龙8和骁龙8+的日常体验,到底有多大差距?

机哥写过一篇文章。主要呢,就是盘点了今年那些跳水比较严重的旗舰手机。像什么OPPO Find X5 Pro天玑版啊、小米12 Pro啊、一加10 Pro啊等等。相比起刚上市时定价,现在这些机型,普遍的降价幅度都超过了2000块。原本是卖5000多,现在却只卖3000多。。机哥当时发完文章,底下很大一...

步步高创始人段永平,高手有所为有所不为,35条深度思考值得收藏

步步高创始人段永平,高手有所为有所不为,35条深度思考值得收藏

段永平,一个注定在商业史无法被忽视的存在。段永平的经历可谓传奇。他是国内第一个拍下来股神巴菲特午餐的男人,那时候他还带上了现在拼多多的创始人黄铮。而这个一手创办了小霸王、步步高等著名企业,并与Vivo、OPPO、一加和拼多多有着千丝万缕联系的企业家,这位通过投资网易、腾讯和苹果而获利颇丰的投资者,也...

你最讨厌QQ什么?

你最讨厌QQ什么?

作为中国最早的社交软件之一, QQ承载着无数的青春。QQ最初诞生的时候,是为了方便人们之间的交流而诞生的。那时候 QQ作为我们联系的主要工具,人们之间可以进行即时通讯。我们每天都会在 QQ上和不同的人进行沟通互动。聊天的内容也十分的丰富,有的时候聊天的内容甚至超过了现在人们生活的内容。而其中最让人讨...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。