当前位置: 首页 > news >正文

kubernetes服务自动伸缩-VPA

实验环境

安装好k8s集群

一、准备工作

1、部署Metrics Server

VPA 依赖 Metrics Server 来获取 Pod 的资源使用数据。首先需要部署 Metrics Server

下载地址(需要连接VPN):wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability-1.21+.yaml

(1)上传high-availability-1.21+.yaml文件到/root目录(master1)

(2)上传metrics-server.tar包到/root目录并导入(master1、worker1、worker2)

docker load -i metrics-server.tar

(3)禁用 Kubelet 的 TLS 证书验证

kubelet 证书需要由集群证书颁发机构签名,或者通过向 Metrics Server 传递参数 --kubelet-insecure-tls 来禁用证书验证

vim high-availability-1.21+.yaml

添加:

        - --kubelet-insecure-tls

(4)创建资源

kubectl apply -f high-availability-1.21+.yaml

kubectl get pod -n kube-system

查看 Kubernetes 集群中节点资源使用情况(CPU 和内存)

kubectl top nodes

查看指定命名空间(kube-system)中所有 Pod 的资源使用情况(CPU 和内存)

kubectl top pod -n kube-system

2、升级openssl(master1、worker1、worker2)

yum -y install openssl-devel openssl11 openssl11-devel

openssl11 version

将系统中的默认 openssl 替换为 openssl11

which openssl

which openssl11

rm -rf $(which openssl)

ln -s /usr/bin/openssl11 /usr/bin/openssl

openssl version

3、安装git-2.23.0,系统默认安装的git版本太低(master1)

安装依赖

yum -y install gcc zlib-devel.x86_64

下载或上传git-2.23.0.tar.gz包到/root目录

下载地址:wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.23.0.tar.gz

tar -zxf git-2.23.0.tar.gz

cd git-2.23.0/

mkdir -p /usr/local/git

编译安装git

./configure --prefix=/usr/local/git --with-gitconfig=/etc/gitconfig && make && make install

rm -rf /usr/bin/git

ln -s /usr/local/git/bin/git /usr/bin/git

git --version

二、部署VPA

1、安装autoscaler软件

(1)上传vpa-autoscaler.tar包到/root目录并导入(master1、worker1、worker2)

docker load -i vpa-autoscaler.tar

(2)上传autoscaler.tar源码文件到/root目录并解包(master1)

tar xf autoscaler.tar

进入目录执行脚本

cd autoscaler/vertical-pod-autoscaler/

bash ./hack/vpa-up.sh

(3)查看在 kube-system 命名空间中运行的所有 Pod

kubectl get pod -n kube-system

等待VPA相关Pod运行正常

2、VPA 策略

Off

仅提供资源建议,不实际修改 Pod 的资源请求和限制。

VPA不会应用任何资源推荐,只是收集和显示数据。

Initial

仅在 Pod 创建时设置资源请求和限制,不自动更新。

VPA只会在Pod创建时应用资源推荐。一旦Pod启动,即使后续有新的资源推荐,也不会再进行调整。

Recreate

当VPA生成新的资源推荐时,它会终止当前的Pod并重新创建一个新的Pod,新Pod将采用最新的资源推荐。这种方式会导致服务短暂中断,但能确保立即应用新的资源设置。

Auto

自动调整资源并重启 Pod。

这是默认模式。在这种模式下,VPA会尝试在线调整运行中的Pod的资源请求和限制,而无需重启Pod。如果无法在线调整(例如,由于内核或Kubernetes版本的限制),则会选择重新创建Pod。

三、VPA应用案例 updateMode: "Off"

在VPA中,updateMode 是一个重要的配置选项,它决定了VPA如何应用其提供的资源建议。根据不同的设置,VPA可以采取不同的策略来更新Pod的资源配置。

(1)创建应用实例

VPA不会应用任何资源推荐,只是收集和显示数据。

vim 03-nginx.yaml

添加:

apiVersion: apps/v1

kind: Deployment

metadata:

  labels:

    app: nginx

  name: nginx

  namespace: default

spec:

  replicas: 2

  selector:

    matchLabels:

      app: nginx

  template:

    metadata:

      labels:

        app: nginx

    spec:

      containers:

      - name: nginx

        image: nginx:1.20

        imagePullPolicy: IfNotPresent

        resources:

          requests:

            cpu: 100m

            memory: 50Mi

