基于k8s的容器云Paas平台概要设计

码海逐星说
• 阅读 2667

基于K8s的容器云Paas平台应该是每个使用k8s的公司必须要做的一件事,今天我们尝试以应用为中心,采用搭积木的方式完成一个最小版本的容器云Paas平台的设计,Let's Go

1. 基础功能

我们期望是实现一个尽可能自助的服务,所以里面先不考虑一些诸如审批,之类的操作,在此部分我们要完成应用从打包到上线的关键流程

1.1 镜像打包

研发编写好代码,此时就要进行代码的生产环境部署,而部署的最小单元通常就是Docker镜像,那么我们就要实现一个自助的镜像打包服务,来实现从源代码到docker镜像的交付
基于k8s的容器云Paas平台概要设计

研发将代码提交到GIt代码仓库后,可以让代码仓库管理员设定一个回调钩子,通知我们的部署流水线,按照部署流水线按照之前设定的步骤来进行目标镜像的构建,并将构建的镜像发布到我们的镜像仓库中

其中部署流水线我们可以直接使用老牌的Jenkins,也可以选择Tekton这种云原生的部署工具

1.2 基础服务

基于k8s的容器云Paas平台概要设计

如果仅仅从应用本身来说,除了基础的运行环境和代码,通常还会依赖于一些基础服务(不考虑应用层的依赖), 比如mysql、redis、kafka等基础服务,但是诸如这种服务通常可能并不在k8s中(opeartor除外),则此时我们就需要一种自助的集成方式,这里我们通过service catalog 进行集成,用户只需要进行申请,则就可以自助获取对应的基础服务资源

1.3 日志监控

应用上线后,我们如何获取到对应的健康状态呢?通常就需要日志和监控来进行辅助,我们希望一种方式可以自助的进行服务的日志收集、监控项的收集,此时我们就需要一种与监控和日志系统集成的方式, 还会涉及到各自监控告警,针对日志我们使用EFK来进行日志的收集,监控则采用Prometheus完成,此外除了应用的基础资源监控,可以让业务也进行对应业务指标的暴露,这样我们就可以实现业务层的指标级别的监控

1.4 负载均衡

应用上线后,通常需要对外提供访问,在k8s中因为网络的原因,通常需要通过ingress来进行网络内部service的暴露,则要给用户提供一个可以将服务和负载均衡自动关联的组件

基于k8s的容器云Paas平台概要设计

负载均衡组件的选择通常有两种:老牌的负载均衡组件(Nginx/Kong/Haproxy)和微服务服务网关(Traefik)等,选择的核心通常是我们要不要改造,比如我们想在ingress上做一些基础验证、熔断、限流等实现则就需要进行二次开发,则就需要选择合适技术栈的ingress

这些Ingress通常我们需要一些专有节点,即只负责ingress的运行,即通常说的Proxy节点,我们需要结合K8s中的污点来进行一些控制,只允许ingress容器调度到这些节点上

1.5 部署更新

大多数应用都会随着产品的迭代或者bug修复,进行代码的迭代,而在k8s中则通常就是我们说的镜像更新,此过程可以借助k8s的deployment来进行自动完成

在应用更新的时候,通常需要进行灰度测试,即只允许部分用户进行访问,如果出现异常,则就立刻回滚,如果正常就滚动更新整个应用集群,而在k8s中实现该种方法主要包是通过Deployment来实现,我们这里主要是按照用户灰度的比例通过创建一个新的Deployment,如果成功就继续更新旧的Deployment来实现

1.6 应用下线

针对下线的应用,通常我们要进行对应的资源的释放操作,这里可能需要一个gc模块,负责应用的各种资源的清理工作

至此我们基于k8s和应用的一些基本需求,完成了基础版本的应用从代码打包、上线监控、部署更新、可观测性(日志监控)等基于云原生的应用全生命周期管理

2.基于K8s的Paas平台功能实现

在本节中我们主要关注基于K8s平面完成一些Paas平台相关的功能的实现,主要包含:多租户管理、弹性伸缩、容量规划、配置管理、共享存储、集群管理、应用市场等功能

