从 Image 创建应用

前提条件

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

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

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

  • 通过 OCI Connector 选择镜像时,还需要为 Connector 代理选择镜像拉取 Secret,或者确认工作负载的 ServiceAccount 已经引用了该 Secret。请参阅在 OCI Connector 中使用 ImagePullSecret。

操作步骤 1 - 工作负载

  1. 在左侧导航栏中,进入 Container Platform > Applications > Applications。

  2. 单击 Create。

  3. 选择 Create from Image 作为创建方式。

  4. 选择或输入一个镜像,然后单击 Confirm。

INFO

注意:使用 web console 中集成的镜像仓库镜像时,可以通过 Already Integrated 进行筛选。Integration Project Name,例如,镜像(registry-projectname),其中包含了该 web console 中的项目名称 projectname 以及镜像仓库中的项目名称 containers。

使用私有 registry 中的镜像时,需要配置对应的 image pull secret。更多信息,请参阅向 ServiceAccount 添加 ImagePullSecrets。

使用 OCI Connector 时,可直接从 Pod 模板中,或通过工作负载的 ServiceAccount 使用 Connector 代理镜像拉取 Secret。该 Secret 必须用于代理身份验证,而不是原始 registry。

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

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

在 Workload > Basic Info 部分中,为工作负载配置声明式参数。

参数说明
Model根据需要选择工作负载:
Replicas定义 Deployment 中期望的 Pod 副本数量(默认值:1)。可根据工作负载需求进行调整。
More > Update Strategy配置用于零停机部署的 rollingUpdate 策略:
Max surge(maxSurge):
  • 更新期间可超出期望副本数的 Pod 最大数量。
  • 支持绝对值(例如 2)或百分比(例如 20%)。
  • 百分比计算公式:ceil(current_replicas × percentage)。
  • 示例:基于 10 个副本计算时,4.1 → 5。
Max unavailable(maxUnavailable):
  • 更新期间可临时不可用的 Pod 最大数量。
  • 百分比值不能超过 100%。
  • 百分比计算公式:floor(current_replicas × percentage)。
  • 示例:基于 10 个副本计算时,4.9 → 4。
说明:
1. 默认值:如果未显式设置,则 maxSurge=1、maxUnavailable=1。
2. 非运行中的 Pod(例如处于 Pending/CrashLoopBackOff 状态)会被视为不可用。
3. 同时约束:
  • maxSurge 和 maxUnavailable 不能同时为 0 或 0%。
  • 如果两个参数按百分比计算后都为 0,Kubernetes 会强制将 maxUnavailable=1 以确保更新能够继续进行。
示例:
对于一个有 10 个副本的 Deployment:
  • maxSurge=2 → 更新期间的 Pod 总数:10 + 2 = 12。
  • maxUnavailable=3 → 最少可用 Pod 数:10 - 3 = 7。
  • 这可在保证可用性的同时,允许受控发布。

工作负载 2 - 配置 Pod

注意:在混合架构集群中部署单架构镜像时,请确保已正确配置 Node Affinity 规则,以便进行 Pod 调度。

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

    参数说明
    Volumes将持久卷挂载到容器。支持的卷类型包括 PVC、ConfigMap、Secret、emptyDir、hostPath 等。实现细节请参阅存储卷挂载说明。
    Image Credential对于私有 registry 中的镜像,请使用包含该 registry 凭证的 Secret。对于 OCI Connector 镜像,请选择 Connector 代理镜像拉取 Secret,或者使用已引用该 Secret 的 ServiceAccount。来自平台集成 registry 的镜像会继续继承关联的凭证。请参阅在 OCI Connector 中使用 ImagePullSecret。
    More > Close Grace PeriodPod 在收到终止信号后,允许完成优雅关闭的持续时间(默认:30s)。
    - 在此期间,Pod 会完成进行中的请求并释放资源。
    - 设置为 0 会强制立即删除(SIGKILL),这可能导致请求中断。
  1. Node Affinity 规则
参数说明
More > Node Selector将 Pod 约束到具有特定标签的节点上(例如 kubernetes.io/os: linux)。
节点 OS 选择器
More > Affinity基于现有 Pod 定义更细粒度的调度规则。

Pod Affinity 类型:
  • Inter-Pod Affinity:将新的 Pod 调度到承载特定 Pod 的节点上(同一拓扑域)。
  • Inter-Pod Anti-affinity:防止新的 Pod 与特定 Pod 共同调度到同一位置。

强制模式:
  • RequiredDuringSchedulingIgnoredDuringExecution:仅当规则满足时才调度 Pod。
  • PreferredDuringSchedulingIgnoredDuringExecution:优先选择满足规则的节点,但允许例外。