---

apiVersion: v1

kind: Service

metadata:

  name: nginx

  namespace: default

spec:

  type: NodePort

  ports:

  - port: 80

    targetPort: 80

  selector:

    app: nginx

kubectl apply -f 03-nginx.yaml

kubectl get pod

kubectl get svc

(2)创建VPA

使用updateMode: "Off"模式,这种模式仅获取资源推荐,不更新Pod

vim nginx-vpa.yaml

添加:

apiVersion: autoscaling.k8s.io/v1

kind: VerticalPodAutoscaler

metadata:

  name: nginx-vpa

  namespace: default

spec:

  targetRef:

    apiVersion: "apps/v1"

    kind: Deployment

    name: nginx

  updatePolicy:

    updateMode: "Off"

  resourcePolicy:

    containerPolicies:

    - containerName: "nginx"

      minAllowed:

        cpu: "250m"

        memory: "100Mi"

      maxAllowed:

        cpu: "2000m"

        memory: "2048Mi"

kubectl apply -f nginx-vpa.yaml

列出当前命名空间(默认是 default)中的所有 Vertical Pod Autoscaler (VPA) 资源

kubectl get vpa

字段说明:

NAME: VPA 资源的名称。

MODE: VPA 的模式,可以是 Auto、Off 或 Initial。

Auto: 自动调整 Pod 的资源请求。

Off: 不调整 Pod 的资源请求。

Initial: 仅在 Pod 创建时调整资源请求。

CPU: VPA 推荐的 CPU 资源请求。

MEM: VPA 推荐的内存资源请求。

PROVIDED: 是否已经应用了 VPA 的推荐值(True 或 False)。

AGE: VPA 资源的创建时间。

查看名为 nginx-vpa 的 Vertical Pod Autoscaler (VPA) 的详细信息

kubectl describe vpa nginx-vpa

(3)执行压力测试

安装测试工具

yum -y install httpd-tools

kubectl get svc

ab -c 1000 -n 1000000 http://192.168.10.11:30267/

复制终端

查看名为 nginx-vpa 的 Vertical Pod Autoscaler (VPA) 的详细信息

kubectl describe vpa nginx-vpa

查看当前命名空间中的 Vertical Pod Autoscaler (VPA) 资源的简要信息

kubectl get vpa

返回字段解析:

NAME:VPA 的名称为 nginx-vpa。

MODE:VPA 的更新模式为 Off,表示仅提供资源建议,不会自动更新 Pod 的资源。

CPU:VPA 建议的 CPU 资源为 1101 毫核(约 1.1 个 CPU 核心)。

MEM:VPA 建议的内存资源为 262144 KiB(256 MiB)。

PROVIDED:表示 VPA 已成功提供资源建议。

这些值表明,VPA 建议将 nginx 容器的资源调整到 1101m CPU 和 256Mi 内存,这是在你设置的资源限制范围内(minAllowed 和 maxAllowed)的最优值。

Update Policy(更新策略):

当前的更新模式为 Off,这意味着 VPA 不会自动调整 Pod 的资源。你需要手动更新 Deployment 的资源配置,或者将更新模式改为 Auto 来让 VPA 自动调整。

Conditions(状态条件):

RecommendationProvided:表明 VPA 已经成功生成了资源调整的建议。

查看Pod中容器的详细信息

kubectl describe pod nginx-7bfbcf6b6c-c5hgp

容器的资源并没有改变

四、VPA应用案例 updateMode: "Auto"

此模式当目前运行的pod的资源达不到VPA的推荐值,就会执行pod驱逐,重新部署新的足够资源的服务。

删除上面的vpa策略

kubectl delete -f 03-nginx.yaml -f nginx-vpa.yaml

(1)创建应用

vim 05-nginx.yaml

添加:

apiVersion: apps/v1

kind: Deployment

metadata:

  labels:

    app: nginx1

  name: nginx1

  namespace: default

spec:

  replicas: 2

  selector:

    matchLabels:

      app: nginx1

  template:

    metadata:

      labels:

        app: nginx1

    spec:

      containers:

      - name: nginx1

        image: nginx:1.20

        imagePullPolicy: IfNotPresent

        resources:

          requests:

            cpu: 100m

            memory: 50Mi

---

apiVersion: v1

kind: Service

metadata:

  name: nginx1

  namespace: default

