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

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

1. 基础功能

咱们指望是实现一个尽量自助的服务,因此里面先不考虑一些诸如审批,之类的操做,在此部分咱们要完成应用从打包到上线的关键流程redis

1.1 镜像打包

研发编写好代码,此时就要进行代码的生产环境部署,而部署的最小单元一般就是Docker镜像,那么咱们就要实现一个自助的镜像打包服务,来实现从源代码到docker镜像的交付
image.pngsql

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

其中部署流水线咱们能够直接使用老牌的Jenkins,也能够选择Tekton这种云原生的部署工具数据库

1.2 基础服务

image.png

若是仅仅从应用自己来讲,除了基础的运行环境和代码,一般还会依赖于一些基础服务(不考虑应用层的依赖), 好比mysql、redis、kafka等基础服务,可是诸如这种服务一般可能并不在k8s中(opeartor除外),则此时咱们就须要一种自助的集成方式,这里咱们经过service catalog 进行集成,用户只须要进行申请,则就能够自助获取对应的基础服务资源缓存

1.3 日志监控

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

1.4 负载均衡

应用上线后,一般须要对外提供访问,在k8s中由于网络的缘由,一般须要经过ingress来进行网络内部service的暴露,则要给用户提供一个能够将服务和负载均衡自动关联的组件服务器

image.png

负载均衡组件的选择一般有两种:老牌的负载均衡组件(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 多租户隔离

image.png

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

2.2 弹性伸缩

image.png

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

2.3 容量规划

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

2.4 配置管理

image.png

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

2.5 共享存储

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

2.6 集群管理

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

2.7 应用市场

image.png

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

2.8 用户中心

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

2.9 基础功能

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

3. 容器Paas平台总结

image.png

经过上面的的基础建设,咱们一般能够获得一个以应用为中的基于K8s的容器PaaS平台,而且从各类功能上来看,基于k8s的各类资源咱们只须要不多的开发工做,就能够完成整个Paas平台的建设,从下一节咱们开始进行一些关键部分的开发工做,并进行一些k8s operator的开发, Let's Go。。

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

相关文章
相关标签/搜索