配置字段:
  • topologyKey:定义拓扑域的节点标签(默认:kubernetes.io/hostname)。
  • labelSelector:使用标签查询筛选目标 Pod。
  1. 网络配置
    • Kube-OVN
      参数说明
      Bandwidth Limits为 Pod 网络流量实施 QoS:
      • Egress rate limit:最大出站流量速率(例如 10Mbps)。
      • Ingress rate limit:最大入站流量速率。
      Subnet从预定义的子网池中分配 IP。如果未指定,则使用命名空间的默认子网。
      Static IP Address为 Pod 绑定持久 IP 地址:
      • 多个跨 Deployment 的 Pod 可以申请同一个 IP,但同一时刻只能有一个 Pod 使用它。
      • 关键:静态 IP 数量必须 ≥ Pod 副本数。
    • Calico
      参数说明
      Static IP Address分配固定 IP,并严格保证唯一性:
      • 每个 IP 在集群中只能绑定一个 Pod。
      • 关键:静态 IP 数量必须 ≥ Pod 副本数。

工作负载 3 - 配置容器

  1. 在 Container 部分,参考以下说明配置相关信息。

    参数说明
    Resource Requests & Limits
    • Requests:容器运行所需的最小 CPU/内存。
    • Limits:容器运行期间允许使用的最大 CPU/内存。单位定义请参阅资源单位.
    Namespace overcommit ratio:
    • Without overcommit ratio:
      如果命名空间存在资源配额:容器 requests/limits 继承命名空间默认值(可修改)。
      没有命名空间配额:无默认值;使用自定义 Request。
    • With overcommit ratio:
      Requests 自动计算为 Limits / Overcommit ratio(不可修改)。
    约束:
    • Request ≤ Limit ≤ 命名空间配额上限。
    • 更改 overcommit ratio 需要重建 pod 才会生效。
    • overcommit ratio 会禁用手动配置 request。
    • 没有命名空间配额 → 没有容器资源约束。
    Extended Resources配置集群中可用的扩展资源(例如 vGPU、pGPU)。
    Volume Mount持久存储配置。请参阅存储卷挂载说明。
    操作:
    • 已有 pod 卷:单击 Add
    • 没有 pod 卷:单击 Add & Mount
    参数:
    • mountPath:容器文件系统路径(例如 /data)
    • subPath:卷内的相对文件/目录路径。
      对于 ConfigMap/Secret:选择特定 key
    • readOnly:以只读方式挂载(默认:读写)
    请参阅Kubernetes Volumes。
    Port暴露容器端口。
    示例:暴露名为 redis 的 TCP 端口 6379。
    字段:
    • protocol:TCP/UDP
    • Port:暴露端口(例如 6379)
    • name:符合 DNS 规范的标识符(例如 redis)
    Startup Commands & Arguments覆盖默认的 ENTRYPOINT/CMD:
    示例 1:执行 top -b
    - Command:["top", "-b"]
    - 或 Command:["top"],Args:["-b"]
    示例 2:输出 $MESSAGE:
    /bin/sh -c "while true; do echo $(MESSAGE); sleep 10; done"
    请参阅定义命令。
    More > Environment Variables
    • 静态值:直接使用键值对
    • 动态值:引用 ConfigMap/Secret 键、pod 字段(fieldRef)、资源指标(resourceFieldRef)
    注意:环境变量会覆盖镜像/配置文件中的设置。
    More > Referenced ConfigMap将整个 ConfigMap/Secret 作为环境变量注入。支持的 Secret 类型:Opaque、kubernetes.io/basic-auth。
    More > Health Checks
    • Liveness Probe:检测容器健康状态(失败时重启)
    • Readiness Probe:检测服务可用性(失败时从 endpoints 中移除)
    请参阅健康检查参数。
    More > Log File配置日志路径:
    - 默认:采集 stdout
    - 文件模式:例如 /var/log/*.log
    要求:
    • 存储驱动 overlay2:默认支持
    • devicemapper:需要手动将 EmptyDir 挂载到日志目录
    • Windows 节点:确保父目录已挂载(例如 c:/a/b/c/*.log 需要挂载 c:/a)
    More > Exclude Log File排除特定日志不进行采集(例如 /var/log/aaa.log)。
    More > Execute before Stopping在容器终止前执行命令。
    示例:echo "stop"
    注意:命令执行时间必须短于 pod 的 terminationGracePeriodSeconds。
  2. 单击右上角的 Add Container 或 Add Init Container。

    请参阅Init Containers。 Init Container:

    1. 在应用容器之前启动(顺序执行)。
    2. 完成后释放资源。
    3. 允许删除的条件:
      • Pod 中有 >1 个应用容器且有 ≥1 个 init container。
      • 单应用容器的 pod 不允许删除。
  3. 单击 Create。

操作步骤 2 - Services

参数说明
ServiceKubernetes Service,即使工作负载分布在多个后端中,也能通过单个对外端点暴露集群中运行的应用。关于具体参数说明,请参阅创建 Services。

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

操作步骤 3 - Ingress

参数说明
IngressKubernetes Ingress,通过支持协议感知的配置机制使你的 HTTP(或 HTTPS)网络服务可用,该机制能够理解 URI、hostname、path 等 web 概念。Ingress 概念允许你根据通过 Kubernetes API 定义的规则,将流量映射到不同的后端。关于详细参数说明,请参阅创建 Ingresses。

注意:在应用下创建 Ingress 时使用的 Service 必须是当前应用下创建的资源。不过,请确保该 Service 已关联到应用下的工作负载;否则,工作负载的服务发现和访问将失败。
  1. 单击 Create。

应用管理操作

如需修改应用配置,请使用以下任一方式:

  1. 单击应用列表右侧的垂直省略号(⋮)。
  2. 在应用详情页右上角选择 Actions。
操作说明
Update
  • Update:仅使用已定义的 update strategy 修改目标工作负载(以 Deployment 策略为例)。保留现有副本数和发布配置。
  • Force Update:使用各组件的更新策略触发整个应用的完整发布。
    1. 适用场景:
    • 需要立即在集群范围传播的批量配置变更(例如作为环境变量引用的 ConfigMap/Secret 更新)。
    • 为安全需要而进行的协同组件重启。
    2. 警告:
    • 在批量重启期间可能导致服务短暂降级。
    • 如果未验证业务连续性,不建议在生产环境中使用。
  • 网络影响:
    • 删除 Ingress 规则:如果满足以下条件,外部访问仍可通过 LB_IP:NodePort 使用:
      (1)LoadBalancer Service 使用默认端口。
      (2)保留的路由规则引用了应用组件。
      如需完全终止外部访问,必须删除 Service。
    • 删除 Service:应用组件的网络连接将不可恢复地丢失。即使 API 对象仍然存在,关联的 Ingress 规则也会失效。
Delete
  • 级联删除:
    1. 删除所有子资源,包括 Deployments、Services 和 Ingress 规则。
    2. Persistent Volume Claims(PVCs)将遵循 StorageClass 中定义的保留策略。
  • 删除前检查清单:
    1. 确认关联 Services 上没有活跃流量。
    2. 确认有状态组件的数据备份已完成。
    3. 使用 kubectl describe ownerReferences 检查依赖资源关系。

更新组件镜像或 OCI Connector 时,还应检查该组件 Pod 模板中的 image pull Secret 或 ServiceAccount 以及 token 的有效性。更新后,请验证 Connector 注解、实际重写后的代理镜像、Pod 发布状态以及 Events。

参考信息

存储卷挂载说明

类型用途
Persistent Volume Claim绑定现有 PVC 以请求持久存储。

注意:仅可选择已绑定的 PVC(即已关联 PV)。未绑定的 PVC 会导致 pod 创建失败。
ConfigMap将完整或部分 ConfigMap 数据挂载为文件:
  • 完整 ConfigMap:在挂载路径下创建以 key 命名的文件
  • 子路径选择:挂载特定 key(例如 my.cnf)
Secret将完整或部分 Secret 数据挂载为文件:
  • 完整 Secret:在挂载路径下创建以 key 命名的文件
  • 子路径选择:挂载特定 key(例如 tls.crt)
Ephemeral Volumes由集群提供的临时卷,具有以下特性:
  • 动态供给
  • 生命周期与 pod 绑定
  • 支持声明式配置

使用场景:临时数据存储。请参阅Ephemeral Volumes
Empty Directory用于同一 pod 内容器之间共享的临时存储:
- pod 启动时在节点上创建
- 随 pod 删除而删除

使用场景:容器间文件共享、临时数据存储。请参阅EmptyDir
Host Path挂载主机机器目录(必须以 / 开头,例如 /volumepath)。

健康检查参数

通用参数

参数说明
Initial Delay开始探测前的宽限时间(秒)。默认:300。
Period探测间隔(1-120s)。默认:60。
Timeout探测超时时间(1-300s)。默认:30。
Success Threshold判定健康所需的最小连续成功次数。默认:0。
Failure Threshold触发操作所需的最大连续失败次数:
- 0:禁用基于失败的操作
- 默认:5 次失败 → 重启容器。

协议相关参数

参数适用协议说明
ProtocolHTTP/HTTPS健康检查协议
PortHTTP/HTTPS/TCP用于探测的目标容器端口。
PathHTTP/HTTPS端点路径(例如 /healthz)。
HTTP HeadersHTTP/HTTPS自定义 header(添加键值对)。
CommandEXEC容器可执行的检查命令(例如 sh -c "curl -I localhost:8080 | grep OK")。
注意:请转义特殊字符并测试命令是否可用。