spec:

  type: NodePort

  ports:

  - port: 80

    targetPort: 80

  selector:

    app: nginx1

kubectl apply -f 05-nginx.yaml

kubectl get pod

(2)创建VPA

vim nginx-vpa-auto.yaml

添加:

apiVersion: autoscaling.k8s.io/v1

kind: VerticalPodAutoscaler

metadata:

  name: nginx-vpa-auto

  namespace: default

spec:

  targetRef:

    apiVersion: "apps/v1"

    kind: Deployment

    name: nginx1

  updatePolicy:

    updateMode: "Auto"

  resourcePolicy:

    containerPolicies:

    - containerName: "nginx1"

      minAllowed:

        cpu: "250m"

        memory: "100Mi"

      maxAllowed:

        cpu: "2000m"

        memory: "2048Mi"

kubectl apply -f nginx-vpa-auto.yaml

查看当前命名空间中的 Vertical Pod Autoscaler (VPA) 资源的简要信息

kubectl get vpa

(3)执行压力测试

kubectl get svc

ab -c 1000 -n 1000000 http://192.168.10.11:30722/

复制终端

查看名为 nginx-vpa-auto 的 Vertical Pod Autoscaler (VPA) 的详细信息

kubectl describe vpa nginx-vpa-auto

查看当前命名空间中的 Vertical Pod Autoscaler (VPA) 资源的简要信息

kubectl get vpa

返回字段解析:

NAME:VPA 的名称为 nginx-vpa。

MODE: VPA 的更新模式为 Auto,表示 VPA 会自动调整 Pod 的资源请求和限制。

CPU:VPA 建议的 CPU 资源为 1101 毫核(约 1.1 个 CPU 核心)。

MEM:VPA 建议的内存资源为 262144 KiB(256 MiB)。

PROVIDED:表示 VPA 已成功提供资源建议。

查看Pod中容器的详细信息

kubectl describe pod nginx1-69f5d5cdcf-dspnh

容器的资源根据VPA的推荐值,将前面的Pod驱逐,以应用新的资源推荐

随着服务的负载的变化,VPA的推荐值也会不断变化。当目前运行的pod的资源达不到VPA的推荐值,就会执行pod驱逐,重新部署新的足够资源的服务。

http://www.xdnf.cn/news/404983.html

相关文章:

  • ESP32开发入门(九):HTTP服务器开发实践
  • Day22打卡-复习
  • 【K8S学习之探针】详细了解就绪探针 readinessProbe 和存活探针 livenessProbe 的配置
  • Kotlin 异步初始化值
  • JVM类加载
  • 生产环境怎么移除console
  • WebSocket集成方案对比
  • 中华春节符号全球推广委员会——“金文形意书《易经》成果展”研学之旅
  • 【Spark】使用Spark集群搭建Yarn模式
  • Docker-配置私有仓库(Harbor)
  • mapreduce-wordcount程序2
  • PostgreSQL 中的序列(Sequence)
  • 力扣HOT100之二叉树:226. 翻转二叉树
  • WSL-Ubuntu 中安装 Git LFS 记录
  • 网络编程epoll和udp
  • 华为防火墙配置与网络协议实战指南:从基础到高阶排查
  • 破局智算瓶颈:400G光模块如何重构AI时代的网络神经脉络
  • 大模型的实践应用41-天气预测与分析决策系统:Qwen3(32B)+langchain框架+MCP(大模型上下文协议)+RAG+传统算法
  • RabbitMQ高并发秒杀、抢购系统、预约系统底层实现逻辑
  • ArcGIS+InVEST+RUSLE:水土流失模拟与流域管理的高效解决方案;水土保持专题地图制作
  • 《Python星球日记》 第63天:文本方向综合项目(新闻分类)
  • 危化品安全员职业发展方向的优劣对比
  • 人工智能时代:解锁职业新身份,从“认证师”到“工程师”的进阶之路
  • 图灵爬虫练习平台第九题js逆向
  • 电力系统静态安全因素与动态安全因素的区别及具体分类
  • matlab计算天线的近场和远场
  • ThreadLocal原理分析--结合Spring事务
  • 产品设计基石--用户体验要素--实战4
  • 【课题推荐】基于改进遗传算法的公交车调度排班优化研究与实现方案
  • PID与模糊PID系统设计——基于模糊PID的水下航行器运动控制研究Simulink仿真(包含设计报告)