k8s之pod
2023-08-22 18:25:12 8 举报
AI智能生成
k8s之pod
作者其他创作
大纲/内容
Pod
最基本的部署单元
结构定义
apiVersion
版本
由k8s确定,可以用 kubectl api-versions 查询到
kind
类型
由k8s确定,可以用 kubectl api-resources 查询到
metadata
资源标识和说明
spec
资源配置
定义容器的详细信息
containers
应用容器
实现覆盖DockerFile中的ENTRYPOINT的功能
command
args
执行command并追加上args参数
command
args
执行输入的command
command
args
DockerFile中配置的ENTRYPOINT的命令会被执行,使用当前args的参数
command
args
使用DockerFile的配置
资源限制
resources
limits
限制运行时容器的最大占用资源,当容器占用资源超过,会被重启
requests
设置容器需要的最小资源,如果环境资源不够,容器将无法启动
生命周期钩子
lifecycle
postStart
容器创建之后执行,如果失败了会重启容器
preStop
容器终止之前执行,执行完成之后容器才会终止
定义容器的健康检查机制
livenessProbe(存活性探针)
用于检测应用实例当前是否处于正常运行状态,如果不是,k8s会重启容器
readiness probes(就绪性探针)
用于检测应用实例当前是否可以接受请求,如果不能,k8s不会转发流量
容器启动时如何拉取镜像
imagePullPolicy
Always
Kubernetes 将始终尝试拉取最新的镜像
IfNotPresent(默认值)
Kubernetes 只有在本地不存在该镜像时才会尝试拉取
Never
Kubernetes 永远不会尝试拉取镜像
initContainers
初始化容器
在启动应用容器之前运行并完成
用于完成一些预处理任务,例如加载配置、初始化数据库、进行数据迁移等。
只有在它们成功完成后,应用容器才会启动
sidecarContainers
边车容器
在不更改应用容器的基础上,增强其功能,与应用容器一起运行
是否使用宿主机网络模式
hostNetwork
默认false
文件挂载
volumes
定义容器在退出后的重启策略
restartPolicy
Always(默认值)
当容器终止后,Kubernetes 将始终自动重新启动该容器。
OnFailure
只有当容器以非零状态退出时,Kubernetes 才会自动重新启动该容器
Never
Kubernetes 不会自动重新启动容器,无论是容器主动退出还是非零状态终止
Pod调度
定向调度
nodeName
将pod调度到指定的Node节点上
nodeSelector
将Pod调度到包含这些Label的Node节点上
亲和性调度
nodeAffinity(node亲和性)
required...
必须满足指定的规则
preferred...
优先调度到满足指定的规则的Node
podAffinity(pod亲和性)
required...
preferred...
podAntiAffinity(pod反亲和性)
让新创建的Pod和标签命中的Pod不在同一个Node节点上
Node决定是否调度
Node污点
PreferNoSchedule
尽量避免把Pod调度到具有该污点的Node上,除非没有其他节点可以调度
NoSchedule
不会把Pod调度到具有该污点的Node上,但是不会影响当前Node上已经存在的Pod
NoExecute
不会把Pod调度到具有该污点的Node上,同时也会将Node上已经存在的Pod驱逐
Pod容忍
tolerations
允许一个Pod调度到一个有污点的Node上
status
状态信息,k8s生成的
容器组合
Pod 是一个或多个容器的集合
容器类型
Pause 容器
所有其它容器的父容器
创建并持有 Pod 的网络命名空间,这样所有其他容器都可以共享同一网络命名空间
当一个容器的父进程结束,而它的子进程还在运行时,可以有效地处理孤儿进程
用户程序所在的容器
生命周期
命令式创建可以直接控制,但一般不使用
一般由控制器管理,它负责Pod的创建、启动、监控和重启
Pending
Pod 已经在 K8s 系统中创建
容器尚未创建或者尚未在节点上运行
Pod 会进行调度并在适当的节点上分配资源
Running
Pod 已经被调度到节点
容器经历生命周期
ContainerCreating
正在创建该容器,通常包括镜像的拉取和启动容器的过程
Running
容器已经成功创建,并正在运行
Terminated
容器已经成功地停止运行
所有的容器已经创建,并至少有一个正在运行
Succeeded
所有的容器在 Pod 中已经成功地终止,并且不会再重新启动
Failed
Pod 中的所有容器已经终止,至少有一个容器因为失败而终止
Unknown
通常因为网络问题无法获取 Pod 的状态
Pod控制器
ReplicationController
ReplicaSet
ReplicationController的升级版本
需要时进行伸缩、更新和回滚操作
Deployment
通过控制ReplicaSet间接管理pod
比ReplicaSet的功能更强大
镜像更新
重建更新
滚动更新(默认)
版本升级
暂停/继续版本升级
回滚到上一级版本/指定版本回退
HPA
自动扩缩容
DaemonSet
集群中的每一台节点上都运行一个副本,一般适用于日志收集,节点监控等场
每当向集群中添加一个节点时,指定的pod副本也将添加到该节点上
当节点从集群中移除时,pod就被垃圾回收
Job
批量处理短暂的一次性任务
CronJob
以Job控制器资源为其管控对象,并借助它管理pod资源对象
在Job的基础上加上了时间调度,周期性运行Job
容器间通信
Pod 内的容器可以通过 localhost 直接通信,无需通过网络进行通信
共享存储
使用存储卷实现容器间的数据共享,而不需要通过网络进行传输
主机路径卷
Node节点故障,节点迁移就会有问题
持久化卷
PV
具有自己的生命周期,管理员手动创建
PVC
用户创建PVC资源清单,k8s负责根据PVC的声明绑定符合要求的PV
配置文件卷
存储配置信息
空白卷(EmptyDir)
用于需要在容器之间共享临时数据的场景
调度和弹性
Pod 可以由 Kubernetes 调度器在集群中的节点上进行部署
当需要扩展应用程序的容量时,可以通过创建多个 Pod 实例来实现弹性和负载均衡
健康检查和重启
Kubernetes 监控 Pod 内容器的健康状况
在容器失败或出现问题时进行重启, 可以确保 Pod 中的容器始终保持可用状态
0 条评论
下一页