首页 > 其他分享 >k8s实践——HPA实践实例

k8s实践——HPA实践实例

时间:2024-08-19 12:04:31浏览次数:13  
标签:kubectl 实践 server metrics nginx HPA k8s requests

0x01 水平自动扩缩HPA

指statefulset和deployment这些负载,可以根据系统的负载压力,自动扩容应对业务高峰,并在低峰时自动缩容,降低资源消耗。

0x02 准备

要求已经有一个1.23以上的k8s集群,在其中部署metrics-server。示例用的1.25,运行时为containerd。

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
ctr -n k8s.io image pull registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.7.1 
ctr -n k8s.io image tag registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.7.1 registry.k8s.io/metrics-server/metrics-server:v0.7.1

kubelet的证书是默认生成的,需要修改metrics-server deploy 添加命令参数--kubelet-insecure-tls,跳过证书认证,否则metrics-server 无法采集 kubelet的metrics。

kubectl -n kube-system edit deploy metrics-server

确认已经正常。

kubectl -n kube-system get deploy

0x03 根据负载伸缩基本示例

要求:

  1. Pod配置了对应资源的requests值。否则会提示“the HPA was unable to compute the replica count: failed to get cpu utilization: missing request for cpu”

创建一个负载nginx deploy,副本为1,方便观察自动扩容。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: web
        image: "docker.io/library/nginx:1.23-alpine"
        ports:
        - containerPort: 80
          name: http
          protocol: TCP
        resources:
          requests:
            cpu: 10m

创建hpa对象。

kubectl autoscale  --max=3 deploy nginx --cpu-percent=30
$ kubectl get hpa nginx
NAME    REFERENCE          TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
nginx   Deployment/nginx   10%/30%    1         3         1          18m

默认指定的是平均使用值,即如果CPU的使用率超出了30%,就会自动扩容。默认配置中的比例是Pod中当前使用的值与requests值的比值。

cpu-percent = usage/requests * 100

解释:上述nginx启动后CPU占用很小,k8s中最小的值就是1m。可以通过kubectl top pod确认。requests值为10m,则现在的比例是10%,即没达到30%的比例。

$ kubectl top pod
NAME                     CPU(cores)   MEMORY(bytes)
nginx-5db849c76f-hrpph   1m           5Mi

下面可以通过压力工具对nginx进行加压,触发扩容。压力大时,很快扩容出了2个Pod。

$ kubectl get pods -w
NAME                     READY   STATUS    RESTARTS   AGE
nginx-54d69bd567-ddrt9   1/1     Running   0          5m48s
nginx-54d69bd567-qzs2r   1/1     Running   0          8s
nginx-54d69bd567-v25m8   1/1     Running   0          8s

示例给的是通过CPU使用率扩容,也可以根据平均使用量和使用量实现自动扩容。官方的API中还有如何控制Pod扩容和缩容的速率。见https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/workload-resources/horizontal-pod-autoscaler-v2/

标签:kubectl,实践,server,metrics,nginx,HPA,k8s,requests
From: https://www.cnblogs.com/linlinsite/p/18367058

相关文章

  • 全面指南:LLMs中的Llama-3模型——简介、安装教程、使用技巧及案例实践详解
    LLMs之Llama3:Llama-3的简介、安装和使用方法、案例应用之详细攻略导读:2024年4月18日,Meta重磅推出了MetaLlama3,本文章主要介绍了Meta推出的新的开源大语言模型MetaLlama3。模型架构Llama3是一种自回归语言模型,采用了优化的Transformer架构。调优版本使用了监督......
  • 在K8S中,⼀个pod的不同container能够分开被调动到不同的节点上吗?
    在Kubernetes(K8S)中,一个Pod是一组一起部署和管理的容器的集合。Pod内的容器总是被调度到同一个节点上运行,这是因为Pod设计的基本理念是其内的所有容器需要紧密耦合并且共享相同的网络命名空间和存储卷。具体来说,Pod内的容器有以下特点:共享IP地址:Pod内的所有容器共享......
  • 《软件性能测试分析与调优实践之路》(第2版) 读书笔记(二)总体介绍(下)-真正从性能分析与
    《软件性能测试分析与调优实践之路》(第2版) 是清华大学出版社出版的一本图书,作者为张永清,全书共分为9章,如下图所示 图书介绍:《软件性能测试分析与调优实践之路》(第2版) 本文是接着 《软件性能测试分析与调优实践之路》(第2版)读书笔记(一)总体介绍(上)-真正从性能分析与调......
  • 在K8S中,如果容器没有bash命令,如何进⼊容器排查问题?
    在Kubernetes(K8S)中,如果容器内没有bash或其他常见的shell命令(如sh),那么直接通过kubectlexec命令进入容器进行问题排查会受限。不过,仍有一些方法可以用来间接地进入容器或获取容器的相关信息来排查问题。以下是一些常用的方法:1.使用kubectllogs命令查看容器日志容器日志是了解容......
  • 在K8S中,如果是因为开发写的镜像问题导致pod起不来该怎么排查?
    在Kubernetes(K8S)中,如果Pod无法启动是由于开发编写的镜像问题导致的,可以通过以下步骤进行详细排查:一、检查镜像状态确认镜像名称和标签:使用kubectldescribepod<pod-name>命令查看Pod的详细信息,确认Pod中引用的镜像名称和标签是否正确。检查镜像是否存在于仓库:登录到Do......
  • 在K8S中,在服务上线的时候Pod起不来怎么进行排查?
    当Kubernetes(K8S)中的服务上线时Pod无法启动,可以按照以下步骤进行详细的排查:1.检查Pod的状态首先使用kubectlgetpods命令查看Pod的状态,确认Pod是否处于Running状态。如果Pod处于Pending、Error或其他非正常状态,则需要进一步排查。kubectlgetpods2.......
  • 在K8S中,Deployment⽀持扩容吗?它与HPA有什么区别?
    在Kubernetes(K8S)中,Deployment支持扩容,并且是用于管理应用的推荐方式之一。Deployment提供了一种声明式的方式来更新应用实例,并支持滚动更新、回滚等功能。下面详细介绍Deployment的扩容功能及其与HorizontalPodAutoscaler(HPA)的区别。1.Deployment的扩容功能在......
  • 环境多介质逸度模型实践技术与典型案例【代码】应用
    随着污染物在各种环境中的迁移和转化,多介质污染物模型日益受到关注。在各类多介质模型中,基于逸度概念的逸度模型由于运用范围广,建模数据要求较低而广受欢迎。帮助广大科研及工程人员能够正确运用逸度模型评估有机污染物的危害。专题一:基本理论1.逸度的定义2.逸度模型的基本......
  • 分享一些使用淘宝商品详情数据接口的实践经验
    以下是一些使用淘宝商品详情数据接口的实践经验:充分理解接口文档仔细研究淘宝提供的接口文档,包括请求参数、返回数据结构、错误码等。例如,明确不同参数对获取数据的详细程度和准确性的影响。关注接口的更新和变更通知,及时调整代码以适应新的接口规则。数据预处理和清洗接......
  • DDD领域驱动设计的原理与实践
    目录什么是DDD领域驱动设计?定义与概念:核心思想:核心概念:核心原则:优势与应用:与微服务架构和传统三层架构的关系:理解领域模型举例统一语言(UbiquitousLanguage)实体(Entity)值对象(ValueObject)聚合(Aggregate)仓储(Repository)领域服务(DomainService)限界上下文(Bounded......