内容简介:基于Kubernetes的容器云Paas平台应该是每个使用Kubernetes的公司必须要做的一件事,今天我们尝试以应用为中心,采用搭积木的方式完成一个最小版本的容器云Paas平台的设计。我们期望是实现一个尽可能自助的服务,所以里面先不考虑一些诸如审批之类的操作,在此部分我们要完成应用从打包到上线的关键流程。研发编写好代码,此时就要进行代码的生产环境部署,而部署的最小单元通常就是Docker镜像,那么我们就要实现一个自助的镜像打包服务,来实现从源代码到Docker镜像的交付。
基于Kubernetes的容器云Paas平台应该是每个使用Kubernetes的公司必须要做的一件事,今天我们尝试以应用为中心,采用搭积木的方式完成一个最小版本的容器云Paas平台的设计。
基础功能
我们期望是实现一个尽可能自助的服务,所以里面先不考虑一些诸如审批之类的操作,在此部分我们要完成应用从打包到上线的关键流程。
镜像打包
研发编写好代码,此时就要进行代码的生产环境部署,而部署的最小单元通常就是 Docker 镜像,那么我们就要实现一个自助的镜像打包服务,来实现从源代码到Docker镜像的交付。
研发将代码提交到GIt代码仓库后,可以让代码仓库管理员设定一个回调钩子,通知我们的部署流水线,按照部署流水线按照之前设定的步骤来进行目标镜像的构建,并将构建的镜像发布到我们的镜像仓库中。
其中部署流水线我们可以直接使用老牌的Jenkins,也可以选择Tekton这种云原生的部署工具。
基础服务
如果仅仅从应用本身来说,除了基础的运行环境和代码,通常还会依赖于一些基础服务(不考虑应用层的依赖), 比如 MySQL 、 Redis 、Kafka等基础服务,但是诸如这种服务通常可能并不在Kubernetes中(Opeartor除外),则此时我们就需要一种自助的集成方式,这里我们通过Service catalog进行集成,用户只需要进行申请,就可以自助获取对应的基础服务资源。
日志监控
应用上线后,我们如何获取到对应的健康状态呢?通常就需要日志和监控来进行辅助,我们希望一种方式可以自助的进行服务的日志收集、监控项的收集,此时我们就需要一种与监控和日志系统集成的方式, 还会涉及到各自监控告警,针对日志我们使用EFK来进行日志的收集,监控则采用Prometheus完成,此外除了应用的基础资源监控,可以让业务也进行对应业务指标的暴露,这样我们就可以实现业务层的指标级别的监控。
负载均衡
应用上线后,通常需要对外提供访问,在Kubernetes中因为网络的原因,通常需要通过Ingress来进行网络内部Service的暴露,则要给用户提供一个可以将服务和负载均衡自动关联的组件。
负载均衡组件的选择通常有两种:老牌的负载均衡组件(Nginx、Kong、Haproxy)和微服务服务网关(Traefik)等,选择的核心通常是我们要不要改造,比如我们想在Ingress上做一些基础验证、熔断、限流等实现就需要进行二次开发,这就需要选择合适技术栈的Ingress。
这些Ingress通常我们需要一些专有节点,即只负责Ingress的运行,即通常说的Proxy节点,我们需要结合Kubernetes中的污点来进行一些控制,只允许Ingress容器调度到这些节点上。
部署更新
大多数应用都会随着产品的迭代或者bug修复,进行代码的迭代,而在Kubernetes中则通常就是我们说的镜像更新,此过程可以借助Kubernetes的Deployment来进行自动完成。
在应用更新的时候,通常需要进行灰度测试,即只允许部分用户进行访问,如果出现异常,则立刻回滚,如果正常就滚动更新整个应用集群,而在Kubernetes中实现该种方法主要包是通过Deployment来实现,我们这里主要是按照用户灰度的比例通过创建一个新的Deployment,如果成功就继续更新旧的Deployment来实现。
应用下线
针对下线的应用,通常我们要进行对应的资源的释放操作,这里可能需要一个gc模块,负责应用的各种资源的清理工作。
至此我们基于Kubernetes和应用的一些基本需求,完成了基础版本的应用从代码打包、上线监控、部署更新、可观测性(日志监控)等基于云原生的应用全生命周期管理。
基于Kubernetes的PaaS平台功能实现
在本节中我们主要关注基于Kubernetes平面完成一些PaaS平台相关的功能的实现,主要包含:多租户管理、弹性伸缩、容量规划、配置管理、共享存储、集群管理、应用市场等功能。
多租户隔离
多租户是基于PaaS平台的一种重要机制,多租户的本质是实现资源的隔离,资源的隔离通常又包含物理隔离和软件隔离,所谓物理隔离即在物理实体上(比如服务器)就进行隔离,而软件隔离则是指通过准入控制来进行资源的访问隔离,考虑大多数的公司内部通常不会对Kubernetes进行物理隔离,所以我们这里可以直接使用Kubernetes中的namespace来做软件级别的隔离。
弹性伸缩
弹性伸缩按需计费是PaaS平台的典型特点,而Kubernetes中自带了HPA(横向自动伸缩),并且通过autoscaler实现了VPA(纵向自动伸缩)以及Cluster自动伸缩,依靠这些控制器我们可以很容易的为用户提供弹性伸缩的功能(一般还是横向的多一些)。
容量规划
容量规划主要的目标是通过限定各业务线的资源配额实现资源隔离,同时通过容量计算可以进行资源计费,并且进行未来容量的规划决策资源采购,进行企业的成本核算与控制, 此部分主要是依赖于Kubernetes的ResourceQuota来实现配额功能,通过监控数据来做成本核算。
配置管理
在应用开发的过程中通常会使用一些配置信息,比如基础的日志、缓存、数据库等配置信息,在以前的环境中要么是基于env文件,要么是基于配置中心来进行管理,而在Kubernetes中可以通过ConfigMap和Secret两种资源来实现基础的配置管理,即将配置数据与镜像分离,实现按环境进行自动的配置加载。
共享存储
在Kubernetes中共享存储主要是依赖于PV/PVC来实现,这部分由于每个公司的基础设施差异相对较大,通常需要根据公司现有的技术能力来进行调整,具体的实现则依赖于CSI相关的实现,这里不再进行说明。
集群管理
在公司内部的环境中有时候需要进行容灾备份等的考虑,那就需要进行多机房部署,我们的PaaS的平台也需要拥有这种多集群管理的能力, 其实也适用于生产、测试等多环境集群的管理,集群的管理主要是为了解决平台多环境部署的问题,通过一套平台来进行整个集团所有集群的管理。
应用市场
应用市场主要是指的针对一些诸如Redis、etcd、Kafka中间件等应用,除了之前说的服务目录的集成方式之外,我们还允许用户通过Opeartor来创建一些基础服务,从而推动基础设施的容器化,这部分通常需要根据当前的环境还有开源的Opeartor来进行微调,从而适配公司的内部环境。
用户中心
在很多公司通常都会有一些企业内部的用户中心服务,可以集成该部分来进行容器云平台的用户认证,甚至一些权限控制,避免重复造轮子。
基础功能
除以上的业务功能外,通常我们还要进行基础的功能,比如操作审计、权限控制、安全管控等基础功能,至此我们已经拥有了一个基础可用的基于Kubernetes的云原生PaaS平台。
容器PaaS平台总结
通过上面的的基础建设,我们通常可以得到一个以应用为中的基于Kubernetes的容器PaaS平台,并且从各种功能上来看,基于Kubernetes的各种资源我们只需要很少的开发工作,就可以完成整个PaaS平台的建设,从下一节我们开始进行一些关键部分的开发工作,并进行一些Kubernetes Operator的开发。
Kubernetes学习笔记: https://www.yuque.com/baxiaoshi/tyado3
以上所述就是小编给大家介绍的《基于Kubernetes的容器云PaaS平台概要设计》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
构建高可用Linux服务器(第3版)
余洪春 / 机械工业出版社 / 2014-10 / 79.00元
《构建高可用Linux服务器(第3版)》是Linux运维领域公认的经典畅销书,是国内51CTO、IT168等知名网站和多位资深运维专家共同推荐的运维工程师必备的工具书! “酒哥”在Linux运维领域潜心实践近10年,一直在运维一线,技术和思维都紧跟时代的发展,非常清楚运维工程师们需要什么,应该学习什么。本书不仅是他近10年工作经验的结晶,同时也是他的数万名读者和数十万粉丝共同需求和集体智慧的......一起来看看 《构建高可用Linux服务器(第3版)》 这本书的介绍吧!