> ## Documentation Index
> Fetch the complete documentation index at: https://docs.siflow.cn/llms.txt
> Use this file to discover all available pages before exploring further.

# 部署和排查工作负载

> 根据业务运行方式选择 Kubernetes 工作负载，提交 YAML，并通过状态、详情和日志排查运行问题。

CKS 集群支持使用 Pod、Deployment、StatefulSet、DaemonSet、Job 和 CronJob 运行不同类型的业务。部署前应先根据任务是否需要持续运行、稳定标识、节点级副本或周期调度选择工作负载类型。

## 选择工作负载类型

| 工作负载 | 适用场景 |
| - | - |
| Pod | 验证镜像、调试命令或运行临时任务。长期运行的业务应优先选择控制器管理的工作负载。 |
| Deployment | 运行无状态服务，并通过副本数维持所需的 Pod 数量。 |
| StatefulSet | 运行需要稳定网络标识或稳定存储的有状态服务。 |
| DaemonSet | 在每个匹配节点上运行一个 Pod，例如日志采集、节点监控或节点级 Agent。 |
| Job | 运行执行完成后退出的一次性任务。 |
| CronJob | 按计划周期创建和运行 Job。 |

## 准备工作负载运行条件

根据工作负载配置，先准备提交后立即需要使用的资源：

* 确认目标命名空间已经创建。
* 需要读取运行配置或敏感信息时，先创建同一命名空间下的 ConfigMap 或 Secret。
* 需要保留数据时，先创建同一命名空间下的 PVC，并确认 PVC 状态为 `Bound`。
* 需要拉取私有镜像时，准备工作负载所需的镜像访问凭据。
* 需要使用 GPU、RDMA、Ingress 或其他扩展能力时，确认对应集群组件已经安装且状态正常。

## 准备工作负载 YAML

根据所选工作负载类型准备 YAML，并根据业务镜像、命名空间、资源规格、环境变量和存储挂载要求调整配置。

<Tabs>
  <Tab title="Pod">
    Pod 适用于验证镜像、调试命令或运行临时任务。长期运行的业务服务建议使用 Deployment、StatefulSet 或 DaemonSet 管理。

    ```yaml theme={null}
    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx-pod
      namespace: default
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.14.2
          ports:
            - containerPort: 80
    ```
  </Tab>

  <Tab title="Deployment">
    Deployment 适用于无状态服务，可以通过副本数控制 Pod 数量。

    ```yaml theme={null}
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      namespace: default
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
            - name: nginx
              image: nginx:1.14.2
              ports:
                - containerPort: 80
    ```
  </Tab>

  <Tab title="StatefulSet">
    StatefulSet 适用于需要稳定网络标识或稳定存储的有状态服务。示例中的 Headless Service 用于为 StatefulSet 提供稳定网络标识。

    ```yaml theme={null}
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
      namespace: default
      labels:
        app: nginx
    spec:
      ports:
        - port: 80
          name: web
      clusterIP: None
      selector:
        app: nginx
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: web
      namespace: default
    spec:
      serviceName: nginx
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
            - name: nginx
              image: nginx:1.14.2
              ports:
                - containerPort: 80
                  name: web
    ```
  </Tab>

  <Tab title="DaemonSet">
    DaemonSet 适用于在每个匹配节点上运行一个 Pod，例如日志采集、节点监控或节点级 Agent。

    ```yaml theme={null}
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: fluentd
      namespace: default
    spec:
      selector:
        matchLabels:
          name: fluentd
      template:
        metadata:
          labels:
            name: fluentd
        spec:
          containers:
            - name: fluentd
              image: fluent/fluentd:v1.16
    ```
  </Tab>

  <Tab title="Job">
    Job 适用于一次性任务。任务完成后，Pod 会保留一段时间，便于查看状态和日志。

    ```yaml theme={null}
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: pi
      namespace: default
    spec:
      template:
        spec:
          restartPolicy: Never
          containers:
            - name: pi
              image: perl:5.34.0
              command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      backoffLimit: 4
    ```
  </Tab>

  <Tab title="CronJob">
    CronJob 适用于按计划周期执行的任务。请根据业务需要调整 `schedule`。

    ```yaml theme={null}
    apiVersion: batch/v1
    kind: CronJob
    metadata:
      name: hello
      namespace: default
    spec:
      schedule: "*/5 * * * *"
      jobTemplate:
        spec:
          template:
            spec:
              restartPolicy: OnFailure
              containers:
                - name: hello
                  image: busybox:1.28
                  command:
                    - /bin/sh
                    - -c
                    - date; echo Hello from the Kubernetes cluster
    ```
  </Tab>
</Tabs>

## 提交工作负载

1. 登录 [GPU 云服务控制台](https://console.siflow.cn/gpu-cloud/home)，进入 **集群** 页面。

2. 单击目标集群名称，进入集群工作台。

3. 在左侧导航中进入 **工作负载** 页面。

4. 切换到所选工作负载类型对应的页签。

5. 使用页面提供的创建入口，选择命名空间并填写准备好的 YAML，然后提交创建。

6. 返回对应页签，确认新建资源已经显示。

## 确认工作负载状态

1. 在 **工作负载** 页面切换到对应资源页签。

2. 按需搜索目标资源。

3. 确认工作负载的运行状态。检查 Pod 时，重点关注所在节点、命名空间、容器就绪情况和重启次数。

如果工作负载未按预期运行，再按以下顺序查看 Pod 日志、资源详情和事件。

## 排查未正常运行的工作负载

### 查看 Pod 日志

1. 在 **Pods** 页签找到目标 Pod。

2. 在 **Actions** 列中单击 **Log**。

3. 查看 Pod 日志内容。

如果需要按时间范围、关键词或字段过滤日志，可以进入 **Logs** 页面。更多信息，请参见 [查询和分析日志](/gpu-cloud/log/query-logs)。

### 查看资源详情和事件

1. 在对应资源页签找到目标工作负载。

2. 在 **Actions** 列中单击 **View**。

3. 查看资源配置、状态和事件等信息。

如果 Pod 长时间处于 `Pending` 或频繁重启，请结合节点状态、PVC 绑定状态、日志和监控指标定位原因。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.