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

Pod的进阶

Pod 资源限制

在 Kubernetes 中,为了合理管理集群中的资源,容器的 CPU 和内存资源都可以设置请求值(requests)和限制值(limits)。这些设置确保了容器的资源分配和限制,避免资源争用和过度使用。

资源请求与限制(Request & Limit)

  • 请求(request):当容器启动时,Kubernetes 会根据容器的资源请求来决定容器应该调度到哪个节点上。这个值表示容器在运行时最少需要的资源。

  • 限制(limit):容器在运行时可以使用的最大资源量。如果容器超过了这个限制,Kubernetes 会采取措施来控制容器的资源使用,防止过度消耗。

官网示例:
https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/

//Pod 和 容器 的资源请求和限制:
spec.containers[].resources.requests.cpu        //定义创建容器时预分配的CPU资源
spec.containers[].resources.requests.memory        //定义创建容器时预分配的内存资源
spec.containers[].resources.limits.cpu            //定义 cpu 的资源上限 
spec.containers[].resources.limits.memory        //定义内存的资源上限

vim resource.ymalapiVersion: v1
kind: Pod
metadata:   # 也可以理解为标签name: frontend
spec:containers:- name: webimage: nginxenv:- name: WEB_ROOT_PASSWORDvalue: "password"resources:requests:memory: "64Mi"   # 最少 64Mi 内存cpu: "250m"      # 最少 0.25 CPUlimits:memory: "128Mi"  # 最大 128Mi 内存cpu: "500m"      # 最大 0.5 CPU- name: dbimage: mysqlenv:- name: MYSQL_ROOT_PASSWORDvalue: "abc123"resources:requests:memory: "512Mi"  # 最少 512Mi 内存cpu: "0.5"       # 最少 0.5 CPUlimits:memory: "1Gi"    # 最大 1Gi 内存cpu: "1"         # 最大 1 CPU# 启动
kubectl apply -f resource.yaml

查看节点

查看信息

# 详细信息
kubectl describe pod frontend# 查看pod资源分配情况
kubectl get pods -o wide# 查看节点资源
kubectl describe nodes node02

节点资源的信息(部分)

CPU 与内存资源分配的实际情况

总结

  • 资源请求与限制:

    • requests 是容器启动时最少需要的资源,调度器依据该值选择节点。

    • limits 是容器能够使用的最大资源值,超出该值的资源请求会被限制。

  • 自动匹配:

    • 如果未设置 requests,Kubernetes 会自动将其设置为与 limits 相同。

  • 资源的分配:

    • Pod 中多个容器的资源请求与限制会被加总,以便监控和调整节点的资源分配。

  • 资源单位:

    • CPU 使用 m(毫核)表示,例如:500m 表示 0.5 个 CPU。

    • 内存 使用标准的字节单位表示,通常推荐使用基于 2 的指数单位,如 Gi, Mi 等。

探针的三种规则

探针类型作用说明探测失败时行为默认状态特殊说明
livenessProbe判断容器是否正在运行(存活)kubelet 杀死容器 → 按 Pod 的 restartPolicy 决定是否重启Success随容器生命周期持续探测
readinessProbe判断容器是否准备好接受请求(就绪)将该 Pod IP 从对应 Service 的 Endpoints 中剔除Success在首次探测成功前,Pod 处于 NotReady;只有 Success 后才会变为 Ready
startupProbe判断容器内的应用是否已启动(针对启动慢或启动时间不确定的应用)
v1.17 引入
失败:kubelet 杀死容器 → 按 restartPolicy 重启;
成功前,其他探针均不生效
Success成功前,livenessProbe/readinessProbe 被禁用;成功后交由其他探针接管探测

Probe支持三种检查方法

探测方式工作原理成功条件典型使用场景示例
exec在容器内执行指定命令命令退出返回码为 0运行自定义脚本、检查本地文件/进程等
tcpSocket对容器 IP 的指定端口做 TCP 三次握手检测端口可建立 TCP 连接(打开)数据库、缓存等非 HTTP 服务的端口监听检测
httpGet对容器 IP 的指定端口和路径发起 HTTP GET 请求响应状态码 ≥200 且 <400Web 服务的健康检查接口

liveness-exec

vim exec.yaml
apiVersion: v1
kind: Pod
metadata:name: liveness-execnamespace: default
spec:containers:- name: liveness-exec-containerimage: busyboximagePullPolicy: IfNotPresentcommand: ["/bin/sh","-c","touch /tmp/live ; sleep 30; rm -rf /tmp/live; sleep 60"] # livenessProbe:exec:command: ["test","-e","/tmp/live"]initialDelaySeconds: 1periodSeconds: 3# 运行
kubectl create -f exec.yaml

描述节点信息

 kubectl describe pods liveness-exec

截取部分

实时监控

kubectl get pod -w

httpget

vim httpget.yaml 
apiVersion: v1
kind: Pod
metadata:name: liveness-httpgetnamespace: default
spec:containers:- name: liveness-httpget-containerimage: nginximagePullPolicy: IfNotPresentports:- name: httpcontainerPort: 80livenessProbe:httpGet:port: http     # 80端口path: /index.htmlinitialDelaySeconds: 1periodSeconds: 3timeoutSeconds: 10