2.1 多租户隔离

基于k8s的容器云Paas平台概要设计

多租户是基于paas平台的一种重要机制,多租户的本质是实现资源的隔离,资源的隔离通常又包含物理隔离和软件隔离,所谓物理隔离即在物理实体上(比如服务器)就进行隔离,而软件隔离则是指通过准入控制来进行资源的访问隔离,考虑大多数的公司内部通常不会对k8s进行物理隔离,所以我们这里可以直接使用k8s中的namespace来做软件几倍的隔离

2.2 弹性伸缩

基于k8s的容器云Paas平台概要设计

弹性伸缩按需计费是Paas平台的典型特点,而K8s中自带了HPA(横向自动伸缩),并且通过autoscaler实现了VPA(纵向自动伸缩)以及Cluster自动伸缩, 依靠这些控制器我们可以很容易的为用户提供弹性伸缩的功能(一般还是横向的多一些)

2.3 容量规划

容量规划主要的目标是通过限定各业务线的资源配额实现资源隔离,同时通过容量计算可以进行资源计费,并且进行未来容量的规划决策资源采购,进行企业的成本核算与控制, 此部分主要是依赖于k8s的ResourceQuota来实现配额功能,通过监控数据来做成本核算

2.4 配置管理

基于k8s的容器云Paas平台概要设计

在应用开发的过程中通常会使用一些配置信息,比如基础的日志、缓存、数据库等配置信息,在以前的环境中要么是基于env文件,要么是基于配置中心来进行管理,而在k8s中文名可以通过configMap和Secret两种资源来实现基础的配置管理,即将配置数据与镜像分离,实现按环境进行自动的配置加载

2.5 共享存储

在k8s中共享存储主要是依赖于PV/PVC来实现,这部分由于每个公司的基础设施差异相对较大,通常需要根据公司现有的技术能力来进行调整,具体的实现则依赖于CSI相关的实现,这里不再进行说明

2.6 集群管理

在公司内部的环境中有时候需要进行容灾备份等的考虑,则就需要进行多机房部署,那我们的PAAS的平台也需要拥有这种多集群管理的能力, 其实也适用于生产、测试等多环境集群的管理,集群的管理主要是为了解决平台多环境部署的问题,通过一套平台来进行整个集团所有集群的管理

2.7 应用市场

基于k8s的容器云Paas平台概要设计

应用市场主要是指的针对一些诸如redis、etcd、kafka中间件等应用除了之前说的服务目录的集成方式之外,我们还允许用户通过opeartor来创建一些基础服务,从而推动基础设施的容器化,这部分通常需要根据当前的环境还有开源的opeartor来进行微调,从而适配公司的内部环境

2.8 用户中心

在很多公司通常都会有一些企业内部的用户中心服务,可以集成该部分来进行容器云平台的用户认证甚至一些权限控制,避免重复造轮子

2.9 基础功能

除以上的业务功能外,通常我们还要进行基础的功能,比如操作审计、权限控制、安全管控等基础功能,至此我们已经拥有了一个基础可用的基于k8s的云原生Paas平台

3. 容器Paas平台总结

基于k8s的容器云Paas平台概要设计

通过上面的的基础建设,我们通常可以得到一个以应用为中的基于K8s的容器PaaS平台,并且从各种功能上来看,基于k8s的各种资源我们只需要很少的开发工作,就可以完成整个Paas平台的建设,从下一节我们开始进行一些关键部分的开发工作,并进行一些k8s operator的开发, Let's Go。。

kubernetes学习笔记地址: https://www.yuque.com/baxiaos...

