HPA和helm

HPA

pod的数量进行扩缩容

针对控制器创建的pod

deployment:

replica:

静态:edit

yaml:apply -f

HPA:基于cpu的利用率来实现pod数量的自动伸缩。

Horizontal pod autoscaling

yaml文件————主流——————>必须要有资源控制这个字段才能生效。

命令行 生成hpa的配置

比要条件:

前置比要条件:控制创建,而且必须能设置副本数

配置的必要条件:必须要声明pod的资源控制。

依赖环境:

metrices-server hpa使用的依赖环境。k8s使用集群资源的集中查询器。收集资源使用数据,给HPA,scheduller等等使用

echo 1 > /proc/sys/vm/drop_caches # 释放页面缓存 
echo 2 > /proc/sys/vm/drop_caches # 释放目录项和inode缓存 
echo 3 > /proc/sys/vm/drop_caches # 释放所有缓存

[root@master01 hpa]# vim hpa.yaml
​
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hpa-test1
  labels:
    hpa: test1
spec:
  replicas: 1
  selector:
    matchLabels:
      hpa: test1
  template:
    metadata:
      labels:
        hpa: test1
    spec:
      containers:
      - name: centos
        image: centos:7
        command: ["/bin/bash", "-c", "yum install -y epel-release --nogpgcheck && yum install -y stress --nogpgcheck && sleep 3600"]
        volumeMounts:
        - name: yum1
          mountPath: /etc/yum.repos.d/
        resources:
          limits:
            cpu: "1"
            memory: 512Mi
      volumes:
      - name: yum1
        hostPath:
          path: /etc/yum.repos.d
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-centos1
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: hpa-test1
#就是用来匹配需要监控器类型和名称
#资源占用率高,要扩容,扩容的数量
#资源占用率低,要缩容,最小的保持数量
#定义扩缩容的指标,阈值。
  minReplicas: 1
  maxReplicas: 6
  targetCPUUtilizationPercentage: 50
#占用50%的cpu
​
[root@master01 nginx1]# kubectl top node node01 
NAME     CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
node01   328m         16%    1938Mi          52%   
[root@master01 hpa]# kubectl get hpa
NAME          REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
hpa-centos2   StatefulSet/hpa-test1   0%/50%    1         6         2          2m13s
nginx1        Deployment/nginx1       1%/80%    1         6         1          64m

扩容和缩容的速度

扩容是一旦达到阈值,会立即扩容。

缩容的速度会相对较慢。

为了保证pod的正常工作,扩容必须要快。

缩容的时候为了保证pod的资源突然又变大了,可以继续维持pod的数量。在一定时间之内,pod占用的资源维持在了较低的比率,然后开始慢慢缩容。

对命名空间做资源限制:

[root@master01 hpa]# vim ns.yaml 
apiVersion: v1
kind: ResourceQuota
metadata:
  name: ns-xy102
  namespace: xy102
#对指定的命名空间进行资源限制
spec:
  hard:
    pods: "20"
#设置该命名空间可以创建pod的最大数量
    requests.cpu: "2"
#只能使用2个cpu
    requests.memory: 1Gi
#只能使用1个G的内存
    limits.cpu: "3"
    limits.memory: 2Gi
#limits是最多能使用多少
    configmaps: "10"
#创建configmap的数量限制
    persistentvolumeclaims: "4"
#创建pvc请求的限制
    secrets: "10"
#创建加密配置文件的限制
    services: "10"
#创建service的限制
​
[root@master01 hpa]# kubectl apply -f ns.yaml 
resourcequota/ns-xy102 created
[root@master01 hpa]# kubectl describe namespaces xy102 
Name:         xy102
Labels:       <none>
Annotations:  <none>
Status:       Active
​
Resource Quotas
 Name:                   ns-xy102
 Resource                Used  Hard
 --------                ---   ---
 configmaps              1     10
 limits.cpu              0     3
 limits.memory           0     2Gi
 persistentvolumeclaims  0     4
 pods                    0     20
 requests.cpu            0     2
 requests.memory         0     1Gi
 secrets                 1     10
 services                0     10
​
No LimitRange resource.

limitRange:

只要是创建在这个命令空间的pod。都会根据limitRange的配置来对所有的pod进行统一的资源限制

[root@master01 hpa]# vim limitRange.yaml
​
apiVersion: v1
  name: xy102-limit
apiVersion: v1
kind: LimitRange
metadata:
  name: xy102-limit
  namespace: xy102
#指定命名空间
spec:
  limits:
  - default:
#直接加default就相当于是上限
      memory: 1Gi
      cpu: "4"
    defaultRequest:
#这个就是软限制
      memory: 1Gi
      cpu: "4"
    type: Container
#指定类型,Container  pod  pvc
​
[root@master01 hpa]# kubectl describe namespaces xy102 
Name:         xy102
Labels:       <none>
Annotations:  <none>
Status:       Active
​
Resource Quotas
 Name:                   ns-xy102
 Resource                Used  Hard
 --------                ---   ---
 configmaps              1     10
 limits.cpu              0     3
 limits.memory           0     2Gi
 persistentvolumeclaims  0     4
 pods                    0     20
 requests.cpu            0     2
 requests.memory         0     1Gi
 secrets                 1     10
 services                0     10
​
Resource Limits
 Type       Resource  Min  Max  Default Request  Default Limit  Max Limit/Request Ratio
 ----       --------  ---  ---  ---------------  -------------  -----------------------
 Container  memory    -    -    1Gi              1Gi            -
 Container  cpu       -    -    4                4              -
