课时2:Kubernetes 应用的自动水平扩容|学习笔记(二)

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

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

课程地址https://developer.aliyun.com/learning/course/293/detail/3439


课时2:Kubernetes 应用的自动水平扩容

三、KEDA

1、Kubernetes-based Event Driven Autoscaler扩展原生HPA,对于原生的hpa的扩展,基于原生的hpa,它的api基于hpa的api,但是它进行扩展,很多业务比较复杂,扩缩容的原理或者原则不是靠cpu或者靠内存可以解决,比如有些应用,它用义务通信的方式,用反应式的编程,cpu或者在内存上看不出它有多大的变化,但是它在响应的速度和时间上会有很大的差异,在这种环境下用原生的hpa肯定不够。

2、例子是普罗米修斯所收集的数据进行采样,它设置策略进行扩容,只是把它作为使用的范例,如何把它的scaler作为oam的trait用,把它绑定到应用上,操作或者运用定义的方式跟传统的或者经常看到complice定义或者介绍有巨大的不同。

image.png

demo演示的步骤。

##Install Keda

helm install keda keda/keda

## Install OAM

kubectl create namespace oam-system

helm install oam --namespace oam-system crossplane-master/ oam-kubernetes-runtime --devel

## Install prometheus

kubectl apply -f prometheus . yaml

## Create application

kubectl apply -f Components/ go-prom. yaml

kubectl apply -f definitions /kedahpa . yaml

kubectl apply -f appconfig demo1 ·yaml

## Generate load

kubectl apply -f frontend . yaml

kubect1 exec --stdin --tty front-end-xxxxx -- /bin/bash

curl -O hey https:/ 1 storage . googleapis . com/ hey-release/hey linux_ amd64 && chmod a+x hey

./hey -n 2000 http:/ /go-prom-app-v1 : 8080/test

kubectl get pods -W

4、minikube用任何集群都可以,只要是标准的集群即可,只要是hotel命令都可以,安装Keda。Keda是Kubernetes Event-driven Autoscaling业务会产生流量,事件驱动的流量,根据事件驱动进行扩容,道理很简单,关键是生态的建设,Keda想的很好,包括整个微软开源的整个思路,做building block,做很多小的组件,让大家用,跟oam的设计非常契合,oam希望有很多的trait,应用的组件上面,用这种方式扩展云原生的功能和能力,整个的社区基于流量事件进行鉴定。

image.png装好Keda后,安装oam有两步,创建namespace,再安装oam,runtime 大项目叫crossplane,oam是在它下面的实现,因为crossplane项目是自发提出对oam的概念进行实现,慢慢跟微软一起加入,把标准实现出来,所以现在oam和runtime是在crossplane的项目占一部分。可以把runtime想成这stk,在stk的基础上也开发新的功能,这些应用和组件在oam的项目下,不是crossplane下面。安装普罗米修斯,在云上有各种不同的版本,这次用的是比较基础,但是为项目定制的。

apiVersion: core. oam. dev/v1alpha2

kind: TraitDefinition 定义

metadata :

name :

sca ledobjects. keda.k8s. io

spec :

definitionRef:

name: scaledobjects. keda.k8s. io 名字

演示是搬过来的,没有进行任何的改造,Trait 标准化是有要求的,按照oam的规范开发Trait,用户的信用各方面都会好很多,但是为保证 Trait能够最大化的兼容,现在已有的这些cid,也有照搬的能力,硬搬过来,component在文件里面,先定义containerizedwo rkloads,把deployment跟service放在一起,不用写两遍,写两遍很麻烦,定义component,引用kind类型containerizedwo rkload,只有业务代码所关心的部分,component定义跟ppt中相比简单很多,名字只用一次。绑在一起的,componentname名字就是go-prom-app-v1名字,把trait放在下面,把定义拉过来,效果不好,但是好用,如果东西是经过改造的,经过包装,所以声明的东西就不需要了,剩下核心的部分spec部分,策略会留下来。

声明kubectl apply -f Components/ go-prom. yaml

kubectl apply -f definitions /kedahpa . yaml

定义kubectl apply -f appconfig demo1 ·yaml

workload包含两部分,deployment和service,可以看到go-prom-app-v1-5b5d4bbbc4-xvwv8和go-prom-app-v1,

查看hori zontalpodautoscaler. autoscaling/ keda-hpa-go-prom-app-v1

因为现在没有流量,所以只是起来了,查看hpa,可以看到keda-hpa-go-prom-app-v1符合hpa的api,只是注册,没有真的逻辑,真正的业务逻辑在describe hori zontalpodautoscaler . autoscaling/keda-hp中,这是基本的情况,加流量,用另外容器进行操作,用kubectl apply - f frontend. yaml在集群里面,一般看到实验里面都会创建ingress,但是很多时候应用并不是一定非有这些东西,做演示的软件往往为了显示自己的功能,它会把所有的东西都给拉满,但是实际上应用时并没有这么多的东西,在这种情况下是尽量的缩减,这是非常简单的例子,进入kubect1 exec --stdin --tty front-end-xxxxx -- /bin/bash,进来之后下载工具hey,在短期内会产生流量,

