容器镜像设置

创建部署 (Deployment)、有状态副本集 (StatefulSet) 或者守护进程集 (DaemonSet) 时,您需要指定一个容器镜像。同时,KubeSphere 向用户提供多种选项,用于自定义工作负载配置,例如健康检查探针、环境变量和启动命令。本页内容详细说明了容器镜像中的不同属性。

提示

您可以在右上角启用编辑模式,查看仪表板上的属性对应到清单文件(YAML 格式)中的值。

容器镜像

容器组副本数量

点击 图标设置 Pod(即容器组)副本数量,该参数显示在清单文件中的 .spec.replicas 字段。该选项对守护进程集不可用。

Pod 副本

添加容器镜像

点击添加容器镜像后,您会看到如下图所示的界面。

添加容器镜像

镜像搜索栏

您可以点击右边的 ,从列表中选择一个镜像,或者输入镜像名称进行搜索。KubeSphere 提供 Docker Hub 的镜像以及您的私有镜像仓库的镜像。如果想使用私有镜像仓库,您需要先在配置中心下的密钥中创建镜像仓库密钥。

备注

在搜索栏输入镜像名称后,请记得按键盘上的回车键

镜像标签

您可以输入一个标签,例如 imagename:tag。如果您不指定标签,则会默认为最新版本。

容器名称

容器名称由 KubeSphere 自动创建,显示在 .spec.containers.name 中。

容器类型

如果您选择初始容器,则会为该工作负载创建初始容器。有关初始容器的更多信息,请访问 Init 容器

资源请求

容器预留的资源配额包括 CPU 和内存资源。这意味着容器独占这些资源,防止其他服务或进程因资源不足争夺资源而导致应用程序不可用。

  • CPU 预留显示在清单文件中的 .spec.containers[].resources.requests.cpu,实际用量可以超过 CPU 预留。
  • 内存预留显示在清单文件中的 .spec.containers[].resources.requests.memory。实际用量可以超过内存预留,但节点内存不足时可能会清理容器。

资源预留和限制

资源限制

您可以指定应用程序能使用的资源上限,包括 CPU 和内存,防止占用过多资源。

  • CPU 限制显示在清单文件中的 .spec.containers[].resources.limits.cpu。实际用量可以短时间超过 CPU 限制,容器不会被停止。
  • 内存限制显示在清单文件中的 .spec.containers[].resources.limits.memory。实际用量不能超过内存限制,如果超过了,容器可能会被停止或者被调度到其他资源充足的机器上。

备注

CPU 资源以 CPU 单位计量,即 KubeSphere 中的 Core。内存资源以字节计量,即 KubeSphere 中的 Mi

端口/服务设置

您需要为容器设置访问协议和端口信息。请点击使用默认端口以自动填充默认设置。

镜像拉取策略

该值显示在 imagePullPolicy 字段。在仪表板上,您可以从下拉列表的以下三个选项中选择一个。

镜像拉取策略

  • 优先使用本地镜像 (ifNotPresent):只有本地不存在镜像时才会拉取镜像。

  • 尝试重新下载镜像 (Always):只要启动 Pod 就会拉取镜像。

  • 仅使用本地镜像 (Never):无论镜像是否存在都不会拉取镜像。

提示

  • 默认值是 IfNotPresent,但标记为 :latest 的镜像的默认值是 Always
  • Docker 会在拉取镜像时进行检查,如果 MD5 值没有变,则不会拉取镜像。
  • 在生产环境中应尽量避免使用 :latest,在开发环境中使用 :latest 会自动拉取最新的镜像。

健康检查器

支持存活就绪启动检查。

容器健康检查

  • 容器存活检查:使用存活探针检测容器是否在运行,该参数显示在 livenessProbe 字段。

  • 容器就绪检查:使用就绪探针检测容器是否准备好处理请求,该参数显示在 readinessProbe 字段。

  • 容器启动检查:使用启动探针检测容器应用程序是否已经启动,该参数显示在 startupProbe 字段。

