zoukankan      html  css  js  c++  java
  • 上K8s,研发团队如何从容一点?

    容器作为一种先进的虚拟化技术,是云原生时代软件开发和运维不可或缺的部分。k8s是目前最流行的容器编排管理工具,但很多企业在拥抱k8s的过程中,遇到了难题。

    今天就来聊聊上K8s,研发团队如何从容一点?

    关于容器技术

    容器技术呱呱坠地到如今,在国内经历了如下3个阶段:

    • 婴儿期:2014-2016年的技术探索期
    • 少儿期:2017-2018年的行业试水期
    • 少年期:2019年以后的规模应用期

    容器技术带来的价值,通过它的广泛使用已经不言而喻,现在大致介绍容器技术的现状和趋势。

    • Kubernetes(K8s)已成为容器技术的事实标准

    • 大量企业已经在使用或者计划使用容器云

    • K8s从CO走向OS

    K8s一直以来被当做容器编排工具(Container Operation, CO),而这些年的发展,K8s已经成了云原生领域事实的操作系统(Operation System, OS)。

    难以驾驭的K8s

    K8s功能固然强大,但同时从K8s目前的定位——操作系统,就能看出它最大的特征:复杂,这就会衍生一系列问题:

    • 上手k8s绝非易事,用一个高级点的说法,叫学习曲线陡峭。并且容器技术的更新迭代非常快,Kubernetes衍生出的新概念新工具也在蓬勃发展(有兴趣的朋友可以搜索一下“Kubernetes生态”)。然而更有挑战性的点在于,如果想在实际的工作中用上K8s,整个研发团队都需要学,包括开发人员、测试人员、运维人员;
    • 市场上,K8s相关人才不多;
    • 项目使用K8s的不确定性高,可能会导致失败;
    • 项目切换到K8s的成本太大,导致你的老板可能会叫停这样的变革;
    • 需要适应K8s的工作模式,软件研发本来就是一个复杂的体系,包括了很多人使用很多工具分工合作,而使用K8s,很多工作方式与原来不一样。下面罗列一下,以供参考:

    • 在实际使用中,还有很多非常棘手的问题,比如:

    K8s yaml的配置一部分是开发关注的,一部分是运维关注的,如何分工协作?

    ConfigMap/Secret 不支持版本控制,参数多时配置起来很麻烦;

    集群如何给外部暴露端口?

    如何做热更新?

    多K8s集群如何管理?

    K8s集群本身如何备份和恢复?

    如何对K8s集群进行升级而不影响业务?

    K8s集群如何做资源规划?

    K8s是所有人的良药吗?

    K8s很好,然而用Ta很困难,是不是让人又爱又恨?怎么办?

    建议你冷静下来,仔细分析一下更重要的事情——K8s是否适合你、你的项目、你的团队?

    建议考虑如下内容:

    • 你的应用是否需要微服务?微服务带来便利的同时,也会给开发人员带来巨大负担,除了维护多个服务之外,可能需要一整套工具来分析解决微服务的问题。还要考虑分布式的一致性问题、服务通信带来的性能问题和安全问题等。如果不需要微服务,大概率也不需要K8s。
    • 你的应用需要扩展吗?Kubernetes 的一个关键特性是能对应用程序的各个部分进行横向扩展。流量会自动在各个 Pod 间路由和分配,如果配置完成,Kubernetes 甚至可以自动为你缩放 Pod 。如果你的应用有一个或多个热点组件需要处理突发事件,那这个特性就非常有价值。

    如果你的答案是你不需要K8s,那么恭喜你,你可以中止阅读了,你花费了10分钟不到的时间,得到了一个有价值的答案。

    如果你的答案是:你需要K8s,请继续阅读,也许对你有些许帮助。上面列的困难只是战术上的困难,是有办法解决的。

    我的团队该如何上K8s?

    关于how的问题,有大有小:大如我该如何度过这一生,小则有我该如何学习10以内的加法。而团队该如何上K8s,这就是一个宏大的问题。一般而言,大问题可以拆分为小问题,逐个求解得到答案。

    言归正传,团队如何上K8s,从大面上,答案包含2点,二者缺一不可:

    渐进式上K8s

    人员分工 + 第三方产品解决复杂性

    渐进式上K8s

    • 特定项目。选择即将要开发的新项目,简单一点的项目,没有迁移成本。
    • 特定完整团队。项目的leader需要有新技术的探索精神,项目中核心成员也有新技术的探索精神。关于特定团队,团队中的研发人员、测试人员、运维人员都需要从一开始就直接或间接使用K8s。直接是上原生K8s,间接是指通过第三方平台上K8s。
    • 测试环境。项目先在测试环境以K8s方式部署。

    取得成功之后,再扩展至生产环境、其他项目、其他团队。这样的方式,有利于团队积累对K8s的自信心。取得一定的广度成功的同时,在深度上也可以做一定的探索。比如,使用K8s配套的测试工具、运维工具,甚至采用一些开源项目的CRD,比如Open Kruise。甚至编写自己公司特有的CRD。

    人员分工 + 封装

    人类解决复杂性有2个非常重要的手段:分工、封装。在IT领域,这两个手段的例子俯拾皆是。具体到上K8s体现为:

    人员分工是指不需要整个团队的人都懂K8s,只需要特定的一两个人懂K8s,研发人员、测试人员只需配合相关的工作,由这一两个人来编写Dockerfile、K8s yaml,也可以由这一两个人写好脚本,开发人员和测试人员直接调用脚本,传递合适参数。

    封装。有如5种方式封装,第1条是穷人专用,第5条是土豪专用,第2、3、4条是经济适用条款。

    • 可以采用脚本或者模板的方式,对开发人员、测试人员屏蔽K8s的复杂性;
    • 采用开源的工具来封装操作复杂性,提供了Web UI,比如:OKD、Rancher等;
    • 购买商业化的容器云产品来封装操作复杂性,公有云或私有云的产品都可以,比如AWS/阿里云/腾讯云/华为云上的容器云产品;
    • 购买商业化的产品来封装操作复杂性、以及理解复杂性。市面上,既封装了操作复杂性、又封装了理解复杂性的产品不多,比如StarOS,StarOS都封装了K8s的概念,无需懂K8s即可使用。StarOS是一站式云原生开发平台,可视化服务编排,操作简单直接;
    • 自己团队开发容器云平台来封装操作复杂性、以及理解复杂性,土豪适用。

    数据来源:《艾瑞咨询:2020年中国容器云市场研究报告》

  • 相关阅读:
    SpringMVC中静态获取request对象 Spring中获取 HttpServletRequest对象【转载】
    springcloud 的loadbalancer 轮询算法切换方法 2021.4.3
    springboot项目启动增加图标
    rabbitmq 端口作用以及修改方法
    centos8 安装rabbitmq
    springcloud config client Value获取不到信息的问题的处理方法
    springcloud config配置git作为数据源然后启动报错 If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
    Sublime Text的列模式如何操作
    centos8 安装redis
    jQuery简单的Ajax调用
  • 原文地址:https://www.cnblogs.com/cloudtogo/p/15095437.html
Copyright © 2011-2022 走看看