k8s中的容器

本文围绕Kubernetes中的容器展开,介绍了容器的三种状态:运行中、等待中、已终止;阐述了容器的重启策略,默认值为Always;还讲解了pause容器,它为Pod提供网络隔离和共享存储卷;以及Init容器,用于在主应用程序容器启动前执行初始化任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

容器

容器的状态

  1. Running(运行中):容器正在运行并且正常工作。
  2. Waiting(等待中):容器正在等待某些条件满足,例如等待其他容器就绪、等待网络连接等。
  3. Terminated(已终止):容器已经完成工作并终止。这可能是正常的完成,也可能是出现错误导致终止。

容器的重启策略

Pod 的 spec 中包含一个 restartPolicy 字段,其可能取值包括 Always、OnFailure 和 Never。默认值是 Always。

restartPolicy 适用于 Pod 中的所有容器。restartPolicy 仅针对同一节点上 kubelet 的容器重启动作。当 Pod 中的容器退出时,kubelet 会按指数回退方式计算重启的延迟(10s、20s、40s、…),其最长延迟为 5 分钟。 一旦某容器执行了 10 分钟并且没有出现问题,kubelet 对该容器的重启回退计时器执行重置操作。

pause容器

启动一个pod最先会创建一个pause,pause容器会把所有需要的namespace都创建好,业务app会直接跟他共享

“pause” 容器是一个特殊的辅助容器,它在每个 Pod 内隐式地存在。“pause” 容器没有实际的应用程序逻辑,它的存在是为了管理 Pod 的网络命名空间和共享存储卷。

每个 Kubernetes Pod 都有一个共享的网络命名空间,其中包括网络接口和 IP 地址。为了实现这种网络隔离,Kubernetes 使用了 “pause” 容器。这个容器负责维护 Pod 的网络设置,并在其他容器之间共享网络命名空间,使它们可以相互通信。

此外,“pause” 容器还为 Pod 提供了共享存储卷。其他容器可以挂载这个共享存储卷,以在 Pod 内部共享文件。

以下是一些关于 “pause” 容器的重要信息:

  • 镜像: “pause” 容器使用一个特殊的轻量级镜像,通常是 “k8s.gcr.io/pause”。
  • 进程: “pause” 容器没有运行的实际进程,它的存在只是为了保持网络命名空间和存储卷的隔离。
  • 网络命名空间: 每个 Pod 的其他容器都会与 “pause” 容器共享同一个网络命名空间,使它们可以在同一网络中通信。
  • 存储卷: “pause” 容器为 Pod 提供了一个文件系统,使其他容器可以在其中创建文件,以实现在 Pod 内部的共享存储。
  • 资源消耗: “pause” 容器的资源消耗非常小,因为它没有实际运行的进程。

总的来说,“pause” 容器是 Kubernetes 中的一个关键概念,它为 Pod 提供了网络隔离和共享存储卷的功能。在大多数情况下,开发人员不需要直接操作 “pause” 容器,因为 Kubernetes 会在创建 Pod 时自动添加它。

init容器

Init 容器(Initialization Container)是在主应用程序容器启动之前运行的特殊类型的容器。它们用于执行初始化任务,为主应用程序容器提供必要的环境、配置或数据。Init 容器可以确保主应用程序容器在启动之前满足一些前置条件。

以下是一些关于 Init 容器的重要信息:

  1. 运行顺序: Init 容器首先会依次启动,直到它们全部完成或其中一个失败。然后,主应用程序容器才会启动。这有助于确保主应用程序容器在合适的环境下运行。
  2. 环境设置: Init 容器可以在主应用程序容器之前设置环境变量、配置文件或其他资源。这有助于准备主应用程序容器所需的运行环境。
  3. 数据准备: Init 容器可以从外部数据源(如持久卷、配置映射等)获取数据,并将其准备好供主应用程序容器使用。
  4. 依赖解决: 如果主应用程序容器需要等待某些外部服务或资源就绪,Init 容器可以负责等待这些资源准备就绪,然后才启动主应用程序容器。
  5. 单一进程: Init 容器通常只执行一个任务,以确保它们的运行时间较短,不会影响主应用程序容器的正常启动。
  6. 容器共享资源: Init 容器与主应用程序容器共享同一网络命名空间和存储卷,因此它们可以访问相同的资源。
在ubernetes中,可以使用kubectl命令行工具来进行容器替换或提取操作。kubectl命令行工具是K集群的管理工具,用于与集群进行交互并执行管理操作。你可以使用kubectl命令来替换或提取容器。 要替换一个正在运行容器,你可以使用以下命令: ``` kubectl replace --filename=<yaml文件> ``` 其中,<yaml文件> 是包含要替换容器配置的YAML文件路径。该命令将会停止当前运行容器并创建一个新的容器以替代它。 要提取一个容器的日志,你可以使用以下命令: ``` kubectl logs <pod名称> <容器名称> ``` 其中,<pod名称> 是包含目标容器的Pod的名称,<容器名称> 是目标容器的名称。该命令将会输出指定容器的日志信息。 请注意,以上命令需要在已经安装和配置了kubectl命令行工具的节点上执行,并且需要具有足够的权限来执行操作。此外,在执行这些命令之前,你还需要确保已经正确部署了Kubernetes集群,并在相关节点上安装了kubectl工具。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [二进制部署k8s1.18(上)](https://blog.youkuaiyun.com/zenglingmin8/article/details/117049972)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值