存活、就绪和启动检查都包含以下配置:

  • HTTPGetAction(HTTP 请求检查):在容器 IP 地址的指定端口和路径上执行 HTTP Get 请求,如果响应状态码大于等于 200 且小于 400,则认为诊断成功。支持的参数包括:

    HTTP 请求检查

    • 方案:HTTP 或 HTTPS,由 scheme 指定。
    • 路径:访问 HTTP 服务器的路径,由 path 指定。
    • 端口:访问端口或端口名由容器暴露。端口号必须在 1 和 65535 之间。该值由 port 指定。
    • 初始延迟:容器启动后,存活探针启动之前等待的秒数,由 initialDelaySeconds 指定。默认为 0。
    • 执行探测频率:探测频率(以秒为单位),由 periodSeconds 指定。默认为 10,最小值为 1。
    • 超时时间:探针超时的秒数,由 timeoutSeconds 指定。默认为 1,最小值为 1。
    • 健康阈值:探测失败后,视为探测成功的最小连续成功次数,由 successThreshold 指定。默认为 1,存活探针和启动探针的该值必须为 1。最小值为 1。
    • 不健康阈值:探测成功后,视为探测失败的最小连续失败次数,由 failureThreshold 指定。默认为 3,最小值为 1。
  • TCPSocketAction(TCP 端口检查):在容器 IP 地址的指定端口上执行 TCP 检查。如果该端口打开,则认为诊断成功。支持的参数包括:

    TCP 端口检查

    • 端口:访问端口或端口名由容器暴露。端口号必须在 1 和 65535 之间。该值由 port 指定。
    • 初始延迟:容器启动后,存活探针启动之前等待的秒数,由 initialDelaySeconds 指定。默认为 0。
    • 执行探测频率:探测频率(以秒为单位),由 periodSeconds 指定。默认为 10,最小值为 1。
    • 超时时间:探针超时的秒数,由 timeoutSeconds 指定。默认为 1,最小值为 1。
    • 健康阈值:探测失败后,视为探测成功的最小连续成功次数,由 successThreshold 指定。默认为 1,存活探针和启动探针的该值必须为 1。最小值为 1。
    • 不健康阈值:探测成功后,视为探测失败的最小连续失败次数,由 failureThreshold 指定。默认为 3,最小值为 1。
  • ExecAction(执行命令检查):在容器中执行指定命令。如果命令退出时返回代码为 0,则认为诊断成功。支持的参数包括:

    执行命令检查

    • 命令:用于检测容器健康状态的检测命令,由 exec.command 指定。
    • 初始延迟:容器启动后,存活探针启动之前等待的秒数,由 initialDelaySeconds 指定。默认为 0。
    • 执行探测频率:探测频率(以秒为单位),由 periodSeconds 指定。默认为 10,最小值为 1。
    • 超时时间:探针超时的秒数,由 timeoutSeconds 指定。默认为 1,最小值为 1。
    • 健康阈值:探测失败后,视为探测成功的最小连续成功次数,由 successThreshold 指定。默认为 1,存活探针和启动探针的该值必须为 1。最小值为 1。
    • 不健康阈值:探测成功后,视为探测失败的最小连续失败次数,由 failureThreshold 指定。默认为 3,最小值为 1。

有关健康检查的更多信息,请访问容器探针

启动命令

默认情况下,容器会运行默认镜像命令。

启动命令

  • 运行命令对应清单文件中容器的 command 字段。
  • 参数对应清单文件中容器的 args 字段。

有关该命令的更多信息,请访问为容器设置启动时要执行的命令和参数

环境变量

以键值对形式为 Pod 配置环境变量。

环境变量

  • 名称:环境变量的名称,由 env.name 指定。
  • 值:变量引用的值,由 env.value 指定。
  • 类型:环境变量的类型,支持自定义、配置项、键以及变量或变量引用。

有关该命令的更多信息,请访问 Pod 变量

容器组 Security Context

Security Context 定义 Pod 或容器的特权和访问控制设置。有关 Security Context 的更多信息,请访问 Pod 安全策略

Security Context

同步主机时区

同步后,容器的时区将和主机的时区一致。

更新策略

Pod 更新

不同工作负载使用不同的更新策略。

