从镜像创建应用程序

先决条件

获取镜像地址。镜像的来源可以是平台管理员通过工具链集成的镜像仓库,也可以是第三方平台的镜像仓库。

  • 对于前者,管理员通常会将镜像仓库分配给您的项目,您可以使用其中的镜像。如果找不到所需的镜像仓库,请联系管理员进行分配。

  • 如果是第三方平台的镜像仓库,请确保在当前集群中可以直接从该仓库拉取镜像。

步骤 1 - 工作负载

  1. 容器平台,在左侧导航栏中,导航至 应用程序 > 应用程序

  2. 点击 创建

  3. 选择 从镜像创建 作为创建方式。

  4. 选择输入 镜像,然后点击 确认

INFO

注意: 使用来自集成到 Web 控制台的镜像仓库的镜像时,您可以通过 已集成 筛选镜像。集成项目名称,例如,图像( docker-registry-projectname ),其中包含项目名称 projectname 的在此 Web 控制台和镜像仓库中的项目名称 containers。

  1. 请参阅以下说明配置相关参数。

工作负载 1 - 配置基本信息

工作负载 > 基本信息 部分,配置工作负载的声明性参数。

参数描述
模型根据需要选择工作负载:
副本数定义部署中所需的 Pod 副本数(默认:1)。根据工作负载需求进行调整。
更多 > 更新策略配置零停机时间部署的 rollingUpdate 策略:
最大涌入 (maxSurge):
  • 更新期间可以超过所需副本数的最大 Pod 数量。
  • 接受绝对值(例如,2)或百分比(例如,20%)。
  • 百分比计算: ceil(current_replicas × percentage)
  • 示例: 从 10 个副本计算,4.1 → 5
最大不可用 (maxUnavailable):
  • 更新期间可以暂时不可用的最大 Pod 数量。
  • 百分比值不能超过 100%
  • 百分比计算: floor(current_replicas × percentage)
  • 示例: 从 10 个副本计算,4.9 → 4
注意:
1. 默认值: 如果未显式设置,则 maxSurge=1maxUnavailable=1
2. 非运行 Pod(例如,在 Pending/CrashLoopBackOff 状态)视为不可用。
3. 同时约束:
  • maxSurgemaxUnavailable 不能同时为 00%
  • 如果两个参数的百分比值计算结果为 0,Kubernetes 强制将 maxUnavailable 修改为 1 以确保更新进度。
示例:
对于具有 10 个副本的部署:
  • maxSurge=2 → 更新期间的总 Pods: 10 + 2 = 12
  • maxUnavailable=3 → 最小可用 Pods: 10 - 3 = 7
  • 这确保了可用性,同时允许受控发布。

工作负载 2 - 配置 Pod

注意: 在混合架构集群中部署单架构镜像时,确保配置适当的 节点亲和性规则 以进行 Pod 调度。

  1. Pod 部分,配置容器运行时参数和生命周期管理:

    参数描述
    挂载持久卷到容器。支持的卷类型包括 PVCConfigMapSecretemptyDirhostPath 等等。有关实现细节,请参见 存储卷挂载说明
    镜像凭证仅在 从第三方注册表拉取镜像时需要(通过手动输入镜像 URL)。
    注意: 来自平台集成注册表的镜像会自动继承相关的秘密。
    更多 > 关闭宽限期收到终止信号后,Pod 完成优雅关闭的时间(默认: 30s)。
    - 在此期间,Pod 完成进行中的请求并释放资源。
    - 设置 0 强制立即删除(SIGKILL),这可能会导致请求中断。
  1. 节点亲和性规则

    参数描述
    更多 > 节点选择器将 Pods 限制到具有特定标签的节点(例如,kubernetes.io/os: linux)。
    节点 OS 选择器
    更多 > 亲和性根据现有 Pods 定义细粒度调度规则:
    Pod 亲和性类型:
    • 跨 Pod 亲和性: 将新 Pods 调度到托管特定 Pods 的节点(相同拓扑域)。
    • 跨 Pod 反亲和性: 防止新 Pods 与特定 Pods 同时存在。
    强制模式:
    • RequiredDuringSchedulingIgnoredDuringExecution: Pods 仅在规则满足时调度。
    • PreferredDuringSchedulingIgnoredDuringExecution: 优先考虑满足规则的节点,但允许例外。
    配置字段:
    • topologyKey: 定义拓扑域的节点标签(默认: kubernetes.io/hostname)。
    • labelSelector: 使用标签查询过滤目标 Pods。
  2. 网络配置

    • Kube-OVN
      参数描述
      带宽限制实施 Pod 网络流量的 QoS:
      • 出口速率限制: 最大出站流量速率(例如,10Mbps)。
      • 入站速率限制: 最大入站流量速率。
      子网从预定义的子网池分配 IP。如果未指定,则使用命名空间的默认子网。
      静态 IP 地址将持久 IP 地址绑定到 Pods:
      • 多个 Pods 可以跨 Deployments 声明相同的 IP,但只能有一个 Pod 同时使用它。
      • 关键: 静态 IP 的数量必须 ≥ Pod 副本数。
    • Calico
      参数描述
      静态 IP 地址使用严格唯一性分配固定 IP:
      • 每个 IP 只能绑定到集群中的 一个 Pod
      • 关键: 静态 IP 数量必须 ≥ Pod 副本数。

