【K8s】专题六(1):Kubernetes 稳定性之资源限制及服务质量等级

以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发!欢迎扫码关注个人公众号!

公众号二维码


目录

一、资源限制

1、基本介绍

2、工作原理

3、限制方法

二、服务质量等级


一、资源限制
1、基本介绍

Kubernetes 是一个完全以资源为中心的系统,资源限制是通过 Cgroups 等控制 Pod 使用节点资源(CPU、内存、存储)的一种机制,对于确保 Kubernetes 集群运行的稳定、高效至关重要。通过合理配置资源限制,可以避免资源争用和过载,同时提高应用程序的可靠性和性能。

资源限制的具体概念有:

  • Requests(请求):定义容器启动时所需的最小资源量。Kubernetes 会确保每个容器至少获得其请求的资源量,以避免因为资源不足而启动失败
  • Limits(限制):定义容器可以使用的最大资源量。当容器尝试使用超过其限制的资源时,它可能会被系统终止或受到限制,以防止影响集群中其他容器的性能
  • Quotas(配额):针对命名空间内所有资源进行总体限制,用于控制资源的消耗,防止某些用户或团队过度使用资源

2、工作原理
  • 资源定义:用户在 Pod 中定义资源请求和限制
  • 调度决策:Kubernetes 调度器在调度 Pod 时会考虑节点上的可用资源。如果节点上的资源不足以满足 Pod 的请求,调度器将不会将 Pod 调度到该节点
  • 资源分配:一旦 Pod 被调度到节点,Kubernetes 会根据资源请求为 Pod 分配资源。Pod 可以使用的资源不会超过其限制
  • 资源监控:Kubernetes 持续监控每个 Pod 的资源使用情况
  • 资源回收:当 Pod 使用的资源超过其限制时,Kubernetes 可以采取回收措施。如果是 CPU 使用超过限制,CPU 会被压缩导致应用程序运行变缓,如果是内存使用超过限制,容器会直接被 OOM Kill
  • 资源配额:通过设置资源配额,Kubernetes 可以限制命名空间内可以创建的资源数量和消耗的资源总量,从而避免资源的过度使用

3、限制方法
  • 配置 Container 限制
apiVersion: apps/v1
kind: Deployment
metadata:
  nanme: demo-deployment
spec:
...
    spec:
      containers:
...
        resources:
          limits:
            cpu: 1000m
            memory: 1Gi
            ephemeral-storage: 10Gi
          requests:
            cpu: 100m
            memory: 100Mi
            ephemeral-storage: 1Gi


🔔 说明1:如果没有设置 requests,则其值与 limits 的值相同
🔔 说明2:如果没有设置  limits, 则其值默认为 0,即没有限制

cpu:'1'=1c=1000m
memory:单位 k/Mi/Gi;无单位是字节,1000=1k
ephemeral-storage:单位 k/Mi/Gi,定义临时存储的需求和限制
  • 配置 namespace 限制(即资源配额)
# 定义资源配额对象
# resourcequota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
  name: quota-demo
spec:
  hard:
    requests.cpu: 1000m
    requests.memory: 1000Mi
    limits.cpu: 4000m
    limits.memory: 8000Mi
    requests.storage: "1Gi" 
    persistentvolumeclaims: "2"

# 创建对象
kubectl apply -f resourcequota.yaml

# 查看对象
kubectl get resourcequotas

NAME         AGE    REQUEST                                                                                                              LIMIT
quota-demo   4m5s   persistentvolumeclaims: 15/2, requests.cpu: 3050m/1, requests.memory: 12912Mi/1000Mi, requests.storage: 1316Gi/1Gi   limits.cpu: 63700m/4, limits.memory: 148200Mi/8000Mi
  • 配置默认限制
# 定义 LimitRange 对象
# limitrange.yaml
apiVersion: v1
kind: LimitRange
metadata:
  name: demo-limit-range