.spec.strategy 字段指定用于用新 Pod 替换旧 Pod 的策略。.spec.strategy.type 可以是 RecreateRollingUpdate。默认值是 RollingUpdate

  • 滚动更新(推荐)

    滚动更新将逐步用新版本的实例替换旧版本的实例。升级过程中,流量会同时负载均衡分布到新老版本的实例上,因此服务不会中断。

  • 替换升级

    替换升级会先删除现有的 Pod,再创建新的 Pod。请注意,升级过程中服务会中断。

有关升级策略的更多信息,请访问部署的策略部分

更新策略下的下拉菜单显示在清单文件中有状态副本集的 .spec.updateStrategy 字段。您可以处理 Pod 容器、标签、资源预留或限制以及注解的更新。有两种策略:

  • 滚动更新(推荐)

    如果 .spec.template 已更新,有状态副本集中的 Pod 将被自动删除,并创建新的 Pod 来替换。Pod 将按照反向顺序更新,依次删除和创建。前一个 Pod 更新完成并开始运行后,才会开始更新下一个新的 Pod。

  • 删除容器组时更新

    如果 .spec.template 已更新,有状态副本集中的 Pod 将不会自动更新。您需要手动删除旧的 Pod,控制器才会创建新的 Pod。

有关更新策略的更多信息,请访问有状态副本集更新策略

更新策略下的下拉菜单显示在清单文件中守护进程集的 .spec.updateStrategy 字段。您可以处理 Pod 容器、标签、资源预留或限制以及注解的更新。有两种策略:

  • 滚动更新(推荐)

    如果 .spec.template 已更新,旧的守护进程集 Pod 将被终止,并以受控方式自动创建新的 Pod。整个更新过程中,每个节点上至多只有一个守护进程集的 Pod 运行。

  • 删除容器组时更新

    如果 .spec.template 已更新,只有当您手动删除旧的守护进程集 Pod 时才会创建新的守护进程集 Pod。这与 1.5 或之前版本 Kubernetes 中的守护进程集的操作行为相同。

有关更新策略的更多信息,请访问守护进程集更新策略

更新时 Pod 数量

部署中的更新时容器组数量与有状态副本集中的不同。

  • 容器组最大不可用数量:升级过程中允许不可用的 Pod 的最大数量,由 maxUnavailable 指定。默认值是 25%。
  • 容器组最大超出数量:可调度的超过期望数量的 Pod 的最大数量,由 maxSurge 指定。默认值是 25%。
如果您对更新进行分区,当更新有状态副本集的 Pod 配置时,所有序号大于等于该分区序号值的 Pod 都会被更新。该字段由 .spec.updateStrategy.rollingUpdate.partition 指定,默认值是 0。有关分区的更多信息,请访问分区

守护进程集中的更新时容器组数量与有状态副本集中的不同。

  • 容器组最大不可用数量:升级过程中允许不可用的 Pod 的最大数量,由 maxUnavailable 指定。默认值是 20%。
  • 最小就绪时间:新创建的守护进程集的 Pod 被视为可用之前的最少秒数,由 minReadySeconds 指定。默认值是 0。

容器组 Security Context

Security Context 定义 Pod 或容器的特权和访问控制设置。有关 Pod Security Context 的更多信息,请访问 Pod 安全策略

部署模式

您可以选择不同的部署模式,切换 Pod 间亲和与 Pod 间反亲和。在 Kubernetes 中,Pod 间亲和由 affinity 字段下的 podAffinity 字段指定,而 Pod 间反亲和由 affinity 字段下的 podAntiAffinity 字段指定。在 KubeSphere 中,podAffinitypodAntiAffinity 都设置为 preferredDuringSchedulingIgnoredDuringExecution。您可以在右上角启用编辑模式查看字段详情,

  • 容器组分散部署代表反亲和性。
  • 容器组聚合部署代表亲和性。

有关亲和性和反亲和性的更多信息,请访问 Pod 亲和性


感谢您的反馈。如果您有关于如何使用 KubeSphere 的具体问题,请在 Slack 上提问。如果您想报告问题或提出改进建议,请在 GitHub 存储库中打开问题。