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

Kubernetes(三) Pod 详解与 YAML 配置实战指南

Kubernetes Pod 详解与 YAML 配置实战指南

一、Pod 基础概念详解

1.1 Pod 的核心概念

Pod 是 Kubernetes 中的最小部署单元,代表集群中的一个运行进程。一个 Pod 可以包含一个或多个紧密耦合的容器,这些容器共享网络和存储资源。

1.2 Pod 的两种使用方式

单容器 Pod(最常见)
apiVersion: v1
kind: Pod
metadata:name: single-container-pod
spec:containers:- name: nginximage: nginx:1.14
多容器 Pod
apiVersion: v1
kind: Pod
metadata:name: multi-container-pod
spec:containers:- name: appimage: my-app:latest- name: sidecarimage: log-collector:latest

1.3 Pause 容器(基础容器)

在每个 Pod 中,都有一个特殊的 ​​Pause 容器​​,负责提供 Pod 的 Linux 命名空间基础:

  • 维护整个 Pod 的网络和存储空间

  • 其他容器共享其网络和存储资源

  • 对用户透明,自动运行

1.4 Pod 中的共享资源

网络共享
  • 每个 Pod 分配唯一 IP 地址

  • Pod 内所有容器共享该 IP 和端口

  • 容器间通过 localhost直接通信

  • 与外界通信需使用宿主机端口映射

存储共享
  • Pod 可指定多个共享 Volume

  • 所有容器都可访问共享存储

  • 确保容器重启后数据不丢失

二、Pod 容器的分类

2.1 基础容器(Infrastructure Container)

# 查看 kubelet 配置中的基础容器镜像
cat /opt/kubernetes/cfg/kubelet | grep pause

2.2 初始化容器(Init Containers)

特性
  • 必须在应用容器启动前运行完成

  • 按顺序执行,前一个成功后才运行下一个

  • 提供阻塞或延迟应用容器启动的机制

使用场景
apiVersion: v1
kind: Pod
metadata:name: myapp-pod
spec:containers:- name: myapp-containerimage: busybox:1.28command: ['sh', '-c', 'echo The app is running! && sleep 3600']initContainers:- name: init-myserviceimage: busybox:1.28command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']- name: init-mydbimage: busybox:1.28command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']

2.3 应用容器(Main Container)

  • 并行启动

  • 运行业务逻辑的主要容器

三、Pod 的核心配置

3.1 镜像拉取策略(imagePullPolicy)

策略

说明

使用场景

IfNotPresent

本地有则用本地,否则拉取

默认策略,生产环境推荐

Always

每次都拉取新镜像

开发环境,需要最新版本

Never

只用本地镜像

离线环境

spec:containers:- name: nginximage: nginx:1.15imagePullPolicy: IfNotPresent

3.2 重启策略(restartPolicy)

策略

说明

适用控制器

Always

总是重启

Deployment、StatefulSet

OnFailure

失败时重启

Job、CronJob

Never

从不重启

自主式Pod

spec:restartPolicy: Always

四、Pod 资源限制

4.1 资源请求与限制

resources:requests:memory: "64Mi"cpu: "250m"limits:memory: "128Mi"cpu: "500m"

4.2 资源单位详解

CPU 资源单位
  • 1 CPU= 1000m

  • 500m= 0.5个CPU

  • 100m= 0.1个CPU

内存资源单位
  • 1 Gi = 1024 Mi

  • 1 Mi = 1024 Ki

  • 1 G = 1000 M

  • 1 M = 1000 K

4.3 实战案例

apiVersion: v1
kind: Pod
metadata:name: frontend
spec:containers:- name: webimage: nginxresources:requests:memory: "64Mi"cpu: "250m"limits:memory: "128Mi"cpu: "500m"- name: dbimage: mysqlresources:requests:memory: "512Mi"cpu: "0.5"limits:memory: "1Gi"cpu: "1"

五、健康检查(探针)

5.1 三种探针类型

探针类型

作用

失败后果

livenessProbe

检查容器是否运行

重启容器

readinessProbe

检查是否就绪接收请求

从Service endpoints中剔除

startupProbe

检查应用是否启动

在成功前其他探针无效

5.2 三种检查方法

exec 方式
livenessProbe:exec:command:- cat- /tmp/healthyinitialDelaySeconds: 5periodSeconds: 5
httpGet 方式
livenessProbe:httpGet:path: /healthzport: 8080httpHeaders:- name: Custom-Headervalue: AwesomeinitialDelaySeconds: 3periodSeconds: 3
tcpSocket 方式
livenessProbe:tcpSocket:port: 8080initialDelaySeconds: 15periodSeconds: 20

5.3 就绪检测实战

apiVersion: v1
kind: Pod
metadata:name: readiness-httpget
spec:containers:- name: readiness-httpget-containerimage: nginxports:- name: httpcontainerPort: 80readinessProbe:httpGet:port: 80path: /index1.htmlinitialDelaySeconds: 1periodSeconds: 3livenessProbe:httpGet:port: httppath: /index.htmlinitialDelaySeconds: 1periodSeconds: 3timeoutSeconds: 10

