上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是一站式云原生开发平台,可视化服务编排,操作简单直接
  • 自己团队开发容器云平台来封装操作复杂性、以及理解复杂性,土豪适用。
Kubernetes(通常缩写为k8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。在k8s中配置通常涉及编写配置文件(YAML格式),这些文件描述了应用程序如何运行,包括部署、服务、持久化存储等。以下是一些基本的k8s配置概念和步骤: 1. **部署(Deployment)**:部署用于创建和管理应用程序的无状态副本。你需要创建一个Deployment配置文件,指定应用镜像、副本数量等信息。 示例配置片段: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: replicas: 3 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-app-container image: my-app-image:latest ports: - containerPort: 8080 ``` 2. **服务(Service)**:服务是一个抽象层,定义了一组Pod的访问规则。你可以通过服务来暴露你的应用,使其能够接收外部请求。 示例配置片段: ```yaml apiVersion: v1 kind: Service metadata: name: my-app-service spec: selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 8080 type: LoadBalancer ``` 3. **持久化存储(PersistentVolume/PersistentVolumeClaim)**:如果你的应用需要持久化存储,你需要配置PersistentVolume(PV)和PersistentVolumeClaim(PVC)来管理存储资源。 示例配置片段: ```yaml apiVersion: v1 kind: PersistentVolume metadata: name: pv-volume spec: capacity: storage: 1Gi accessModes: - ReadWriteOnce hostPath: path: "/mnt/data" --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pv-claim spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi ``` 然后在你的Pod定义中引用PVC: ```yaml spec: containers: - name: my-app-container image: my-app-image:latest volumeMounts: - mountPath: "/path/to/mount" name: my-volume volumes: -claim ``` 要应用这些配置,你需要使用`kubectl`命令行工具,通过以下命令将配置应用到你的k8s集群: ```bash kubectl apply -f your-config-file.yaml ``` 请确保在执行操作前,你已经配置好k8s集群的访问权限,并且你拥有所需的权限来创建资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值