​

helm:

nginx ingress

deployment

svc

ingress

heml提供了一个模板,可以一键化的部署微服务。

通过打包的方式,把所有需要的yaml文件集合一起,然后一键部署。

可以支持回滚。

heml

k8s的部署可以配置,可以集成,可以动态修改

三个概念:

Chart:部署安装k8s微服务的模板。类似于linux里面的rpm包。

Repository:仓库,仓库用来保存Chart

Release:当我们使用chart部署微服务时。每部署一次就会有一个Release。(理解为版本号)

[root@master01 opt]# rz -E
rz waiting to receive.
[root@master01 opt]# tar -xf helm-v3.10.0-linux-amd64.tar.gz
[root@master01 opt]# ls
linux-amd64
[root@master01 opt]# cd linux-amd64/
[root@master01 linux-amd64]# mv helm /usr/local/bin/
[root@master01 linux-amd64]# vim /etc/profile
source <(kubectl completion bash)
[root@master01 linux-amd64]# source /etc/profile
​
#安装仓库和模板
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo add incubator https://charts.helm.sh/incubator
###上面这几个在master命令行输入
#更新当前所有仓库的chart
​
[root@master01 linux-amd64]# helm show chart aliyun/nginx-lego 
###查看chart的详情
​
[root@master01 linux-amd64]# helm repo remove aliyun
​
[root@master01 linux-amd64]# helm  install redis1 stable/redis -n default       
###用helm创建redis的pod
[root@master01 linux-amd64]# helm uninstall redis1 
release "redis1" uninstalled
###删除helm创建的pod

使用helm的yaml模板
[root@master01 opt]# mkdir helm
[root@master01 opt]# cd helm/
[root@master01 helm]# helm create nginx1
Creating nginx1
[root@master01 helm]# yum -y install tree
[root@master01 helm]# tree nginx1/
nginx1/
├── charts                  #依赖环境,一般为空,也不需要
├── Chart.yaml              #包含chart的元信息,chart的版本,名称等等
├── templates               #包含了部署k8s的应用pod的模板文件
│   ├── deployment.yaml     #基于控制器
│   ├── _helpers.tpl        
│   ├── hpa.yaml            #做hpa的监控,自动伸缩
│   ├── ingress.yaml        #对外访问
│   ├── NOTES.txt
│   ├── serviceaccount.yaml #创建服务账号
│   ├── service.yaml        #创建service的清单
│   └── tests
│       └── test-connection.yaml
└── values.yaml             #我们的配置在values里面完成,集合在了这个配置里面,当配置完成之后,可以通过values配置把参数传给 template里面的模板文件,进行覆盖。
​
3 directories, 10 files
[root@master01 nginx1]# vim values.yaml 
replicaCount: 3  ##更改副本数
​
  tag: "1.22"
#tag:使用镜像的版本号,不改默认最新
​
ingress:
  enabled: true
​
​
  hosts:
    - host: www.xy102.com
      paths:
        - path: /
          pathType: Prefix
​
resources:
  limits:
    cpu: 100m
    memory: 128Mi
  # requests:
  #   cpu: 100m
  #   memory: 128Mi
​
autoscaling:
  enabled: true
  minReplicas: 1
  maxReplicas: 6
  targetCPUUtilizationPercentage: 80

[root@master01 helm]# helm package nginx1/
Successfully packaged chart and saved it to: /opt/helm/nginx1-0.1.0.tgz
[root@master01 helm]# ls
nginx1  nginx1-0.1.0.tgz
[root@master01 helm]# helm install nginx1 /opt/helm/nginx1-0.1.0.tgz 
#第一次部署,release就是版本号,版本号1

Prometheus 是一个开源的监控和警报工具包,它通过从配置好的目标收集指标数据,然后存储这些数据,并提供查询语言 PromQL 来进行实时分析。而 Kubernetes 的水平自动伸缩(HPA)是 Kubernetes 集群中的一种资源自动扩展机制,它可以根据 CPU 使用率或其他指定的指标自动调整部署的副本数量。 要使用 Prometheus 监控 KubernetesHPA,你需要做以下几步: 1. 部署 Prometheus:首先,你需要在 Kubernetes 集群中部署 Prometheus 服务器。这通常可以通过 Helm 图表、kubectl 命令或自动化部署工具来完成。 2. 配置 Prometheus 监控目标:通过创建 ServiceMonitor 或 PodMonitor(取决于使用的 Prometheus Operator 版本)来定义 Prometheus 应该如何从 HPA 目标收集指标数据。这包括设置选择器以匹配相关的 HPA 资源。 3. 定义 Prometheus 规则:配置 Prometheus 规则来抓取 HPA 相关的指标。HPA 暴露的指标包括当前的副本数、所需的副本数、最小副本数、最大副本数等。这些指标可以通过访问 Kubernetes API 获取,因此需要确保 Prometheus 有权限访问这些 API。 4. 使用 Prometheus 查询和展示:通过 Prometheus 的查询界面,可以查询 HPA 的相关指标。例如,可以使用以下查询语句来获取当前的副本数和所需副本数: ``` kubernetes_state:horizontalpodautoscalers replicas{kubernetes_name="hpa-example"} ``` 5. 集成 Grafana:虽然 Prometheus 本身提供了强大的查询功能,但结合 Grafana 可以更方便地创建图表和仪表盘,以可视化方式展示 HPA 的状态和性能指标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值