工作负载 3 - 配置容器

  1. 容器 部分,请参考以下说明配置相关信息。

    参数描述
    资源请求与限制
    • 请求: 容器操作所需的最低 CPU/内存。
    • 限制: 容器执行期间允许的最大 CPU/内存。有关单位定义,请参见 资源单位
    命名空间超额使用比:
    • 不带超额使用比:
      如果命名空间资源配额存在: 容器请求/限制继承命名空间默认值(可修改)。
      命名空间没有配额: 没有默认值;使用自定义请求。
    • 带超额使用比:
      请求自动计算为 Limits / Overcommit ratio(不可修改)。
    约束:
    • 请求 ≤ 限制 ≤ 命名空间配额最大值。
    • 超额使用比的变更需要重新创建 Pod 才能生效。
    • 超额使用比禁用手动请求配置。
    • 没有命名空间配额 → 没有容器资源约束。
    扩展资源配置集群可用的扩展资源(例如,vGPU、pGPU)。
    卷挂载持久存储配置。请参见 存储卷挂载说明
    操作:
    • 现有 Pod 卷: 点击 添加
    • 没有 Pod 卷: 点击 添加并挂载
    参数:
    • mountPath: 容器文件系统路径(例如,/data
    • subPath: 卷内相对文件/目录路径。
      对于 ConfigMap/Secret: 选择特定键
    • readOnly: 以只读方式挂载(默认: 读/写)
    参见 Kubernetes 卷
    端口暴露容器端口。
    示例: 暴露 TCP 端口 6379,名称为 redis
    字段:
    • protocol: TCP/UDP
    • Port: 暴露的端口(例如,6379
    • name: 符合 DNS 的标识符(例如,redis
    启动命令与参数替代默认 ENTRYPOINT/CMD:
    示例 1: 执行 top -b
    - 命令: ["top", "-b"]
    - 命令: ["top"],参数: ["-b"]
    示例 2: 输出 $MESSAGE:
    /bin/sh -c "while true; do echo $(MESSAGE); sleep 10; done"
    请参阅 定义命令
    更多 > 环境变量
    • 静态值: 直接键值对
    • 动态值: 引用 ConfigMap/Secret 键,Pod 字段(fieldRef),资源指标(resourceFieldRef
    注意: 环境变量覆盖镜像/配置文件设置。
    更多 > 引用的 ConfigMap将整个 ConfigMap/Secret 注入为环境变量。支持的 Secret 类型: Opaquekubernetes.io/basic-auth
    更多 > 健康检查
    • 存活探针: 检测容器健康状况(失败时重启)
    • 就绪探针: 检测服务可用性(失败时从端点中移除)
    有关详细信息,请参见 健康检查参数
    更多 > 日志文件配置日志路径:
    - 默认: 收集 stdout
    - 文件模式: 例如,/var/log/*.log
    要求:
    • 存储驱动 overlay2: 默认支持
    • devicemapper: 手动挂载 EmptyDir 到日志目录
    • Windows 节点: 确保挂载父目录(例如,c:/a 用于 c:/a/b/c/*.log
    更多 > 排除日志文件从收集中过滤特定日志(例如,/var/log/aaa.log)。
    更多 > 停止前执行在容器终止前执行命令。
    示例: echo "stop"
    注意: 命令执行时间必须小于 Pod 的 terminationGracePeriodSeconds
  2. 点击 添加容器(右上角)或 添加初始化容器

    参见 初始化容器。 初始化容器:

    1. 在应用容器之前启动(顺序执行)。
    2. 完成后释放资源。
    3. 当满足以下条件时允许删除:
      • Pod 具有 >1 个应用容器且 ≥1 个初始化容器。
      • 不允许针对单应用容器 Pod 进行删除。
  3. 点击 创建

步骤 2 - 服务

参数描述
服务Kubernetes 服务,将运行在集群中的应用程序通过单个外部端点进行暴露,即使工作负载分布在多个后端。有关特定参数的解释,请参阅 创建服务

注意: 在应用程序下创建的内部路由的默认名称前缀是计算组件的名称。如果计算组件类型(部署模式)是 StatefulSet,建议不要更改内部路由的默认名称(工作负载的名称);否则可能会导致工作负载的可访问性问题。

步骤 3 - Ingress

参数描述
IngressKubernetes Ingress,通过理解 URI、主机名、路径等网络服务可用来将 HTTP(或 HTTPS)网络服务提供给外部用户。Ingress 概念允许您根据通过 Kubernetes API 定义的规则将流量映射到不同的后端。有关详细参数描述,请参阅 创建 Ingress

注意: 在应用程序下创建 Ingress 使用的 服务 必须是当前应用程序下创建的资源。但是,确保 服务 与应用程序下的工作负载相关联;否则,工作负载的服务发现和访问将失败。
  1. 点击 创建

应用管理操作

要修改应用程序配置,可以使用以下方法之一:

  1. 点击应用程序列表右侧的垂直省略号(⋮)。
  2. 从应用程序详情页面右上角选择 操作
操作描述
更新
  • 更新: 仅修改目标工作负载,使用其定义的 更新策略(以部署策略为例)。保留现有副本数和发布配置。
  • 强制更新: 使用每个组件的更新策略触发完整的应用程序发布。
    1. 用例:
    • 需要立即在整个集群传播的批量配置更改(例如,作为环境变量引用的 ConfigMap/Secret 更新)。
    • 关键安全性导致的协调组件重启。
    2. 警告注意:
    • 可能会导致在大规模重启期间短暂的服务降低。
    • 在没有业务连续性验证的生产环境中不推荐使用。
  • 网络影响:
    • Ingress 规则删除: 如果:
      1) LoadBalancer 服务使用默认端口。
      2) 存活的路由规则引用应用程序组件,则外部访问仍然可用。
      完全外部访问终止需要删除服务。
    • 服务删除: 对应用程序组件的网络连接不可逆的丧失。尽管 API 对象持续存在,但相关的 Ingress 规则变得无效。
删除
  • 级联删除:
    1. 删除所有子资源,包括部署、服务和 Ingress 规则。
    2. 持久卷声明(PVC)遵循在 StorageClass 中定义的保留策略
  • 删除前检查表:
    1. 验证没有通过相关服务的活动流量。
    2. 确认为有状态组件完成数据备份。
    3. 使用 kubectl describe ownerReferences 检查依赖资源关系。

参考信息

存储卷挂载说明

类型目的
持久卷声明将现有的 PVC 绑定到请求持久存储。
注意: 仅选择已绑定的 PVC(具有相关 PV)。未绑定的 PVC 将导致 Pod 创建失败。
ConfigMap将完整/部分 ConfigMap 数据作为文件挂载:
  • 完整 ConfigMap: 在挂载路径下创建以键命名的文件
  • 子路径选择: 挂载特定键(例如,my.cnf
Secret将完整/部分 Secret 数据作为文件挂载:
  • 完整 Secret: 在挂载路径下创建以键命名的文件
  • 子路径选择: 挂载特定键(例如,tls.crt
临时卷集群提供的临时卷,具有以下特性:
  • 动态供应
  • 与 Pod 生命周期相关
  • 支持声明性配置
用例: 临时数据存储。参见 PVC
空目录在同一 Pod 中的容器之间共享临时存储:
- 在 Pod 启动时在节点上创建
- 随 Pod 删除而删除
用例: 容器间文件共享,临时数据存储。
主机路径挂载宿主机目录(必须以 / 开头,例如,/volumepath)。

健康检查参数

通用参数

参数描述
初始延迟启动探测前的宽限期(秒)。默认: 300
周期探测间隔(1-120秒)。默认: 60
超时探测超时持续时间(1-300秒)。默认: 30
成功阈值标记健康的最小连续成功次数。默认: 0
失败阈值触发动作的最大连续失败次数:
- 0: 禁用基于失败的动作
- 默认: 5 次失败 → 容器重启。

协议专用参数

参数适用协议描述
协议HTTP/HTTPS健康检查协议
端口HTTP/HTTPS/TCP目标容器探测的端口
路径HTTP/HTTPS端点路径(例如,/healthz)。
HTTP 头HTTP/HTTPS自定义头(添加键值对)。
命令EXEC容器可执行的检查命令(例如,sh -c "curl -I localhost:8080 | grep OK")。
注意: 转义特殊字符并测试命令的有效性。