验证是否创建成功

删除容器里面的html文件

kubectl exec -it liveness-httpget -- rm -rf /usr/share/nginx/html/index.html

判断容器被是或否被杀死,然后重启

kubectl describe pod liveness-httpget | grep -E 'Killing|Started|Liveness'

也可以通过节点查看

tcpsocket

vim tcpsocket.yamlapiVersion: v1
kind: Pod
metadata:name: probe-tcp
spec:containers:- name: nginximage: soscscs/myapp:v1livenessProbe:initialDelaySeconds: 5timeoutSeconds: 1tcpSocket:port: 8080periodSeconds: 10failureThreshold: 2kubectl create -f tcpsocket.yaml

kubectl get pods -w

这里因为没有监测到8080端口,所以它一直崩溃

准备就绪

vim readiness-httpget.yaml
apiVersion: v1
kind: Pod
metadata:name: readiness-httpgetnamespace: default
spec:containers:- name: readiness-httpget-containerimage: soscscs/myapp:v1imagePullPolicy: IfNotPresentports:- name: httpcontainerPort: 80readinessProbe:httpGet:port: 80path: /index1.htmlinitialDelaySeconds: 1periodSeconds: 3livenessProbe:httpGet:port: httppath: /index.htmlinitialDelaySeconds: 1periodSeconds: 3timeoutSeconds: 10kubectl create -f readiness-httpget.yamlkubectl exec -it readiness-httpget sh
cd /usr/share/nginx/html/
ls
50x.html    index.html
echo 123 > index1.html 
exitkubectl get pods 

此时节点的状态

删除index.html

kubectl exec -it readiness-httpget -- rm -rf /usr/share/nginx/html/index.htmlkubectl get pods -w

监测状态

就绪监测2

vim readiness-myapp.yamlapiVersion: v1
kind: Pod
metadata:name: myapp1labels:app: myapp
spec:containers:- name: myappimage: soscscs/myapp:v1ports:- name: httpcontainerPort: 80readinessProbe:httpGet:port: 80path: /index.htmlinitialDelaySeconds: 5periodSeconds: 5timeoutSeconds: 10 
---
apiVersion: v1
kind: Pod
metadata:name: myapp2labels:app: myapp
spec:containers:- name: myappimage: soscscs/myapp:v1ports:- name: httpcontainerPort: 80readinessProbe:httpGet:port: 80path: /index.htmlinitialDelaySeconds: 5periodSeconds: 5timeoutSeconds: 10 
---
apiVersion: v1
kind: Pod
metadata:name: myapp3labels:app: myapp
spec:containers:- name: myappimage: soscscs/myapp:v1ports:- name: httpcontainerPort: 80readinessProbe:httpGet:port: 80path: /index.htmlinitialDelaySeconds: 5periodSeconds: 5timeoutSeconds: 10 
---
apiVersion: v1
kind: Service
metadata:name: myapp
spec:selector:app: myapptype: ClusterIPports:- name: httpport: 80targetPort: 80kubectl create -f readiness-myapp.yaml

删除index.html

kubectl exec -it pod/myapp1 -- rm -rf /usr/share/nginx/html/index.html

pod的生命周期

http://www.dtcms.com/a/479488.html

相关文章:

  • 汽车4s店网站建设方案自己设计建房子的软件
  • 玉器哪家网站做的好中小企业信息网官网
  • Node.js zlib模块所有 API 详解 + 常用 API + 使用场景
  • wordpress怎么加入站长统计聊城网站建设策划建设公司
  • 优化网站的软件wordpress文章全部展示
  • 大型网站建设行情吉林长春建设工程信息网站
  • 在线网站做品牌网站怎么样
  • 从零开始认识大模型:它的过去、现在与未来以及核心原理
  • 中国风配色网站南京网站开发价格
  • 建设厅官方网站职称动漫制作专业什么电脑最适合
  • [笔记] 驱动开发:usbview编译过程
  • 泉州正规制作网站公司my8777网域名查询
  • hive join优化和数据倾斜处理
  • 计算机知识(二)
  • 网页设计与网站建设完全学习手册pdf网站建设开发价格
  • 哪些网站可以找到兼职做报表的wordpress 架站 电子书
  • [Qlib] `Strategy` | TopkDropout
  • 镇江网站建设制作公司wordpress主题二次开发
  • 小说网站建设方案网站开发域名注册功能
  • 函数封装的平衡艺术:以C++为例探讨适度封装
  • 泾川网站城镇建设规化图网站图标在哪里做修改
  • 住房和城乡建设部网站招聘冷链物流
  • dw里面怎么做网站轮播图建站的好公司
  • 县网站建设方案湖南城乡建设厅官方网站
  • 【AI学习笔记】用AI生成spring boot + redis
  • 如何用rp做网站seo推广系统
  • 易书网上书城网站建设方案江山网站制作
  • 【工业场景】用YOLOv8实现抽烟识别
  • 易语言怎么制作网站哪些网站做的海报比较高大上
  • TCP协议详解