微信号:baxiaoshi2020 基于k8s的容器云Paas平台概要设计
关注公告号阅读更多源码分析文章 基于k8s的容器云Paas平台概要设计
本文由博客一文多发平台 OpenWrite 发布!
点赞
收藏
评论区
推荐文章
爱库里 爱库里
4年前
Kubernetes笔记:十分钟部署一套K8s环境
Kubernetes是Goole开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理——百度百科。接触K8s也有半年多了,也基于阿里云平台搭建了包含多级服务、目前运行较为稳定的K8s集群(感兴趣的可参考\k8s云集群混搭模式,可能帮你节省50%以上的服务成本\,\k8s云集群混搭模式落地分享\,但一直没来得及对其进行系统
Wesley13 Wesley13
3年前
java和.net 双语言开发框架,开源的PaaS平台
   当下,我国国内的PaaS平台正在蓬勃发展,各式各样的PaaS平台层出不穷,但万变不离其宗,一个优秀的PaaS平台总有自己独树一帜或与众不同的地方。那么,首先我们要了解下什么是PaaS平台?PaaS是(PlatformasaService)的缩写,意思是平台即服务。通俗的讲PaaS是一个开放平台,在平台的基础上你可以进行二次组合开发运用,便捷
Stella981 Stella981
3年前
Minikube之Win10单机部署
Kubernetes(k8s)是自动化容器操作的开源平台,基于这个平台,你可以进行容器部署,资源调度和集群扩容等操作。如果你曾经用过Docker部署容器,那么可以将Docker看成Kubernetes底层使用的组件,Kubernetes是Docker的上层封装,通过它可以很方便的进行Docker集群的管理。今天我们使用minikube在单机上进行Kubern
Stella981 Stella981
3年前
Kubernetes的四种用户部署场景,你知吗?
Kubernetes可以作为容器编排引擎、PaaS或者作为云原生应用的核心基础架构被用户部署到生产环境。这些用例并不是相互排斥的。DevOps可以委托基于Kubernetes的PaaS层完成整个应用生命周期的管理(ALM),也可以独立部署Kubernetes管理CI/CD工具部署的应用。对于新应用程序可以使用Kubernetes管理微服务架构的云原始应用,支
Wesley13 Wesley13
3年前
5分钟带你浅谈企业级PaaS平台HZERO!
汉得企业级PaaS平台HZERO一款基于微服务架构的企业级PaaS平台,可支持企业各类系统搭建或产品研发,帮助企业快速构建技术中台。HZERO是企业级PaaS平台,结合汉得多年项目实施经验,应用微服务、容器、DevOps等云原生技术,封装了大量技术开发包、技术应用组件、技术场景实现能力,并结合以人工智能、大数据、物联网和
Stella981 Stella981
3年前
Kubernetes K8s架构师实战集训营,对标大厂高级K8s运维岗
KubernetesK8s架构师实战集训营,对标大厂高级K8s运维岗,覆盖主流容器云平台核心技术,由李振良老师主讲,共8个大的章节,包含工具共计20G。课程为K8s架构师中高级课程,适合K8s已经入门或者高级运维/开发人员学习,学完本套课程能够提升K8s架构设计及故障排查能力,增强公司K8s容器平台。!KubernetesK8s架构师实战集训营,对
Stella981 Stella981
3年前
Kubernetes(K8S)
一、简介  Kubernetes是Google公司在2014年6月开源的一个容器集群管理系统,使用Go语言开发,也叫K8S。Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes提供了应用部署,规划,更新,维护的一种机制。Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着
Go 开发者的涨薪通道:自主开发 PaaS 平台核心功能无密分享
PaaS:云计算服务中的平台即服务深度解析在云计算的广阔领域中,PaaS(PlatformasaService,平台即服务)作为一种重要的服务模式,正逐步成为企业数字化转型的关键推手。PaaS位于IaaS(基础设施即服务)和SaaS(软件即服务)之间,为开
容器、容器云和容器化PaaS平台之间到底是什么关系?
容器是一种操作系统级虚拟化技术,Docker是一种容器引擎。使用Docker来运行操作容器。但从容器自身来说,其提供的是IaaS层能力。Kubernetes提供了容器调度和管理的能力,加上云计算租户功能,实现容器云平台功能。而基于容器技术所构建的应用开发、应用托管和应用运维平台则可以称为容器化PaaS平台,它是一种轻量化PaaS实现。结合日志、监控、认证、权限等基础能力则可以构建企业级的平台和可复用服务,采用微服务架构实现企业技术服务中台能力,支撑企业业务敏捷研发和模式转型。