Kubernetes 应用的自动水平扩容|学习笔记(一)

简介: 快速学习 Kubernetes 应用的自动水平扩容

开发者学堂课程【Kubernetes 云原生管理实践Kubernetes 应用的自动水平扩容】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/751/detail/13221


Kubernetes 应用的自动水平扩容

 

内容介绍:

一、Kubernetes HPA 扩展应用


一、Kubernetes HPA 扩展应用

1、怎么用 Kubernetes HPA 对应用进行扩展。并不是原生的 Kubernetes HPA,也不是其他的技术,基于 HPA 的一些扩展。主要是关于 OAM,就是开发应用模型,这之间有什么关联。

 

2、云原生架构为什么要提建设?因为阿里云发表了云原生架构的白皮书,里面特别提到了云原生架构和传统应用架构的不同。作为一个传统的应用,以云原生的眼光来看有三部分内容。一部分是核心的应用代码,这部分应用有些改变,比如以前是放在一起的单一应用,慢慢的变成了分布式应用,也有了微服务的架构。但是这些都是针对业务代码本身做的拆解。还有一部分是对第三方软件依赖性,比如说有的是用数据库,有的是用 macscue,有的是用日志,或者是其他的这些应用。这些应用它的特点是跟业务代码加码令,是可以重复使用的,有第三方的功能。还有一部分就是一些运维的能力,比如说很多时候要写一些关于高可用性,有的要写一些关于 node balancing 这样的代码。在云原生架构的环境下,这些代码都进行了一些组合,业务代码慢慢的变成了微服务,一些第三方的软件变成了云上的一些资源,比如说云上的数据库,去买一个 message ,买一个 christian 等等。还有一些运维能力,这些运维能力慢慢就下沉到了 PaaS 层、也就是平台层。所以在云原生架构的环境下,整个的应用跟传统的架构比是有很大的改变。这些改变也造成了在描述应用的时候,也会产生相应的改变。

image.png

 

3、为什么要采用云原生的架构?主要是为了提升应用交付迭代的速度,当传统的架构越变越大的时候,不得不去把它拆解掉。在拆解的过程中,如果用云原生架构下的一个应用,希望怎样去描述一个应用呢?应用代码把它叫做一个模块,有几个应用代码模块,然后第三方依赖模块,接着就是运维模块。所谓的运维模块,包括课程要讲的 HPA,包括 ingress。所有的对业务的模块进行运维操作的业务能力,都把它叫做运维模块。这种描述方式对于云原生架构的一个很自然、直接的,也是很直观的一种映射。

 

4、看一下在 Kubernetes 是怎样去描述一个运用的。可以看到这么多 yaml,而且这么多 yaml 文件当中是混在一起的。

image.png

 

比如用一个最常用的 deployment,在 deployment 里面有业务逻辑的部分,比如说它讲了 daughter image 在哪,开了哪一个端口,这个端口名字叫做 http 等等。也有一些运维的操作,replic 是一个,Running updates,发布的策略等等,这些都混在了一起,混在一起的情况是非常难以管理,不但非常难以管理而且很容易造成错误。为什么会产生这种情况?应用发布或者应用交付平台或者说应用部署的方式,是站在一个平台的角度或一个集群的角度,没有去想怎么样站在一个应用的角度去发布。这个当中就带来了很多问题,就像刚才说的,一个是混乱,第二个是职责不清,第三个是很难以管理。在种种弊端的情况下,提出了这样一个开源项目叫 OAMOAM 就是 Open Application Model,开放的应用模型。这是在云原生应用环境下对应用的一个描述,特别是在平台管理层上对应用进行的描述。这个项目是阿里云和微软、issue 等其他的三方共同开发的。目前已经进入了工具的开发期,他的规范基本上已经成熟和稳定了,现在要把代码实践的部分做好。

 

5OAM 分为几部分。                    

image.png

 

第一部分是组件,比如业务组建、组件1、组件2。在组件中引入一个概念叫 workloadworkload 是什么呢?它对应的 Kubernetes workload 的概念加以提升,就是把抽象程度变高了,变好了。Workload 也包含了 service 等等的产生。组件是作为 workload 的模板,把 workload 再往上提升。用这种方式来定义应用本身的组件是非常直观和简洁的

 

6、第二部分是 traits,叫特征。

image.png

 

这个字是从 rust 语言来的,traits 是对运维属性的一些描述,特别是在 Kubernetes 上一些应用的描述,比如说 scalingrolloutroute 等等。这些运维操作是绑定在 components 上,有一个非常重要的概念,对于应用的描述,比如application configuration,就是把应用完整的放在一起的时候,对于应用进行描述的时候,是把 component 放在那里。比如说我有一个组件,有一个容器,有一个模块,他有哪些操作是直接可以套用的,这种观念和现在的以平台为主视角这种观念是截然不同。

 

7application configuration 是另一个例子,他当中讲了有哪些 traits。在这个例子中用的就是 HPA,是原生自带的。HPA Kubernetes 的基本运维操作,是对于deployment 下的 scale 进行操作的。这个操作会去看一些指标,根据这些指标进行扩容和缩容的操作,两部分都有。

image.png

 

这个操作本身来讲,原生的那部分对于一些容器或计算资源作为指标,比如说 CPU memory 等等。这些往往是不够的,在这种情况下,需要进行扩展,扩展有不同的项目。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
程序让我们相遇
我叫橘橙黄又青,我来自广东湛江,也是刚刚加入编程这个大家庭。
164 0
|
C语言
初识C语言2——分支语句和循环语句
初识C语言2——分支语句和循环语句
363 5
|
机器学习/深度学习 存储 缓存
Geoffrey Hinton讲座回顾:使用快速权重来存储临时记忆
这个讲座谈了快速权重(fast weight)的思想及其实现。这种快速权重可以被用于存储最近的临时记忆,并且它们提供了一种实现这种类型的对过去的注意(attention)的神经上可行的方法——近期它已被证明在序列到序列模型上是非常有帮助的。通过使用快速权重,我们可以不再需要存储神经活动模式的副本。
431 0
Geoffrey Hinton讲座回顾:使用快速权重来存储临时记忆
|
Oracle 关系型数据库
【DATAGUARD】手工恢复备库日志中断
1、在备库检查日志缺失 FAL[client]: Failed to request gap sequence  GAP - thread 1 sequence 53415-53434  DBID 424533136 branch 710350416 FAL[c...
738 0
|
2天前
|
数据采集 人工智能 安全
|
11天前
|
云安全 监控 安全
|
3天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1011 151
|
3天前
|
编解码 人工智能 机器人
通义万相2.6,模型使用指南
智能分镜 | 多镜头叙事 | 支持15秒视频生成 | 高品质声音生成 | 多人稳定对话