{"id":"d38d9c69-0c61-41f5-b63e-bd0ff5f3abcf","shortId":"gVaw2k","kind":"skill","title":"kubesphere-volcano","tagline":"KubeSphere Volcano job management Skill. Use when user asks to create, list, update, delete Jobs (Volcano Jobs), manage Queues, create PyTorch/TensorFlow/MPI training jobs, or troubleshoot Volcano scheduling issues in KubeSphere. Includes built-in YAML templates, scheduling polic","description":"# KubeSphere Volcano Management\n\n**Environment (this KubeSphere instance):**\n- KubeSphere: Set `KS_HOST` environment variable (e.g., http://<kubesphere-host>:30880)\n- Username: admin (default)\n- Password: Set `KS_PASSWORD` environment variable\n- Clusters: Run `kubectl get clusters` or `ks_api GET /kapis/cluster.kubesphere.io/v1alpha1/clusters`\n- Volcano Extension: Run `kubectl get extension volcano -n kubesphere-system` or check via KubeSphere console\n\nUse this skill for the full Volcano lifecycle in KubeSphere:\n\n- Create, list, update, delete Volcano Jobs\n- Manage Queues for job scheduling\n- Generate YAML templates for PyTorch, TensorFlow, MPI, and batch jobs\n- Troubleshoot job pending, pod creation, and scheduling issues\n\nOut of scope by default:\n\n- Advanced Volcano CRDs not requested by the user, such as `JobFlow`, `JobTemplate`, or `Command`\n- Deep scheduler configuration without cluster evidence\n- Volcano system installation (assume extension is already installed)\n\nIf the user explicitly asks for those, acknowledge that they are Volcano capabilities but treat them as a follow-up task.\n\n## Response Rules\n\n- Prefer executable output: `Job` YAML, `Queue` YAML, kubectl commands, or a short ordered procedure.\n- Use `kind: Job` (not VolcanoJob), the correct resource type in this KubeSphere environment.\n- Use `kubectl get jobs.batch.volcano.sh` or short name `vcjob`/`vj` to query jobs.\n- For uninstall/delete requests, warn that deleting Job resources will terminate running pods.\n- Omit optional fields instead of guessing values.\n\n**IMPORTANT**: The resource type is `Job` (short: vcjob, vj), NOT `VolcanoJob`. Use these names in all kubectl commands.\n\n## API Usage\n\nThis skill supports two approaches for API operations. See **Discovery Commands** section below for detailed commands.\n\n\n### API Endpoints\n\nKubeSphere provides two API paths for Volcano Job:\n\n#### Option 1: KubeSphere Extension API (/kapis) - Recommended\nUses `volcanojobs` resource name:\n\n```\n# Job CRUD (namespace-scoped)\nGET    /kapis/batch.volcano.sh/v1alpha1/namespaces/{namespace}/volcanojobs\nPOST   /kapis/batch.volcano.sh/v1alpha1/namespaces/{namespace}/volcanojobs\nGET    /kapis/batch.volcano.sh/v1alpha1/namespaces/{namespace}/volcanojobs/{name}\nDELETE /kapis/batch.volcano.sh/v1alpha1/namespaces/{namespace}/volcanojobs/{name}\n\n# Job CRUD (cluster-scoped)\nGET    /kapis/batch.volcano.sh/v1alpha1/volcanojobs\nDELETE /kapis/batch.volcano.sh/v1alpha1/volcanojobs\n\n# PodGroup CRUD (namespace-scoped)\nGET    /kapis/batch.volcano.sh/v1alpha1/namespaces/{namespace}/podgroups\n\n# Queue CRUD (user-scoped)\nGET    /kapis/scheduling.volcano.sh/v1beta1/users/{user}/queues\nPOST   /kapis/scheduling.volcano.sh/v1beta1/users/{user}/queues\nDELETE /kapis/scheduling.volcano.sh/v1beta1/users/{user}/queues/{name}\n```\n\n#### Option 2: Kubernetes Native API (/apis)\nUses `jobs` resource name:\n\n```\n# Job CRUD (namespace-scoped)\nGET    /apis/batch.volcano.sh/v1alpha1/namespaces/{namespace}/jobs\nPOST   /apis/batch.volcano.sh/v1alpha1/namespaces/{namespace}/jobs\nGET    /apis/batch.volcano.sh/v1alpha1/namespaces/{namespace}/jobs/{name}\nDELETE /apis/batch.volcano.sh/v1alpha1/namespaces/{namespace}/jobs/{name}\n\n# Job CRUD (cluster-scoped)\nGET    /apis/batch.volcano.sh/v1alpha1/jobs\nDELETE /apis/batch.volcano.sh/v1alpha1/jobs\n\n# Queue CRUD (cluster-scoped)\nGET    /apis/scheduling.volcano.sh/v1beta1/queues\nPOST   /apis/scheduling.volcano.sh/v1beta1/queues\nDELETE /apis/scheduling.volcano.sh/v1beta1/queues/{name}\n```\n\n> **Note**: Both paths work. Use `/kapis` for KubeSphere extension API (multi-cluster support), use `/apis` for standard Kubernetes API.\n\n> **Note**: Queue API has two views:\n> - `/kapis/.../users/{user}/queues` returns queues visible to that user (user-scoped)\n> - `/apis/.../queues` returns all queues in the cluster (cluster-scoped)\n\n```\n# Query Parameters\npage      - Page number (default: 1)\nlimit     - Items per page\nascending - Sort direction (default: false)\nsortBy    - Sort field (e.g., createTime)\n\n```\n\n## Discovery Commands\n\nThis section provides two approaches for querying Volcano status:\n1. **KubeSphere API (curl)** - for extension management and multi-cluster queries\n2. **kubectl** - for direct Kubernetes resource operations\n\n### Option 1: Using KubeSphere API (curl)\n\n**Environment Variables:**\n```bash\nexport KS_HOST=\"http://<kubesphere-host>:30880\"  # KubeSphere console URL (required)\nexport KS_USERNAME=\"admin\"                         # Username (default)\nexport KS_PASSWORD=\"<password>\"                    # Password (optional if KS_TOKEN is set)\nexport KS_TOKEN=\"<token>\"                          # Pre-generated OAuth token (optional, takes priority)\n```\n\n```bash\n# Get OAuth token - prefer KS_TOKEN if set, otherwise use password\nks_token() {\n  # Use KS_TOKEN if it's set and non-empty\n  if [ -n \"${KS_TOKEN}\" ]; then\n    echo \"$KS_TOKEN\"\n    return\n  fi\n  \n  # Fall back to password-based token\n  if [ -z \"${KS_PASSWORD}\" ]; then\n    echo \"Error: KS_TOKEN or KS_PASSWORD must be set\" >&2\n    return 1\n  fi\n  \n  curl -s -X POST \"${KS_HOST}/oauth/token\" \\\n    -H \"Content-Type: application/x-www-form-urlencoded\" \\\n    -d \"grant_type=password&username=${KS_USERNAME:-admin}&password=$KS_PASSWORD&client_id=kubesphere&client_secret=kubesphere\" | jq -r '.access_token'\n}\n\n# Make API call (supports multi-cluster with optional cluster parameter)\nks_api() {\n  local method=$1\n  local path=$2\n  local cluster=${3:-host}  # Default to host cluster. Pass 3rd arg for member clusters.\n  local body=$4\n  local token=$(ks_token)\n  \n  # Check if token is empty\n  if [ -z \"$token\" ]; then\n    echo \"Error: Failed to obtain authentication token. Please check KS_TOKEN or KS_PASSWORD.\" >&2\n    return 1\n  fi\n  \n  # Prepend cluster path if not already present and not a user-scope path\n  if [[ ! \"$path\" =~ ^/clusters/ ]] && [[ ! \"$path\" =~ ^/kapis/scheduling.volcano.sh/v1beta1/users ]]; then\n    path=\"/clusters/${cluster}${path}\"\n  fi\n  \n  curl -s -X \"$method\" \\\n    -H \"Authorization: Bearer $token\" \\\n    -H \"Content-Type: application/json\" \\\n    ${body:+-d \"$body\"} \\\n    \"${KS_HOST}$path\"\n}\n```\n\n**Usage:**\n```bash\n# Option 1: Use pre-generated token (recommended for automation)\nexport KS_HOST=\"http://<kubesphere-host>:30880\"\nexport KS_TOKEN=\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\"\n\n# Option 2: Use password (will fetch token each time)\nexport KS_HOST=\"http://<kubesphere-host>:30880\"\nexport KS_PASSWORD=\"your-password\"\n```\n\n**Query Commands:**\n\n```bash\n# List Jobs in namespace (host cluster)\nks_api GET /kapis/batch.volcano.sh/v1alpha1/namespaces/default/volcanojobs\n\n# List all Jobs (cluster-wide)\nks_api GET /kapis/batch.volcano.sh/v1alpha1/volcanojobs\n\n# List Jobs in member cluster (specify cluster explicitly)\nks_api GET /kapis/batch.volcano.sh/v1alpha1/namespaces/default/volcanojobs member-4\n\n# List Queues (user-scoped, no cluster prefix needed)\nks_api GET /kapis/scheduling.volcano.sh/v1beta1/users/admin/queues\n\n# List PodGroups in namespace\nks_api GET /kapis/batch.volcano.sh/v1alpha1/namespaces/default/podgroups\n\n# Check Volcano extension status\nks_api GET /kapis/kubesphere.io/v1alpha1/extensions/volcano\n\n# List available Volcano extension versions\nks_api GET /kapis/kubesphere.io/v1alpha1/extensionversions | jq '.items[] | select(.metadata.name | contains(\"volcano\"))'\n\n# List clusters\nks_api GET /kapis/cluster.kubesphere.io/v1alpha1/clusters\n```\n\n### Option 2: Using kubectl (Direct Cluster Access)\n\n```bash\n# List all Volcano Jobs\nkubectl get jobs.batch.volcano.sh -A\nkubectl get vcjob -A\nkubectl get vj -A\n\n# List Jobs in specific namespace\nkubectl get vcjob -n <namespace>\n\n# List all Queues\nkubectl get queue -A\n\n# List all PodGroups\nkubectl get podgroup -A\n\n# Check Volcano CRDs\nkubectl get crd | grep volcano\n\n# Check Volcano extension\nkubectl get extension volcano\nkubectl get extensionversion | grep volcano\n```\n\n### Option 3: Multi-Cluster Query (kubeconfig extraction)\n\nFor querying **member clusters**, extract the kubeconfig from the Cluster resource:\n\n```bash\n# Get kubeconfig for a member cluster\nCLUSTER_NAME=member-4\nKUBECONFIG_ENCODED=$(kubectl get cluster.cluster.kubesphere.io $CLUSTER_NAME -o jsonpath='{.spec.connection.kubeconfig}')\necho \"$KUBECONFIG_ENCODED\" | base64 -d > /tmp/${CLUSTER_NAME}-kubeconfig\n\n# Query member cluster\nexport KUBECONFIG=/tmp/${CLUSTER_NAME}-kubeconfig\nkubectl get jobs.batch.volcano.sh -A\nkubectl get queue -A\n\n# Switch back to host cluster\nexport KUBECONFIG=\"\"\n```\n\n### When to Use Which Approach\n\n| Scenario | Recommended Approach |\n|----------|---------------------|\n| Query KubeSphere extension status | KubeSphere API (curl) |\n| List available clusters | KubeSphere API (curl) |\n| Query host cluster Kubernetes resources | kubectl |\n| Query member cluster Kubernetes resources | kubeconfig extraction |\n| Create/apply Job/Queue manifests | kubectl |\n\n## Common Operations\n\n### List Jobs\n\n```bash\n# List in specific namespace\nks_api GET /kapis/batch.volcano.sh/v1alpha1/namespaces/default/volcanojobs\n\n# List all (cluster-wide)\nks_api GET /kapis/batch.volcano.sh/v1alpha1/volcanojobs\n\n# With kubectl\nkubectl get jobs.batch.volcano.sh -A\nkubectl get vcjob -A\nkubectl get vj -A\nkubectl get vcjob -n <namespace>\n```\n\n### Get Job Details\n\n```bash\n# Via API\nks_api GET /kapis/batch.volcano.sh/v1alpha1/namespaces/default/volcanojobs/my-job\n\n# Via kubectl\nkubectl get vcjob my-job -n <namespace> -o yaml\nkubectl describe vcjob my-job -n <namespace>\n\n# View logs (get pod name first, then logs)\nkubectl get pods -n <namespace> -l volcano.sh/job-name=my-job\nkubectl logs <pod-name> -n <namespace>\nkubectl logs -f <pod-name> -n <namespace>  # follow mode\n```\n\n### Create Job\n\n```bash\n# Via API (POST with JSON body - use heredoc for readability)\nread -r -d '' JOB_JSON <<'EOF'\n{\n  \"apiVersion\": \"batch.volcano.sh/v1alpha1\",\n  \"kind\": \"Job\",\n  \"metadata\": {\"name\": \"my-job\", \"namespace\": \"default\"},\n  \"spec\": {\n    \"schedulerName\": \"volcano\",\n    \"queue\": \"default\",\n    \"tasks\": [{\n      \"replicas\": 1,\n      \"name\": \"worker\",\n      \"template\": {\n        \"spec\": {\n          \"containers\": [{\"name\": \"job\", \"image\": \"busybox\", \"command\": [\"echo\", \"hello\"]}],\n          \"restartPolicy\": \"Never\"\n        }\n      }\n    }]\n  }\n}\nEOF\nks_api POST /kapis/batch.volcano.sh/v1alpha1/namespaces/default/volcanojobs \"$JOB_JSON\"\n\n# Via kubectl (apply YAML)\nkubectl apply -f - <<'EOF'\napiVersion: batch.volcano.sh/v1alpha1\nkind: Job\nmetadata:\n  name: my-job\n  namespace: default\nspec:\n  schedulerName: volcano\n  queue: default\n  tasks:\n    - replicas: 1\n      name: worker\n      template:\n        spec:\n          containers:\n            - name: job\n              image: busybox\n              command:\n                - echo\n                - hello\n          restartPolicy: Never\nEOF\n```\n\n### Delete Job\n\n> ⚠️ **WARNING**: Deleting a Job will terminate all running pods associated with it. This action cannot be undone.\n\n```bash\n# Via API\nks_api DELETE /kapis/batch.volcano.sh/v1alpha1/namespaces/default/volcanojobs/my-job\n\n# Via kubectl\nkubectl delete vcjob my-job -n <namespace>\n```\n\n### List Queues\n\n```bash\n# Via API\nks_api GET /kapis/scheduling.volcano.sh/v1beta1/users/admin/queues\n\n# Via kubectl\nkubectl get queue -A\n```\n\n### Create Queue\n\n```bash\n# Via kubectl (using YAML)\nkubectl apply -f - <<'EOF'\napiVersion: scheduling.volcano.sh/v1beta1\nkind: Queue\nmetadata:\n  name: ml-queue\nspec:\n  weight: 50\n  capability:\n    cpu: \"16\"\n    memory: \"64Gi\"\nEOF\n```\n\n### Update Queue\n\n```bash\n# Via kubectl\nkubectl patch queue ml-queue -p '{\"spec\":{\"weight\":60}}' --type merge\n```\n\n### Delete Queue\n\n```bash\n# Via API\nks_api DELETE /kapis/scheduling.volcano.sh/v1beta1/users/admin/queues/ml-queue\n\n# Via kubectl\nkubectl delete queue ml-queue\n```\n\n## Built-in YAML Templates\n\n> **Prerequisite**: The templates reference `claimName: pvc-name`. Ensure the PVC exists in the namespace before applying the Job. Create a PVC first if needed:\n\n### 1. PyTorch Distributed Training Job\n\n```yaml\napiVersion: batch.volcano.sh/v1alpha1\nkind: Job\nmetadata:\n  name: pytorch-distributed-training\n  namespace: default\nspec:\n  schedulerName: volcano\n  minAvailable: 3\n  queue: default\n  tasks:\n    - replicas: 1\n      name: master\n      template:\n        metadata:\n          labels:\n            app: pytorch\n            role: master\n        spec:\n          containers:\n            - name: pytorch\n              image: pytorch/pytorch:2.1.0-cuda11.8-cudnn8-runtime\n              command:\n                - bash\n                - -c\n                - |\n                  export RANK=$((${VOLCANO_TASK_INDEX:-0})\n                  export WORLD_SIZE=3\n                  python /workspace/train.py\n              env:\n                - name: MASTER_ADDR\n                  value: \"$(HOSTNAME)\"\n                - name: MASTER_PORT\n                  value: \"29500\"\n              resources:\n                requests:\n                  cpu: \"2\"\n                  memory: \"4Gi\"\n                limits:\n                  cpu: \"2\"\n                  memory: \"4Gi\"\n              volumeMounts:\n                - name: workspace\n                  mountPath: /workspace\n          volumes:\n            - name: workspace\n              persistentVolumeClaim:\n                claimName: pvc-name\n          restartPolicy: Never\n    - replicas: 2\n      name: worker\n      template:\n        metadata:\n          labels:\n            app: pytorch\n            role: worker\n        spec:\n          containers:\n            - name: pytorch\n              image: pytorch/pytorch:2.1.0-cuda11.8-cudnn8-runtime\n              command:\n                - bash\n                - -c\n                - |\n                  export RANK=$((${VOLCANO_TASK_INDEX:-0} + 1))\n                  export WORLD_SIZE=3\n                  python /workspace/train.py\n              env:\n                - name: MASTER_ADDR\n                  value: pytorch-distributed-training-master-0.pytorch-distributed-training  # Format: {job}-{task}-{index}.{job}\n                - name: MASTER_PORT\n                  value: \"29500\"\n              resources:\n                requests:\n                  cpu: \"2\"\n                  memory: \"4Gi\"\n                limits:\n                  cpu: \"2\"\n                  memory: \"4Gi\"\n              volumeMounts:\n                - name: workspace\n                  mountPath: /workspace\n          volumes:\n            - name: workspace\n              persistentVolumeClaim:\n                claimName: pvc-name\n          restartPolicy: Never\n  policies:\n    - event: TaskCompleted\n      action: CompleteJob\n```\n\n### 2. TensorFlow Training Job\n\n```yaml\napiVersion: batch.volcano.sh/v1alpha1\nkind: Job\nmetadata:\n  name: tf-training\n  namespace: default\nspec:\n  schedulerName: volcano\n  minAvailable: 2\n  queue: default\n  tasks:\n    - replicas: 1\n      name: ps\n      template:\n        metadata:\n          labels:\n            app: tf\n            role: ps\n        spec:\n          containers:\n            - name: tensorflow\n              image: tensorflow/tensorflow:2.14.0-gpu\n              command:\n                - python\n                - /workspace/train.py\n              resources:\n                requests:\n                  cpu: \"2\"\n                  memory: \"4Gi\"\n                  nvidia.com/gpu: \"1\"\n                limits:\n                  cpu: \"2\"\n                  memory: \"4Gi\"\n                  nvidia.com/gpu: \"1\"\n              volumeMounts:\n                - name: workspace\n                  mountPath: /workspace\n          volumes:\n            - name: workspace\n              persistentVolumeClaim:\n                claimName: pvc-name\n          restartPolicy: Never\n    - replicas: 1\n      name: worker\n      template:\n        metadata:\n          labels:\n            app: tf\n            role: worker\n        spec:\n          containers:\n            - name: tensorflow\n              image: tensorflow/tensorflow:2.14.0-gpu\n              command:\n                - python\n                - /workspace/train.py\n              resources:\n                requests:\n                  cpu: \"2\"\n                  memory: \"4Gi\"\n                  nvidia.com/gpu: \"1\"\n                limits:\n                  cpu: \"2\"\n                  memory: \"4Gi\"\n                  nvidia.com/gpu: \"1\"\n              volumeMounts:\n                - name: workspace\n                  mountPath: /workspace\n          volumes:\n            - name: workspace\n              persistentVolumeClaim:\n                claimName: pvc-name\n          restartPolicy: Never\n```\n\n### 3. MPI Job\n\n```yaml\napiVersion: batch.volcano.sh/v1alpha1\nkind: Job\nmetadata:\n  name: mpi-job\n  namespace: default\nspec:\n  schedulerName: volcano\n  minAvailable: 3\n  queue: default\n  tasks:\n    - replicas: 1\n      name: launcher\n      template:\n        metadata:\n          labels:\n            app: mpi\n            role: launcher\n        spec:\n          containers:\n            - name: mpi\n              image: mpioperator/mpich:latest\n              command:\n                - mpirun\n                - -np\n                - \"2\"\n                - ./run.sh\n              resources:\n                requests:\n                  cpu: \"1\"\n                  memory: \"2Gi\"\n                limits:\n                  cpu: \"1\"\n                  memory: \"2Gi\"\n          restartPolicy: Never\n    - replicas: 2\n      name: worker\n      template:\n        metadata:\n          labels:\n            app: mpi\n            role: worker\n        spec:\n          containers:\n            - name: mpi\n              image: mpioperator/mpich:latest\n              resources:\n                requests:\n                  cpu: \"2\"\n                  memory: \"4Gi\"\n                limits:\n                  cpu: \"2\"\n                  memory: \"4Gi\"\n          restartPolicy: Never\n```\n\n### 4. Simple Batch Job\n\n```yaml\napiVersion: batch.volcano.sh/v1alpha1\nkind: Job\nmetadata:\n  name: batch-job\n  namespace: default\nspec:\n  schedulerName: volcano\n  minAvailable: 1\n  queue: default\n  tasks:\n    - replicas: 4\n      name: worker\n      template:\n        metadata:\n          labels:\n            app: batch\n        spec:\n          containers:\n            - name: job\n              image: busybox:latest\n              command:\n                - sh\n                - -c\n                - |\n                  echo \"Processing batch data...\"\n                  sleep 30\n                  echo \"Done\"\n              resources:\n                requests:\n                  cpu: \"1\"\n                  memory: \"1Gi\"\n                limits:\n                  cpu: \"1\"\n                  memory: \"1Gi\"\n          restartPolicy: Never\n```\n\n### 5. Queue Configuration\n\n```yaml\napiVersion: scheduling.volcano.sh/v1beta1\nkind: Queue\nmetadata:\n  name: ml-queue\nspec:\n  weight: 50\n  capability:\n    cpu: \"16\"\n    memory: \"64Gi\"\n  # Optional: resource quota (when using hierarchy)\n  # quota:\n  #   minResource:\n  #     cpu: \"8\"\n  #     memory: \"32Gi\"\n  #   maxResource:\n  #     cpu: \"32\"\n  #     memory: \"128Gi\"\n```\n\n## Best Practices\n\n### Resource Configuration\n\n| Workload Type | CPU | Memory | GPU | Notes |\n|---------------|-----|--------|-----|-------|\n| PyTorch Training | 2-4 per replica | 4-8Gi per replica | 1-2 per replica | Use GPU instances |\n| TensorFlow Training | 2-4 per replica | 4-8Gi per replica | 1 per replica | Match GPU to model size |\n| MPI Job | 1-2 per rank | 2-4Gi per rank | Optional | Minimize network latency |\n| Batch Processing | 1-2 per task | 1-4Gi per task | None | Scale horizontally |\n\n### Scheduling Recommendations\n\n1. **Use appropriate queue** - Create queues for different workload priorities:\n   - `default` - Regular jobs\n   - `ml-queue` - ML training jobs (higher priority)\n   - `low-priority` - Batch jobs that can wait\n\n2. **Set proper minAvailable** - Ensure enough pods are ready before job starts:\n   - Distributed training: set to `replicas - 1` (allow 1 failure)\n   - Batch jobs: set to `1` or `replicas` based on requirements\n\n3. **Configure retry policies** - Add policies for job recovery:\n   ```yaml\n   policies:\n     - event: TaskFailed\n       action: RestartTask\n     - event: PodEvicted\n       action: RestartTask\n   ```\n\n4. **Use appropriate restart policy**:\n   - `Never` - For distributed jobs where restarts create new pods\n   - `OnFailure` - For jobs that can recover from failures\n\n### Troubleshooting\n\n```bash\n# Check Job status\nkubectl get vcjob <name> -n <namespace>\nkubectl describe vcjob <name> -n <namespace>\n\n# Check PodGroup status\nkubectl get podgroup <name> -n <namespace> -o yaml\n\n# Check pods created by Job\nkubectl get pods -n <namespace> -l volcano.sh/job-name=<name>\n\n# Check volcano system pods\nkubectl get pods -n volcano-system\n\n# List all Volcano Jobs\nkubectl get jobs.batch.volcano.sh -A\n\n# List Queues\nkubectl get queue -A\n\n# Common issues:\n# 1. Job pending - check PodGroup status and events\n# 2. Pods not created - check scheduler and queue resources\n# 3. Pods evicted - check queue capacity and priority\n# 4. Job not creating pods - check volcano controller is running in volcano-system namespace\n```\n\n## Response Patterns\n\nMatch output to user intent:\n\n| Request Type | Output |\n|--------------|--------|\n| Create job | YAML manifest + kubectl apply command + verification |\n| List jobs | kubectl/ks_api command + explanation |\n| Get job details | kubectl describe + relevant sections |\n| Delete job | kubectl delete command + confirmation |\n| Show templates | Template with placeholders + usage notes |\n| Troubleshooting | Diagnostic commands first, then causes and solutions |\n| Best practices | Context-aware recommendations |\n\n## Workload Type Detection\n\nWhen user describes a job, infer the type:\n\n| User Says | Use Template |\n|-----------|--------------|\n| \"training\", \"train\", \"machine learning\", \"ml\", \"ai training\" | PyTorch or TensorFlow |\n| \"distributed training\" | PyTorch Distributed |\n| \"MPI\", \"mpi\" | MPI Job |\n| \"batch\", \"batch processing\" | Simple Batch Job |\n| \"queue\" | Queue Configuration |\n\nApply the template with appropriate modifications based on user requirements.","tags":["kubesphere","volcano","agent-skills","cloud-native","cncf","devops","ebpf","hacktoberfest","kubernetes","llm","multi-cluster","multi-tenancy"],"capabilities":["skill","source-kubesphere","skill-kubesphere-volcano","topic-agent-skills","topic-cloud-native","topic-cncf","topic-devops","topic-ebpf","topic-hacktoberfest","topic-kubernetes","topic-kubesphere","topic-llm","topic-multi-cluster","topic-multi-tenancy","topic-observability"],"categories":["kubesphere"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/kubesphere/kubesphere/kubesphere-volcano","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add kubesphere/kubesphere","source_repo":"https://github.com/kubesphere/kubesphere","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 16910 github stars · SKILL.md body (21,999 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T06:52:45.463Z","embedding":null,"createdAt":"2026-04-20T07:11:52.434Z","updatedAt":"2026-04-22T06:52:45.463Z","lastSeenAt":"2026-04-22T06:52:45.463Z","tsv":"'-0':1468,1539 '-2':1955,1983,1998 '-4':841,988,1946,1964,1987,2002 '-8':1950,1968 '/apis':367,431,455 '/apis/batch.volcano.sh/v1alpha1/jobs':401,403 '/apis/batch.volcano.sh/v1alpha1/namespaces':378,382,386,391 '/apis/scheduling.volcano.sh/v1beta1/queues':410,412,414 '/clusters':738,743 '/gpu:':1653,1662,1709,1718 '/job-name=':2146 '/job-name=my-job':1153 '/jobs':380,384,388,393 '/kapis':297,421,442 '/kapis/batch.volcano.sh/v1alpha1/namespaces':309,313,317,322,341 '/kapis/batch.volcano.sh/v1alpha1/namespaces/default/podgroups':862 '/kapis/batch.volcano.sh/v1alpha1/namespaces/default/volcanojobs':817,839,1082,1221 '/kapis/batch.volcano.sh/v1alpha1/namespaces/default/volcanojobs/my-job':1119,1293 '/kapis/batch.volcano.sh/v1alpha1/volcanojobs':332,334,827,1091 '/kapis/cluster.kubesphere.io/v1alpha1/clusters':75,891 '/kapis/kubesphere.io/v1alpha1/extensions/volcano':870 '/kapis/kubesphere.io/v1alpha1/extensionversions':879 '/kapis/scheduling.volcano.sh/v1beta1/users':350,354,358,740 '/kapis/scheduling.volcano.sh/v1beta1/users/admin/queues':854,1311 '/kapis/scheduling.volcano.sh/v1beta1/users/admin/queues/ml-queue':1374 '/oauth/token':628 '/podgroups':343 '/queues':352,356,360,445,456 '/run.sh':1782 '/tmp':1004,1013 '/users':443 '/v1alpha1':1185,1235,1422,1605,1742,1835 '/v1beta1':1332,1900 '/volcanojobs':311,315,319,324 '/workspace':1501,1581,1668,1724 '/workspace/train.py':1474,1546,1644,1700 '1':293,472,498,518,620,670,720,769,1202,1252,1413,1442,1540,1624,1654,1663,1680,1710,1719,1761,1786,1791,1849,1883,1888,1954,1972,1982,1997,2001,2011,2057,2059,2065,2174 '128gi':1932 '16':1345,1913 '1gi':1885,1890 '2':363,510,618,673,718,787,893,1489,1494,1513,1569,1574,1597,1619,1648,1657,1704,1713,1781,1797,1817,1822,1945,1963,1986,2040,2182 '2.1.0':1458,1529 '2.14.0':1640,1696 '29500':1485,1565 '2gi':1788,1793 '3':676,960,1437,1472,1544,1735,1756,2071,2191 '30':1877 '30880':56,529,781,798 '32':1930 '32gi':1927 '3rd':683 '4':690,1827,1854,1949,1967,2090,2199 '4gi':1491,1496,1571,1576,1650,1659,1706,1715,1819,1824 '5':1893 '50':1342,1910 '60':1363 '64gi':1347,1915 '8':1925 'access':653,898 'acknowledg':171 'action':1283,1595,2084,2088 'add':2075 'addr':1478,1550 'admin':58,537,641 'advanc':136 'ai':2291 'allow':2058 'alreadi':162,727 'api':73,264,272,282,287,296,366,425,435,438,500,521,656,667,815,825,837,852,860,868,877,889,1045,1051,1080,1089,1115,1117,1167,1219,1289,1291,1307,1309,1370,1372 'apivers':1182,1232,1329,1419,1602,1739,1832,1897 'app':1448,1519,1630,1686,1767,1803,1860 'appli':1226,1229,1326,1404,2229,2313 'application/json':759 'application/x-www-form-urlencoded':633 'approach':270,493,1036,1039 'appropri':2013,2092,2317 'arg':684 'ascend':477 'ask':12,168 'associ':1279 'assum':159 'authent':709 'author':752 'autom':777 'avail':872,1048 'awar':2269 'back':597,1026 'base':601,2068,2319 'base64':1002 'bash':525,561,767,807,899,978,1074,1113,1165,1287,1305,1320,1351,1368,1461,1532,2113 'batch':121,1829,1841,1861,1874,1995,2035,2061,2304,2305,2308 'batch-job':1840 'batch.volcano.sh':1184,1234,1421,1604,1741,1834 'batch.volcano.sh/v1alpha1':1183,1233,1420,1603,1740,1833 'bearer':753 'best':1933,2265 'bodi':689,760,762,1171 'built':36,1384 'built-in':35,1383 'busybox':1211,1261,1867 'c':1462,1533,1871 'call':657 'cannot':1284 'capabl':176,1343,1911 'capac':2196 'caus':2262 'check':88,695,712,863,939,947,2114,2125,2134,2147,2177,2186,2194,2204 'claimnam':1392,1506,1586,1673,1729 'client':645,648 'cluster':66,70,154,329,398,407,428,462,464,508,661,664,675,681,687,723,744,813,822,832,834,848,887,897,963,970,976,984,985,994,1005,1010,1014,1029,1049,1055,1061,1086 'cluster-scop':328,397,406,463 'cluster-wid':821,1085 'cluster.cluster.kubesphere.io':993 'command':149,196,263,276,281,488,806,1212,1262,1460,1531,1642,1698,1778,1869,2230,2235,2248,2259 'common':1070,2172 'completejob':1596 'configur':152,1895,1936,2072,2312 'confirm':2249 'consol':91,531 'contain':884,1207,1257,1453,1524,1635,1691,1772,1808,1863 'content':631,757 'content-typ':630,756 'context':2268 'context-awar':2267 'control':2206 'correct':208 'cpu':1344,1488,1493,1568,1573,1647,1656,1703,1712,1785,1790,1816,1821,1882,1887,1912,1924,1929,1939 'crd':944 'crds':138,941 'creat':14,23,102,1163,1318,1407,2015,2101,2136,2185,2202,2224 'create/apply':1066 'createtim':486 'creation':127 'crud':304,327,336,345,373,396,405 'cuda11.8-cudnn8-runtime':1459,1530 'curl':501,522,622,747,1046,1052 'd':634,761,1003,1178 'data':1875 'deep':150 'default':59,135,471,480,539,678,1194,1199,1244,1249,1432,1439,1614,1621,1751,1758,1844,1851,2021 'delet':17,105,232,321,333,357,390,402,413,1268,1271,1292,1297,1366,1373,1378,2244,2247 'describ':1132,2122,2241,2276 'detail':280,1112,2239 'detect':2273 'diagnost':2258 'differ':2018 'direct':479,513,896 'discoveri':275,487 'distribut':1415,1429,1554,2052,2097,2296,2299 'distributed-train':1553 'done':1879 'e.g':55,485 'echo':591,608,704,999,1213,1263,1872,1878 'empti':585,699 'encod':990,1001 'endpoint':283 'enough':2045 'ensur':1396,2044 'env':1475,1547 'environ':45,53,64,214,523 'eof':1181,1217,1231,1267,1328,1348 'error':609,705 'event':1593,2082,2086,2181 'evict':2193 'evid':155 'execut':189 'exist':1399 'explan':2236 'explicit':167,835 'export':526,534,540,550,778,782,795,799,1011,1030,1463,1469,1534,1541 'extens':77,81,160,295,424,503,865,874,949,952,1042 'extensionvers':956 'extract':966,971,1065 'eyjhbgcioijiuzi1niisinr5cci6ikpxvcj9':785 'f':1159,1230,1327 'fail':706 'failur':2060,2111 'fall':596 'fals':481 'fetch':791 'fi':595,621,721,746 'field':241,484 'first':1143,1410,2260 'follow':183,1161 'follow-up':182 'format':1556 'full':97 'generat':113,555,773 'get':69,74,80,217,308,316,331,340,349,377,385,400,409,562,816,826,838,853,861,869,878,890,905,909,913,922,929,936,943,951,955,979,992,1018,1022,1081,1090,1095,1099,1103,1107,1110,1118,1123,1140,1147,1310,1315,2118,2129,2140,2152,2163,2169,2237 'gi':1951,1969,1988,2003 'gpu':1641,1697,1941,1959,1976 'grant':635 'grep':945,957 'guess':244 'h':629,751,755 'hello':1214,1264 'heredoc':1173 'hierarchi':1921 'higher':2030 'horizont':2008 'host':52,528,627,677,680,764,780,797,812,1028,1054 'hostnam':1480 'id':646 'imag':1210,1260,1456,1527,1638,1694,1775,1811,1866 'import':246 'includ':34 'index':1467,1538,1559 'infer':2279 'instal':158,163 'instanc':48,1960 'instead':242 'intent':2220 'issu':31,130,2173 'item':474,881 'job':6,18,20,26,107,111,122,124,191,204,226,233,251,291,303,326,369,372,395,809,820,829,903,917,1073,1111,1127,1136,1164,1179,1187,1192,1209,1222,1237,1242,1259,1269,1273,1301,1406,1417,1424,1557,1560,1600,1607,1737,1744,1749,1830,1837,1842,1865,1981,2023,2029,2036,2050,2062,2078,2098,2106,2115,2138,2161,2175,2200,2225,2233,2238,2245,2278,2303,2309 'job/queue':1067 'jobflow':146 'jobs.batch.volcano.sh':218,906,1019,1096,2164 'jobtempl':147 'jq':651,880 'json':1170,1180,1223 'jsonpath':997 'kind':203,1186,1236,1333,1423,1606,1743,1836,1901 'ks':51,62,72,527,535,541,546,551,566,573,576,588,592,605,610,613,626,639,643,666,693,713,716,763,779,783,796,800,814,824,836,851,859,867,876,888,1079,1088,1116,1218,1290,1308,1371 'kubeconfig':965,973,980,989,1000,1007,1012,1016,1031,1064 'kubectl':68,79,195,216,262,511,895,904,908,912,921,928,935,942,950,954,991,1017,1021,1058,1069,1093,1094,1098,1102,1106,1121,1122,1131,1146,1154,1157,1225,1228,1295,1296,1313,1314,1322,1325,1353,1354,1376,1377,2117,2121,2128,2139,2151,2162,2168,2228,2240,2246 'kubectl/ks_api':2234 'kubernet':364,434,514,1056,1062 'kubespher':2,4,33,42,47,49,85,90,101,213,284,294,423,499,520,530,647,650,1041,1044,1050 'kubesphere-system':84 'kubesphere-volcano':1 'l':1150,2143 'label':1447,1518,1629,1685,1766,1802,1859 'latenc':1994 'latest':1777,1813,1868 'launcher':1763,1770 'learn':2289 'lifecycl':99 'limit':473,1492,1572,1655,1711,1789,1820,1886 'list':15,103,808,818,828,842,855,871,886,900,916,925,932,1047,1072,1075,1083,1303,2158,2166,2232 'local':668,671,674,688,691 'log':1139,1145,1155,1158 'low':2033 'low-prior':2032 'machin':2288 'make':655 'manag':7,21,44,108,504 'manifest':1068,2227 'master':1444,1451,1477,1482,1549,1562 'match':1975,2216 'maxresourc':1928 'member':686,831,840,969,983,987,1009,1060 'memori':1346,1490,1495,1570,1575,1649,1658,1705,1714,1787,1792,1818,1823,1884,1889,1914,1926,1931,1940 'merg':1365 'metadata':1188,1238,1335,1425,1446,1517,1608,1628,1684,1745,1765,1801,1838,1858,1903 'metadata.name':883 'method':669,750 'minavail':1436,1618,1755,1848,2043 'minim':1992 'minresourc':1923 'ml':1338,1358,1381,1906,2025,2027,2290 'ml-queue':1337,1357,1380,1905,2024 'mode':1162 'model':1978 'modif':2318 'mountpath':1500,1580,1667,1723 'mpi':119,1736,1748,1768,1774,1804,1810,1980,2300,2301,2302 'mpi-job':1747 'mpioperator/mpich':1776,1812 'mpirun':1779 'multi':427,507,660,962 'multi-clust':426,506,659,961 'must':615 'my-job':1125,1134,1190,1240,1299 'n':83,587,924,1109,1128,1137,1149,1156,1160,1302,2120,2124,2131,2142,2154 'name':221,259,302,320,325,361,371,389,394,415,986,995,1006,1015,1142,1189,1203,1208,1239,1253,1258,1336,1395,1426,1443,1454,1476,1481,1498,1503,1509,1514,1525,1548,1561,1578,1583,1589,1609,1625,1636,1665,1670,1676,1681,1692,1721,1726,1732,1746,1762,1773,1798,1809,1839,1855,1864,1904 'namespac':306,310,314,318,323,338,342,375,379,383,387,392,811,858,920,1078,1193,1243,1402,1431,1613,1750,1843,2213 'namespace-scop':305,337,374 'nativ':365 'need':850,1412 'network':1993 'never':1216,1266,1511,1591,1678,1734,1795,1826,1892,2095 'new':2102 'non':584 'non-empti':583 'none':2006 'note':416,436,1942,2256 'np':1780 'number':470 'nvidia.com':1652,1661,1708,1717 'nvidia.com/gpu:':1651,1660,1707,1716 'o':996,1129,2132 'oauth':556,563 'obtain':708 'omit':239 'onfailur':2104 'oper':273,516,1071 'option':240,292,362,517,544,558,663,768,786,892,959,1916,1991 'order':200 'otherwis':570 'output':190,2217,2223 'p':1360 'page':468,469,476 'paramet':467,665 'pass':682 'password':60,63,542,543,572,600,606,614,637,642,644,717,789,801,804 'password-bas':599 'patch':1355 'path':288,418,672,724,735,737,739,742,745,765 'pattern':2215 'pend':125,2176 'per':475,1947,1952,1956,1965,1970,1973,1984,1989,1999,2004 'persistentvolumeclaim':1505,1585,1672,1728 'placehold':2254 'pleas':711 'pod':126,238,1141,1148,1278,2046,2103,2135,2141,2150,2153,2183,2192,2203 'podevict':2087 'podgroup':335,856,934,937,2126,2130,2178 'polic':41 'polici':1592,2074,2076,2081,2094 'port':1483,1563 'post':312,353,381,411,625,1168,1220 'practic':1934,2266 'pre':554,772 'pre-gener':553,771 'prefer':188,565 'prefix':849 'prepend':722 'prerequisit':1388 'present':728 'prioriti':560,2020,2031,2034,2198 'procedur':201 'process':1873,1996,2306 'proper':2042 'provid':285,491 'ps':1626,1633 'pvc':1394,1398,1409,1508,1588,1675,1731 'pvc-name':1393,1507,1587,1674,1730 'python':1473,1545,1643,1699 'pytorch':117,1414,1428,1449,1455,1520,1526,1943,2293,2298 'pytorch-distributed-train':1427 'pytorch-distributed-training-master-0.pytorch':1552 'pytorch/pytorch':1457,1528 'pytorch/tensorflow/mpi':24 'queri':225,466,495,509,805,964,968,1008,1040,1053,1059 'queue':22,109,193,344,404,437,447,459,843,927,930,1023,1198,1248,1304,1316,1319,1334,1339,1350,1356,1359,1367,1379,1382,1438,1620,1757,1850,1894,1902,1907,2014,2016,2026,2167,2170,2189,2195,2310,2311 'quota':1918,1922 'r':652,1177 'rank':1464,1535,1985,1990 'read':1176 'readabl':1175 'readi':2048 'recommend':298,775,1038,2010,2270 'recov':2109 'recoveri':2079 'refer':1391 'regular':2022 'relev':2242 'replica':1201,1251,1441,1512,1623,1679,1760,1796,1853,1948,1953,1957,1966,1971,1974,2056,2067 'request':140,229,1487,1567,1646,1702,1784,1815,1881,2221 'requir':533,2070,2322 'resourc':209,234,248,301,370,515,977,1057,1063,1486,1566,1645,1701,1783,1814,1880,1917,1935,2190 'respons':186,2214 'restart':2093,2100 'restartpolici':1215,1265,1510,1590,1677,1733,1794,1825,1891 'restarttask':2085,2089 'retri':2073 'return':446,457,594,619,719 'role':1450,1521,1632,1688,1769,1805 'rule':187 'run':67,78,237,1277,2208 'say':2283 'scale':2007 'scenario':1037 'schedul':30,40,112,129,151,2009,2187 'schedulernam':1196,1246,1434,1616,1753,1846 'scheduling.volcano.sh':1331,1899 'scheduling.volcano.sh/v1beta1':1330,1898 'scope':133,307,330,339,348,376,399,408,454,465,734,846 'secret':649 'section':277,490,2243 'see':274 'select':882 'set':50,61,549,569,581,617,2041,2054,2063 'sh':1870 'short':199,220,252 'show':2250 'simpl':1828,2307 'size':1471,1543,1979 'skill':8,94,267 'skill-kubesphere-volcano' 'sleep':1876 'solut':2264 'sort':478,483 'sortbi':482 'source-kubesphere' 'spec':1195,1206,1245,1256,1340,1361,1433,1452,1523,1615,1634,1690,1752,1771,1807,1845,1862,1908 'spec.connection.kubeconfig':998 'specif':919,1077 'specifi':833 'standard':433 'start':2051 'status':497,866,1043,2116,2127,2179 'support':268,429,658 'switch':1025 'system':86,157,2149,2157,2212 'take':559 'task':185,1200,1250,1440,1466,1537,1558,1622,1759,1852,2000,2005 'taskcomplet':1594 'taskfail':2083 'templat':39,115,1205,1255,1387,1390,1445,1516,1627,1683,1764,1800,1857,2251,2252,2285,2315 'tensorflow':118,1598,1637,1693,1961,2295 'tensorflow/tensorflow':1639,1695 'termin':236,1275 'tf':1611,1631,1687 'tf-train':1610 'time':794 'token':547,552,557,564,567,574,577,589,593,602,611,654,692,694,697,702,710,714,754,774,784,792 'topic-agent-skills' 'topic-cloud-native' 'topic-cncf' 'topic-devops' 'topic-ebpf' 'topic-hacktoberfest' 'topic-kubernetes' 'topic-kubesphere' 'topic-llm' 'topic-multi-cluster' 'topic-multi-tenancy' 'topic-observability' 'train':25,1416,1430,1555,1599,1612,1944,1962,2028,2053,2286,2287,2292,2297 'treat':178 'troubleshoot':28,123,2112,2257 'two':269,286,440,492 'type':210,249,632,636,758,1364,1938,2222,2272,2281 'undon':1286 'uninstall/delete':228 'updat':16,104,1349 'url':532 'usag':265,766,2255 'use':9,92,202,215,257,299,368,420,430,519,571,575,770,788,894,1034,1172,1323,1920,1958,2012,2091,2284 'user':11,143,166,347,351,355,359,444,451,453,733,845,2219,2275,2282,2321 'user-scop':346,452,732,844 'usernam':57,536,538,638,640 'valu':245,1479,1484,1551,1564 'variabl':54,65,524 'vcjob':222,253,910,923,1100,1108,1124,1133,1298,2119,2123 'verif':2231 'version':875 'via':89,1114,1120,1166,1224,1288,1294,1306,1312,1321,1352,1369,1375 'view':441,1138 'visibl':448 'vj':223,254,914,1104 'volcano':3,5,19,29,43,76,82,98,106,137,156,175,290,496,864,873,885,902,940,946,948,953,958,1197,1247,1435,1465,1536,1617,1754,1847,2148,2156,2160,2205,2211 'volcano-system':2155,2210 'volcano.sh':1152,2145 'volcano.sh/job-name=':2144 'volcano.sh/job-name=my-job':1151 'volcanojob':206,256,300 'volum':1502,1582,1669,1725 'volumemount':1497,1577,1664,1720 'wait':2039 'warn':230,1270 'weight':1341,1362,1909 'wide':823,1087 'without':153 'work':419 'worker':1204,1254,1515,1522,1682,1689,1799,1806,1856 'workload':1937,2019,2271 'workspac':1499,1504,1579,1584,1666,1671,1722,1727 'world':1470,1542 'x':624,749 'yaml':38,114,192,194,1130,1227,1324,1386,1418,1601,1738,1831,1896,2080,2133,2226 'your-password':802 'z':604,701","prices":[{"id":"6a854a5b-cc40-4001-95fe-ca2c71e3a588","listingId":"d38d9c69-0c61-41f5-b63e-bd0ff5f3abcf","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"kubesphere","category":"kubesphere","install_from":"skills.sh"},"createdAt":"2026-04-20T07:11:52.434Z"}],"sources":[{"listingId":"d38d9c69-0c61-41f5-b63e-bd0ff5f3abcf","source":"github","sourceId":"kubesphere/kubesphere/kubesphere-volcano","sourceUrl":"https://github.com/kubesphere/kubesphere/tree/master/skills/kubesphere-volcano","isPrimary":false,"firstSeenAt":"2026-04-20T07:11:52.434Z","lastSeenAt":"2026-04-22T06:52:45.463Z"}],"details":{"listingId":"d38d9c69-0c61-41f5-b63e-bd0ff5f3abcf","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"kubesphere","slug":"kubesphere-volcano","github":{"repo":"kubesphere/kubesphere","stars":16910,"topics":["agent-skills","ai","cloud-native","cncf","devops","ebpf","hacktoberfest","kubernetes","kubesphere","llm","multi-cluster","multi-tenancy","observability","servicemesh","skills","skills-sh","skillsmp"],"license":"other","html_url":"https://github.com/kubesphere/kubesphere","pushed_at":"2026-04-20T05:39:04Z","description":"The container platform tailored for Kubernetes multi-cloud, datacenter, and edge management ⎈ 🖥 ☁️","skill_md_sha":"77888f343e254c6e12ce7112de812b0bd530d7e1","skill_md_path":"skills/kubesphere-volcano/SKILL.md","default_branch":"master","skill_tree_url":"https://github.com/kubesphere/kubesphere/tree/master/skills/kubesphere-volcano"},"layout":"multi","source":"github","category":"kubesphere","frontmatter":{"name":"kubesphere-volcano","description":"KubeSphere Volcano job management Skill. Use when user asks to create, list, update, delete Jobs (Volcano Jobs), manage Queues, create PyTorch/TensorFlow/MPI training jobs, or troubleshoot Volcano scheduling issues in KubeSphere. Includes built-in YAML templates, scheduling policy recommendations, and best practices for resource configuration. Handles both KubeSphere API and kubectl operations."},"skills_sh_url":"https://skills.sh/kubesphere/kubesphere/kubesphere-volcano"},"updatedAt":"2026-04-22T06:52:45.463Z"}}