spec:
  limits:
  - type: Container
    default:
      cpu: 500m
      memory: 1000Mi
    defaultRequest:
      cpu: 100m
      memory: 200Mi

# 创建对象
kubectl apply -f limitrange.yaml

# 查看对象详情
kubectl describe limitranges

Name:       demo-limit-range
Namespace:  lanhuapp
Type        Resource  Min  Max  Default Request  Default Limit  Max Limit/Request Ratio
----        --------  ---  ---  ---------------  -------------  -----------------------
Container   cpu       -    -    100m             500m           -
Container   memory    -    -    200Mi            1000Mi         -


二、服务质量等级

服务质量等级(Qos,即 Quality Of Service)用于为不同 Pod 提供不同等级的资源供应保障。

服务质量等级分为以下三种:

  • Guaranteed:Limits 和 Requests 的值相同,等级最高
  • Burstable:Limits 和 Requests 的值不同
  • Best-Effort:Limits 和 Requests 的值没有设置 ,等级最低

需要长时间以稳定状态运行的 Pod,可以配置为 Guaranteed 级别,以确保节点资源不足时 Pod 保持稳定运行而不会被驱逐,而其它 pod 则可以配置为 Burstable 甚至 Best-Effort 级别

  • 55
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这是一个用于部署Prometheus监控系统的YAML文件,下面对其各部分进行解释: ``` apiVersion: monitoring.coreos.com/v1 kind: Prometheus metadata: labels: prometheus: k8s name: k8s namespace: monitoring spec: alerting: alertmanagers: - name: alertmanager-main namespace: monitoring port: web image: quay.io/prometheus/prometheus:v2.20.0 nodeSelector: kubernetes.io/os: linux podMonitorNamespaceSelector: {} podMonitorSelector: {} replicas: 2 resources: requests: memory: 400Mi ruleSelector: matchLabels: prometheus: k8s role: alert-rules securityContext: fsGroup: 2000 runAsNonRoot: true runAsUser: 1000 serviceAccountName: prometheus-k8s serviceMonitorNamespaceSelector: {} serviceMonitorSelector: {} version: v2.20.0 ``` - `apiVersion`: 定义该对象所使用的Kubernetes API版本,这里使用的是monitoring.coreos.com/v1。 - `kind`: 定义该对象的类型,这里是Prometheus类型。 - `metadata`: 定义该对象的元数据,包括名称、标签和命名空间等信息。 - `spec`: 定义该对象的具体配置信息,包括如何部署和配置Prometheus监控系统。 - `alerting`: 定义如何设置警报。这里设置了警报管理器,使用名称为`alertmanager-main`的警报管理器,并指定其所在的命名空间和Web端口。 - `image`: 定义Prometheus监控系统的镜像,这里使用了`quay.io/prometheus/prometheus:v2.20.0`。 - `nodeSelector`: 定义用于选择部署Prometheus监控系统的节点的标签。这里选择了标签为`kubernetes.io/os: linux`的节点。 - `podMonitorNamespaceSelector` 和 `podMonitorSelector`: 定义选择哪些Pod进行监控。这里未指定任何选择条件,表示将监控所有Pod。 - `replicas`: 定义Prometheus实例的副本数量,这里设置为2。 - `resources`: 定义Prometheus实例使用的资源请求量,这里设置了内存请求为400Mi。 - `ruleSelector`: 定义如何选择要应用的告警规则。这里选择了标签为`prometheus: k8s`和`role: alert-rules`的规则。 - `securityContext`: 定义Prometheus容器的安全上下文,包括运行容器的用户和组等。 - `serviceAccountName`: 指定Prometheus容器所使用的服务账户。 - `serviceMonitorNamespaceSelector` 和 `serviceMonitorSelector`: 定义选择哪些Service进行监控。这里未指定任何选择条件,表示将监控所有Service。 - `version`: 指定Prometheus的版本,这

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

行者Sun1989

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值