1. k8s启动
k8s 的启动流程是指 k8s 集群中各个组件的启动顺序和过程。k8s 集群由 master 节点和 node 节点组成,每个节点上都有一些必要的组件,如 kubelet、kube-proxy、docker 等。
1.1 k8s 的启动流程大致如下
首先
启动 master 节点上的 etcd 服务,它是 k8s 的分布式键值存储,用来保存集群的状态信息。
然后
启动 master 节点上的 kube-apiserver 服务,它是 k8s 的核心组件,提供了 RESTful API 接口,供其他组件和客户端访问。
接着
启动 master 节点上的 kube-controller-manager 服务,它负责管理各种控制器,如 deployment、replicaset、service 等,维护集群的期望状态。
紧接着
启动 master 节点上的 kube-scheduler 服务,它负责根据资源情况和调度策略,为新创建的 pod 分配合适的 node 节点。
然后
启动 node 节点上的 docker 服务,它是 k8s 的容器运行时,用来创建和运行容器。
接着
启动 node 节点上的 kubelet 服务,它负责与 kube-apiserver 通信,接收 pod 的配置信息,并管理 pod 的生命周期。
最后
启动 node 节点上的 kube-proxy 服务,它负责为 service 提供网络代理和负载均衡功能。
2. pod创建流程
在 Kubernetes 中创建 Pod 并将其挂载到特定的 Namespace 下,涉及到以下流程:
2.1 创建 Namespace
首先,您需要创建一个 Namespace。您可以使用
kubectl create namespace 命令创建一个新的 Namespace。
2.2 编写 Pod 配置文件
接下来,您需要编写一个 Pod 的配置文件,指定 Pod 的名称、容器镜像、挂载的卷以及其他配置项。在配置文件中,您需要指定该 Pod 所属的 Namespace。
2.3 创建 Pod
使用
kubectl apply -f 命令,将 Pod 的配置文件应用到 Kubernetes 集群中。Kubernetes 将根据配置文件创建一个新的 Pod,并将其挂载到指定的 Namespace 下。
2.4 调度 Pod
Kubernetes 将根据集群中可用的节点资源,将 Pod 调度到合适的节点上运行。如果没有足够的资源可用,Pod 可能会处于 Pending 状态,直到有足够的资源可用为止。
2.5 拉取容器镜像
在 Pod 被调度到节点上后,Kubernetes 将开始拉取 Pod 中指定的容器镜像。如果镜像不存在或拉取失败,Pod 将进入 ErrImagePull 状态。
启动容器: 一旦容器镜像被成功拉取,Kubernetes 将启动 Pod 中的容器,并执行其中定义的命令或服务。
2.6 挂载卷
如果 Pod 配置中定义了挂载的卷,Kubernetes 将在容器启动前挂载这些卷到容器中。如果挂载卷失败,Pod 可能会进入 CrashLoopBackoff 状态,需要进行重启。
2.7 监控和管理
Kubernetes 会持续监控 Pod 的运行状态,并在必要时进行重启或重新调度。如果 Pod 出现故障或异常,Kubernetes 将尝试自动修复,如果修复失败,可能需要手动干预。
以上是创建 Pod 并将其挂载到特定 Namespace 下的流程,其中可能发生的容易失败的动作包括容器镜像拉取失败、挂载卷失败等;如果这些动作失败,Pod 可能会进入 Pending、ErrImagePull 或 CrashLoopBackoff 状态,需要进行重启或重新调度。为了保证稳定运行,建议实施适当的监控和自动恢复机制,以及定期进行系统维护和优化。
3. 创建pod的动作问题
相关关节的必要动作、容易失败的动作,需要重启的动作
3.1 必要动作
用户必须提供合法的 Pod 定义
Kubernetes API Server 必须验证 Pod 创建请求是否合法
Kubernetes Scheduler 必须将 Pod 调度到合适的节点
Kubernetes Kubelet 必须创建 Pod 容器
3.2 容易失败的动作
Pod 定义不合法
Pod 所需资源不可用
Pod 容器启动失败
3.3 需要重启的动作
Kubernetes API Server 发生故障
Kubernetes Scheduler 发生故障
Kubernetes Kubelet 发生故障
Pod 容器异常退出
3.4 故障排除
如果 Pod 创建失败,您可以使用以下步骤来进行故障排除:
检查 Pod 创建请求是否合法
检查 Pod 所需资源是否可用
检查 Pod 容器启动日志
查看 Kubernetes 事件日志
3.5 最佳实践
使用 YAML 文件来定义 Pod,以便于检查和管理
使用 Pod 的资源限制来避免资源争用
使用 Pod 的健康检查来确保 Pod 正常运行
使用 Kubernetes 日志和监控工具来跟踪 Pod 的运行状况
4. pause容器
4.1 容器 pause 具体做了什么动作
容器 pause 是指暂停容器的所有进程,包括用户进程和系统进程。具体来说,容器 pause 会执行以下操作:
向所有容器进程发送 SIGSTOP 信号,该信号会暂停进程的执行。
将容器的 CPU 时间片设置为 0,这意味着容器将不会再获得 CPU 时间。
将容器的内存映射设置为只读,这意味着容器无法再修改内存。
4.2 容器 pause 的作用
容器 pause 主要用于以下两种场景:
4.2.1 调试容器
当容器出现问题时,可以使用容器 pause 来暂停容器的所有进程,以便检查容器的状态。
4.2.2 限制容器资源
可以使用容器 pause 来限制容器的 CPU 使用率和内存使用量。
4.3 容器 pause 是否是必备环节
容器 pause 不是必备环节。只有在需要调试容器或限制容器资源时,才需要使用容器 pause。
4.4 容器 pause 的注意事项
容器 pause 会暂停容器的所有进程,包括用户进程和系统进程。因此,在使用容器 pause 之前,需要确保容器的所有进程都处于可暂停的状态。
容器 pause 会将容器的 CPU 时间片设置为 0,这意味着容器将不会再获得 CPU 时间。因此,在使用容器 pause 之后,需要尽快恢复容器的运行,以免影响容器内应用程序的正常运行。
容器 pause 是一个非常有用的工具,可以用于调试容器和限制容器资源。但是,在使用容器 pause 之前,需要了解其工作原理和注意事项,以免造成意外问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话