curl -O hey https:/ 1 storage . googleapis . com/

hey-release/hey linux_ amd64 && chmod a+x hey

对hey进行操作,

./hey -n 2000 http:/ /go-prom-app-v1 : 8080/test

可以看到已经对流量起到反应,

开始不停的往上扩容,本身应用是预料之中的,因为keda项目已经测试过,不是测扩容和缩容,主要用oam,component方式进行扩容和缩容,比传统的以平台或者以集群为中心的角度出发去做事情容易很多,这是主要的信息。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
1天前
|
运维 Kubernetes Linux
Kubernetes详解(七)——Service对象部署和应用
Kubernetes详解(七)——Service对象部署和应用
9 3
|
4天前
|
Kubernetes 应用服务中间件 nginx
Kubernetes详解(六)——Pod对象部署和应用
在Kubernetes系列中,本文聚焦Pod对象的部署和管理。首先,通过`kubectl run`命令创建Pod,如`kubectl run pod-test --image=nginx:1.12 --port=80 --replicas=1`。接着,使用`kubectl get deployment`或`kubectl get pods`查看Pod信息,添加`-o wide`参数获取详细详情。然后,利用Pod的IP地址进行访问。最后,用`kubectl delete pods [Pod名]`删除Pod,但因Controller控制器,删除后Pod可能自动重建。了解更多细节,请参阅原文链接。
11 5
|
7天前
|
Kubernetes Cloud Native 持续交付
【Docker专栏】Kubernetes与Docker:协同构建云原生应用
【5月更文挑战第7天】本文探讨了Docker和Kubernetes如何协同构建和管理云原生应用。Docker提供容器化技术,Kubernetes则负责容器的部署和管理。两者结合实现快速部署、自动扩展和高可用性。通过编写Dockerfile创建镜像,然后在Kubernetes中定义部署和服务进行应用暴露。实战部分展示了如何部署简单Web应用,包括编写Dockerfile、构建镜像、创建Kubernetes部署配置以及暴露服务。Kubernetes还具备自动扩展、滚动更新和健康检查等高级特性,为云原生应用管理提供全面支持。
【Docker专栏】Kubernetes与Docker:协同构建云原生应用
|
8天前
|
Kubernetes Cloud Native 持续交付
构建高效云原生应用:Kubernetes与微服务架构的融合
【5月更文挑战第6天】 在数字化转型的浪潮中,企业正迅速采纳云原生技术以实现敏捷性、可扩展性和弹性。本文深入探讨了如何利用Kubernetes这一领先的容器编排平台,结合微服务架构,构建和维护高效、可伸缩的云原生应用。通过分析现代软件设计原则和最佳实践,我们提出了一个综合指南,旨在帮助开发者和系统架构师优化云资源配置,提高部署流程的自动化水平,并确保系统的高可用性。
29 1
|
17天前
|
Kubernetes Cloud Native 持续交付
构建高效云原生应用:以Kubernetes为核心
【4月更文挑战第27天】 在当今数字化转型的浪潮中,企业急需构建灵活、可扩展的应用来应对不断变化的市场需求。云原生技术以其独特的优势应运而生,成为推动现代应用开发和部署的重要力量。本文深入探讨了云原生的核心组件之一——Kubernetes,解析其如何通过容器编排优化资源利用,提高应用的弹性和可维护性。同时,文章将展示如何在云平台上实现高效的服务发现、自动扩缩容以及持续集成和持续部署(CI/CD),进一步阐述云原生架构下的最佳实践和面临的挑战。
|
17天前
|
Kubernetes 负载均衡 Docker
【专栏】构建高效微服务架构:Docker和Kubernetes在构建微服务架构中的应用
【4月更文挑战第27天】本文介绍了Docker和Kubernetes在构建微服务架构中的应用。Docker是开源容器引擎,用于打包和分发应用,实现隔离和封装,提升可扩展性和可维护性。Kubernetes是容器编排平台,自动化部署、扩展和管理容器,提供负载均衡和故障转移。二者结合,能高效支持微服务架构。文中通过实例展示了如何将用户、商品和订单服务用Docker打包,再用Kubernetes部署和管理,确保微服务稳定运行。
|
1月前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
23 4
|
1月前
|
JSON Kubernetes Go
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
39 0
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
|
1月前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
30 0
|
2月前
|
Kubernetes API 调度
总结归纳Kubernetes | 一站式速查知识,助您轻松驾驭容器编排技术(水平扩展控制)
总结归纳Kubernetes | 一站式速查知识,助您轻松驾驭容器编排技术(水平扩展控制)
62 0