Kubernetes(K8S) 入门进阶实战完整教程-05k8s的Pod详解-01基础
本章详细介绍pod资源的各种配置(yaml)和原理
Pod结构和定义
- Pod结构
每个Pod都可以包含一个或者多个容器,这些容器可以分为两类:
- 用户程序所在的容器,数量可多可少
- Pause容器,这是每个Pod都会有的一个根容器,它的作用有两个:
(1)可以以它作为依据,评估整个pod的健康状况
(2)可以在根容器上设置ip地址,其它容器都共享此ip(pod的ip),以实现pod内部的网络通信(这里是pod内部的通信,pod之间的通讯采用虚拟二层网络技术来实现,我们当前环境使用的是flannel)
- Pod的定义
下面是Pod的资源清单
apiVersion: v1 # 必选,版本号, 例如v1
kind: Pod # 必选,资源类型,例如Pod
metadata: # 必选,元数据
name: string # 必选,Pod名称
namespace: string # Pod所属的命名空间,默认为default
labels: # 自定义标签列表
name: string
spec: # 必选,Pod中容器的详细定义
containers: # 必选,Pod中容器列表
- name: string # 必选,容器名称
image: string # 必选,容器的镜像名称
imagePullPolicy: [ Always|Never|IfNotPresent ] # 获取镜像的策略
command: [string] # 容器的启动命令列表,如不指定,使用打包时使用的启动命令
args: [string] # 容器的启动命令参数列表
workingDir: string # 容器的工作目录
volumeMounts: # 挂载到容器内部的存储卷配置
- name: string # 引用pod定义的共享存储卷的名称,需用volumes[]部分定义的卷名
mountPath: string # 存储卷在容器内mount的绝对路径,应少于512字符
readOnly: boolean # 是否为只读模式
ports: # 需要暴露的端口号列表
- name: string # 端口的名称
containerPort: int # 容器需要监听的端口
hostPort: int # 容器所在主机需要监听的端口,默认与Container相同
protocol: string # 端口协议,支持TCP/UDP, 默认TCP
env: # 容器运行前需要设置的环境变量列表
- name: string # 环境变量的名称
value: string # 环境变量的值
resources: # 资源限制和请求的设置
limits: # 资源限制的设置
cpu: string # cpu的限制,单位为core数,将用于docker run --cpu-shares参数
memory: string # 内存限制,单位可以为Mib/Gib, 将用于docker run --memory参数
requests: # 资源请求的设置
cpu: string # cpu请求,容器启动的初始可用数量
memory: string # 内存请求,容器启动的初始可用数量
lifecycle: # 生命周期钩子
postStart: # 容器启动后立即执行此钩子,如果执行失败,会根据重启策略进行重启
preStop: # 容器终止前执行此钩子,无论结果如何,容器都会终止
livenessProbe: # 对Pod内各容器健康检查的设置,当探测无响应几次后将自动重启该容器
exec: # 对pod容器内检查方式设置为exec方式
command: [string] # exec方式需要指定的命令或脚本
httpGet: # 对Pod内容器健康检查方法设置为httpGet, 需要制定Path、Port
path: string
port: number
host: string
scheme: string
HttpHeaders:
- name: string
value: string
tcpSocket: # 对Pod内容器健康检查方式设置为tcpSocket方式
port: number
initialDelaySeconds: 0 #容器启动完成后首次探测的时间,单位为秒
timeoutSeconds: 0 #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒
periodSeconds: 0 #对容器监控检查的定期探测时间设置,单位秒,默认10秒一次
successThreshold: 0
failureThreshold: 0
securityContext:
privileged: false
restartPolicy: [always | never | onfailure] # pod的重启策略
nodeName: <string> # 设置nodeName表示将该pod调度到指定名称的node节点上
nodeSelector: object # 设置nodeSelector表示将该Pod调度到包含这个label的node节点上
imagePullSecrets: #Pull镜像时使用的secret名称,以key:secretkey格式指定
- name: string #
hostNetwork: false #是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
volumes: # 在该pod上定义共享存储卷列表
- name: string # 共享存储卷名称(volumes类型有很多种)
emptyDir: {} # 类型为emptyDir的存储卷,与Pod同生命周期的一个临时目录,为空值
hostPath: # 类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
path: string # Pod所在宿主机的目录,将被用于同期中mount的目录
secret: # 类型为secret的存储卷,挂载集群与定义的secret对象到容器内部
secretname: string
items:
- key: string
path: string
configMap: # 类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
name: string
items:
- key: string
path: string
- 可以通过命令查看每一种资源的可配置项
kubectl explain 资源类型 ,查看某种资源可配的一级属性
kubectl explain 资源类型.属性,查看属性的子属性
- kubernetes中基本所有资源的一级属性都是一样的,主要包含5部分
- apiVersion
版本,由Kubernetes内部定义,版本号必须可用kubectl api-versions查询到 - kind
类型,由kubernetes内部定义,版本号必须可用kubectl api-resources查询到 - metadata
分类:
kubernetes
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示