开发者学堂课程【Kubernetes 云原生管理实践:课时2:Kubernetes 应用的自动水平扩容】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/293/detail/3439
课时2:Kubernetes 应用的自动水平扩容
内容介绍:
一、云原生架构的特点
二、Open Application Model
三、KEDA
Kubernetes HPA扩展应用,不是原生Kubernetes HPA也不是其它的技术是基于Kubernetes HPA的扩展,主要介绍的是关于oam开放应用模型。
一、云原生架构的特点
1、阿里云在上个月发表云原生架构的白皮书,里面特别提到云原生架构跟传统的应用架构的不同,作为传统的应用在云原生的眼光看有三部分的内容,一部分是核心的业务代码,这部分应用一直都有改变,比如以前是放在一起,单一应用慢慢变成分布式应用,又有微服务的架构,但是都针对于业务代码本身做的拆解,还有一部分是第三方软件的依赖性,比如用数据库,message q用日志或者用其它的应用,特点跟业务代码是强绑定,可以重复使用,有第三方的功能,还有一部分是运维的能力,比如很多时候要写高可用性,no balance部分代码,在云原生架构的环境下代码进行组合,业务代码变成云服务,第三方的软件变成云上的资源,比如云上的数据库,买message q,kafka等,运维能力慢慢的下沉到pass层,也是平台层,在云原生环境下整个的应用跟传统的架构比有很大的改变,改变造成在描述应用时,也会有产生相应的改变,采用云原生架构主要是为提升应用交付迭代的速度,当传统的架构越变越大时不得不想要把它拆解掉。拆解的过程中如果用云原声架构下的应用。
2、云原生应用的部署:理想情况
应用代码模块
第三方依赖模块
运维模块
应用代码叫做模块,第三方依赖模块,比如今天在某个云上买某个服务,运维模块包括像hpa,所有业务模块进行运维操作,能力都叫运维模块,描述的方式对云原生架构,很自然,很直接,也是很直观的一种映射。
3、云原生应用的部署:现实
configmap.yaml
data-pvc.yaml
deployment.yaml
etc-pvc.yaml
ingress.yaml
secrets.yaml
svc.yaml
在google怎么描述应用,有很多yaml文件,文件中都是混在一起,比如depolment很常用,depolment有业务逻辑的部分,docker image在哪,开哪个端口,名字叫http等,Protocols tcp,包括运维的操作,比如replicas是一个,rollingupdate发布的策略,混在一起非常难于管理,很容易造成错误,应用发布或者是应用交付平台,运用部署的方式是站在平台的角度或者是站在集群的角度,没有想站在应用的角度发布,当中有很多问题,混乱,职责不清,难于管理。
二、Open Application Model
1、在弊端的情况下提出开源项目叫做oam,Open Application Model是开放的应用模型,在云原生应用环境下对于应用的描述,特别是在平台管理层上对应用进行的描述,项目是阿里云和微软,Engineer,Kubernetes三方共同开发,目前已经进入工具的开发期,规范基本上比较成熟和稳定,把代码时间的部分做好。
2、oam第一部分是组件,业务组件组件一,组件二,frontend,引入概念workload加以提升,对应以把抽象程度变高,变好,workload包含Service等的产生,组件是作为workload的模板,把workload再往上升一下,可以看到用这种方式定义的应用本身的组件应该是非常直观和简洁的。
$ kubectl get components
NAME WORKLOAD TYPE
Frontend deployment.apps.k8s.io
$ kubectl get deployment
NAME REVISION AGE
frontend-c8bb659c5 1 2d15h
frontend-a8eb65xfe 2 10m
3、第二部分是traits特征,traits是对运维属性的描述,特别是在appconfig的描述,比如scaling,rollout,route,cert,traffic,运维操作是绑定在component上,对于应用的描述,比如application configuration,把应用完整的都放在一起,对于应用进行描述时把component放在那里,有组件,有容器,有模块,它有哪操作是直接把它套上去的,这种观念以平台为主角或者主视角的这种观点是截然不同的。applicationconfiguration是另外的例子,有哪些traits,用的hpa远程自带,hpa是kubernetes基本的运维操作,对deployment replicas进行操作,会看指标,根据指标进行扩容和缩容的操纵,原生的部分主要是对于容器,对于计算资源作为指标,比如cpu等,但是这些往往不够,在这种情况下需要对它进行扩展。