六、YAML 配置详解

6.1 YAML 语法规范

  • 使用空格缩进,禁止使用Tab

  • 缩进空格数不重要,但要同级对齐

  • ---表示YAML文件开始

  • #表示注释

6.2 快速生成YAML模板

# 生成Pod模板
kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml# 生成Deployment模板
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml# 导出现有资源配置
kubectl get svc nginx-service -o yaml

6.3 完整Deployment配置示例

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentlabels:app: nginx
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.15.4ports:- containerPort: 80resources:requests:memory: "64Mi"cpu: "250m"limits:memory: "128Mi"cpu: "500m"livenessProbe:httpGet:path: /index.htmlport: 80initialDelaySeconds: 5periodSeconds: 5

6.4 Service配置示例

apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:type: NodePortports:- port: 80targetPort: 80nodePort: 30080selector:app: nginx

七、端口类型详解

7.1 四种端口对比

端口类型

作用

示例

containerPort

容器内部暴露的端口

80

targetPort

Pod的端口,Service转发目标

80

port

Service的端口,集群内部访问

80

nodePort

节点端口,外部访问入口

30080-32767

7.2 端口映射关系

外部用户 → nodeIP:nodePort → Service:port → Pod:targetPort → Container:containerPort

八、实战技巧总结

8.1 常用命令速查

# 查看API版本
kubectl api-versions# 查看资源字段说明
kubectl explain pods.spec.containers# 动态查看Pod状态
kubectl get pods -w# 查看Pod详细事件
kubectl describe pod <pod-name># 进入Pod容器
kubectl exec -it <pod-name> -- bash

8.2 故障排查命令

# 查看Pod日志
kubectl logs <pod-name># 查看特定容器日志
kubectl logs <pod-name> -c <container-name># 查看节点资源分配
kubectl describe nodes <node-name># 查看Endpoints
kubectl get endpoints

8.3 最佳实践建议

  1. ​资源设置​​:始终设置requests和limits,避免资源竞争

  2. ​健康检查​​:配置完整的探针,确保应用稳定性

  3. ​镜像策略​​:生产环境使用IfNotPresent,开发环境可用Always

  4. ​版本控制​​:使用稳定的API版本,避免使用beta版本

  5. ​标签管理​​:使用有意义的标签,便于服务发现和管理

通过本文的详细讲解和实战案例,您应该能够深入理解Kubernetes Pod的各个方面,并能够熟练编写和管理YAML配置文件。记得在实际工作中多练习、多实践,逐步掌握Kubernetes的强大功能。

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

相关文章:

  • 做网上购物网站网络培训seo
  • 电梯门禁系统及机器人乘梯功能的安装调试需要电梯公司技术人员全程配合,这主要由电梯设备的特殊性、安全规范要求及系统集成的复杂性决定。以下是具体原因及配合内容:
  • Windows安全基线、账户密码安全、账户锁定策略、审核策略
  • 介绍一下 辜朝明 的大衰退 理论
  • STM32G474单片机开发入门(二十)单片机IAP(在应用编程)详解及Ymodem实战
  • Flink中自定义序列化器
  • Linux 线程控制与同步互斥
  • 餐饮网站开发性能需求分析电商办属于哪个单位
  • 【Devops-Jenkins自动将Java Maven工程编译成jar、并打成Docker镜像,并上传Harbor】
  • 本地window10同步ubuntu上conda指定环境,并在C#项目中通过Python.NET调用自定义python接口
  • 蕲春网站建设一个网站怎么优化
  • 实战:Python爬虫如何模拟登录与维持会话状态
  • 【完整源码+数据集+部署教程】【天线&化学】航拍图屋顶异常检测系统源码&数据集全套:改进yolo11-ContextGuided
  • Blender霓虹灯牌发光标志店招门牌生成器插件 Procedural Signs V2.0.0+预设包
  • LeetCode——二分(初阶)
  • 高端网站建设公司注意什么广告公司名字大全参考
  • 哈尔滨网站建设运营网站建设优化开发公司排名
  • Linux小课堂: 输入重定向与管道操作详解
  • AI+BI工具全景指南:重构企业数据决策效能
  • 全球云服务震荡:Amazon Web Services (AWS) 出现大规模故障 多项线上服务受冲击
  • 3.Rocky Linux 磁盘管理
  • led行业网站源码asp网站浏览器兼容
  • Linux基本指令(3)
  • TypeScript 快速入门与环境搭建
  • Python数据分析实战:基于PISA 2022金融素养数据集,解构“借衣服收2元”背后的青少年金钱观【数据集可下载】
  • 用TikZ绘制专业流程图:从入门到进阶(基于D3QN训练流程)
  • Java 反射机制实战:对象属性复制与私有方法调用全解析
  • 火星时代UE奶瓜粒子特效②
  • 网站制作流程图wordpress 维文版
  • MySQL与K8s:数据库运维新范式