前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

HPA

作者头像
星哥玩云
发布2022-09-15 21:50:41
3300
发布2022-09-15 21:50:41
举报
文章被收录于专栏:开源部署开源部署

Horizontal Pod Autoscaling 可以根据 CPU 利用率自动伸缩一个 ReplicaSet、Deployment 或者中的 Pod 数量

代码语言:javascript
复制
cat hpa-deploy.yaml 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hpa-web
spec:
  selector:
    matchLabels:
      app: hpa-web
  replicas: 1
  template:
    metadata:
      labels:
        app: hpa-web
    spec:
      containers:
        - name: hpa-web
          image: gcr.io/google_containers/hpa-example
          imagePullPolicy: IfNotPresent
          ports:
          - containerPort: 80
          resources:
            limits:
              cpu: 200m
              memory: 200Mi
            requests:
              cpu: 100m
              memory: 100Mi
---
apiVersion: v1
kind: Service
metadata:
  name: hpa-web
spec:
  type: ClusterIP
  selector:
    app: hpa-web
  ports:
  - name: http
    port: 80
    targetPort: 80
179.png
179.png
180.png
180.png

创建 HPA 控制器 - 相关算法的详情请参阅这篇文档:http://git.k8s.io/community/contributors/design-proposals/horizontal-pod-autoscaler.md#autoscaling-algorithm

代码语言:javascript
复制
kubectl autoscale deployment hpa-web --cpu-percent=50 --min=1 --max=10
181.png
181.png

增加负载,查看负载节点数目

代码语言:javascript
复制
两种方式:

1.命令行创建:

创建测试POD:
kubectl run -i --tty zutuanxue --image=busybox --image-pull-policy='IfNotPresent' /bin/sh

执行命令:
while true; do wget -q -O- http://hpa-web.default.svc.cluster.local; done

2.副本控制器创建:

cat test.yaml 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ceshi
spec:
  selector:
    matchLabels:
      app: ceshi
  replicas: 1
  template:
    metadata:
      labels:
        app: ceshi
    spec:
      containers:
        - name: ceshi
          image: docker.io/busybox
          imagePullPolicy: IfNotPresent
          command: ['sh', '-c', 'while true; do wget -q -O- http://hpa-web.default.svc.cluster.local; done']
182.png
182.png
183.png
183.png
184.png
184.png

资源限制 - Pod

Kubernetes 对资源的限制实际上是通过 cgroup 来控制的,cgroup 是容器的一组用来控制内核如何运行进程的相关属性集合。针对内存、CPU 和各种设备都有对应的 cgroup

默认情况下,Pod 运行没有 CPU 和内存的限额。 这意味着系统中的任何 Pod 将能够像执行该 Pod 所在的节点一样,消耗足够多的 CPU 和内存 。一般会针对某些应用的 pod 资源进行资源限制,这个资源限制是通过resources 的 requests 和 limits 来实现

代码语言:javascript
复制
spec:
    containers:
    - image: xxxx
      imagePullPolicy: Always
      name: auth
      ports:
      - containerPort: 8080
        protocol: TCP
      resources:
        limits:
          cpu: "4"
          memory: 2Gi
        requests:
          cpu: 250m
          memory: 250Mi

requests 要分配的资源,limits 为最高请求的资源值。可以简单理解为初始值和最大值

资源限制 - 名称空间

​ 1、计算资源配额

代码语言:javascript
复制
apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-resources
  namespace: zutuanxue
spec:
  hard:
    pods: "20"
    requests.cpu: "20"
    requests.memory: 100Gi
    limits.cpu: "40"
    limits.memory: 200Gi

2、配置对象数量配额限制

代码语言:javascript
复制
apiVersion: v1
kind: ResourceQuota
metadata:
  name: object-counts
  namespace: zutuanxue
spec:
  hard:
    configmaps: "10"
    persistentvolumeclaims: "4"
    ReplicaSet: "20"
    secrets: "10"
    services: "10"

3、配置 CPU 和 内存 LimitRange

代码语言:javascript
复制
apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
spec:
  limits:
  - default:
      memory: 50Gi
      cpu: 5
    defaultRequest:
      memory: 1Gi
      cpu: 1
    type: Container

default 即 limit 的值

​defaultRequest 即 request 的值

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档