Kubernetes:(五)Pod进阶(资源限制、健康检查)

目录

一:资源限制

1.1概念

1.2Pod和容器的资源请求和限制

1.3CPU资源单位

1.4内存资源单位

1.5CPU和内存的Requests和Limits的特点

1.6示例

1.7释放内存(node节点,以node01为例)

1.7.1查看内存

二:健康检查(探针Probe) 

2.1探针的三种规则

2.2Probe支持的三种检查方法

2.3探测获得的三种结果

三:示例

3.1示例1 exec方式

3.2示例2 httpGet方式

3.3示例3 tcpSocket 方式 

3.4示例4 配置就绪探测 httpGet的方式

3.5就绪探测示例2

四:总结

4.1探针(3 种) 

4.2检查方式(3种)

4.3探针可选的参数

4.4重启策略

一:资源限制

1.1概念

  • 当定义 Pod 时可以选择性地为每个容器设定所需要的资源数量。最常见可设定资源是 CPU 和内存大小,以及其他类型的资源
  • 当为 Pod 中的容器指定了 request资源时,调度器就使用该信息来决定将 Pod 调度到哪个节点上。当还为容器指定了limit资源时,kubelet 就会确保运行的容器不会使用超出所设的 limit 资源量。kubelet 还会为容器预留所设的 request 资源量,供该容器使用
  • 如果 Pod 运行所在的节点具有足够的可用资源,容器可以使用超出所设置的 request 资源量。不过,容器不可以使用超出所设置的 limit 资源量
  • 如果给容器设置了内存的 limit 值,但未设置内存的 request 值,Kubernetes 会自动为其设置与内存 limit 相匹配的 request值。类似的,如果给容器设置了 CPU 的 limit 值但未设置CPU 的 request 值,则 Kubernetes 自动为其设置 CPU 的 request 值 并使之与CPU 的 limit 值匹配

官网示例:

https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/

1.2Pod和容器的资源请求和限制

定义创建容器时预分配的CPU资源
spec.containers[].resources.requests.cpu
定义创建容器时预分配的内存资源
spec.containers[].resources.requests.memory
定义创建容器时预分配的巨页资源
spec.containers[].resources.requests.hugepages-<size>
定义cpu的资源上限
spec.containers[].resources.limits.cpu
定义内存的资源上限
spec.containers[].resources.limits.memory
定义巨页的资源上限
spec.containers[].resources.limits.hugepages-<size>

1.3CPU资源单位

  • CPU 资源的 request 和 limit 以 cpu 为单位。Kubernetes 中的一个 cpu 相当于1个 vCPU(1个超线程)
  • Kubernetes 也支持带小数 CPU 的请求。spec.containers[].resources.requests.cpu 为0.5的容器能够获得一个 cpu 的一半 CPU资源(类似于Cgroup对CPU资源的时间分片)。表达式0.1等价于表达式 100m(毫秒),表示每1000毫秒内容器可以使用的CPU时间总量为0.1*1000 毫秒

1.4内存资源单位

  • 内存的 request 和 limit 以字节为单位。 可以以整数表示,或者以10为底数的指数的单位(E、P、T、G、M、K)来表示,或者以2为底数的指数的单位(Ei、Pi、Ti、Gi、Mi、Ki)来表示。如1KB=103=1000,1MB=106=1000000=1000KB,1GB=10^9=1000000000=1000MB 1KiB=2^10=1024, 1MiB=2^20=1048576=1024KiB
  • PS∶在买硬盘的时候,操作系统报的数量要比产品标出或商家号称的小一些,主要原因是标出的是以 MB、GB为单位的,1GB就是1,000,000,000Byte,而操作系统是以2进制为处理单位的,,因此检查硬盘容量时是以MiB、GiB为单位,1GB=2^30=1,073,741,824,相比较而言,1GiB要比1GB多出1,073,741,824-1,000,000,000=73,741,824Byte,所以检测实际结果要比标出的少—些

1.5CPU和内存的Requests和Limits的特点

  • Requests和Limits都是可选的。在Pod创建和更新时,如果未设置Requests和Limits,则使用系统提供的默认值,该默认值取决于集群配置。
  • 如果Requests没有配置,默认被设置等于Limits。
  • requests 是创建容器时需要预留的资源量。如果无法满足,则pod 无法调度。但是,这不是容器运行实际使用的资源,容器实际运行使用的资源可能比这个大,也可能比这个小。
  • Limit 是限制pod容器可以使用资源的上限。容器使用的资源无法高于这个限制任何情况下Limits都应该设置为大于或等于Requests。

1.6示例

[root@master ~]# vim demo1.yaml
apiVersion: v1
kind: Pod
metadata:
  name: frontend
spec:
  containers:
  - name: web
    image: nginx
    env:
    - name: WEB_ROOT_PASSWORD
      value: "password"
    resources:
      #此容器预分配资源:内存为 64Mi ; 每个cpu 分配250m
      requests:
        memory: "64Mi"
        cpu: "250m"
      #此容器限制使用资源(最大): 内存最大使用128Mi,每个cpu最大分配500m
      limits:
        memory: "128Mi"
        cpu: "500m"
  - name: db
    image: mysql
    env:
    - name: MYSQL_ROOT_PASSWORD
      value: "abc123"
    resources:
     #此容器的预分配资源:内存预分配为512Mi;cpu预分配为每个cpu的50%,即1000*50%=500m
      requests:
        memory: "512Mi"
        cpu: "0.5"
     #此容器的限制使用资源配额为:内存最大使用1Gi;cpu最大使用1000m   
      limits:
        memory: "1Gi"
        cpu: "1"
 
#pod有两个容器,web 和db。所以,总的请求资源和限制资源为 web 和db 请求,限制资源总和。
#其中,cpu 的资源请求和限制,是以单个cpu 资源进行计算的。如果有多个cpu,则最终的结果是数值*N
apiVersion: v1
kind: Pod
metadata:
  name: frontend
spec:
  containers:
  - name: web
    image: nginx
    env:
    - name: WEB_ROOT_PASSWORD
      value: "password"
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"
  - name: db
    image: mysql
    env:
    - name: MYSQL_ROOT_PASSWORD
      value: "abc123"
    resources:
      requests:
        memory: "512Mi"
        cpu: "0.5"  
      limits:
        memory: "1Gi"
        cpu: "1"

kubectl apply -f demo1.yaml 
#成功部署好后查看状态
kubectl get pods
kubectl describe pod frontend

#查看pod的详细信息,查看pod被调度到了哪个node节点
kubectl  get pod -o wide
#查看node01 节点的信息
kubec
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值