{"id":"33296765-5acc-4a41-8cfd-9b3abe8c25c6","shortId":"VFnsaZ","kind":"skill","title":"kubesphere-fluid","tagline":"KubeSphere Fluid management Skill. Use when user asks to install or enable Fluid, check Fluid status, view Fluid pods/logs/CRDs, create or update Dataset, AlluxioRuntime, JuiceFSRuntime, or ThinRuntime, perform DataLoad or cache warming, scale runtime, or troubleshoot Fluid issue","description":"# KubeSphere Fluid Management\n\nUse this skill for the full Fluid lifecycle in KubeSphere:\n\n- Install or upgrade the Fluid extension through `InstallPlan`\n- Query extension status, CRDs, Pods, and logs\n- Generate `Dataset` manifests with mount configuration\n- Generate `AlluxioRuntime`, `JuiceFSRuntime`, or `ThinRuntime` manifests for caching\n- Perform DataLoad for cache warming\n- Scale runtime replicas\n- Uninstall the Fluid extension\n- Troubleshoot Fluid Pods, CRDs, and mount issues\n\nOut of scope by default:\n\n- Advanced Fluid operations not requested by the user, such as `DataBackup` or `GooseFS`\n- Deep tiered storage configuration without user requirements\n\nIf the user explicitly asks for those, acknowledge that they are Fluid capabilities but treat them as a follow-up task.\n\n## Response Rules\n\n- Prefer executable output: `InstallPlan` YAML, `Dataset` YAML, `AlluxioRuntime` YAML, kubectl commands, or a short ordered procedure.\n- Verify the extension name and exact version before generating a final `InstallPlan`.\n- Default the extension name to `fluid` only if the user context or cluster output does not expose a different resource name.\n- Use `upgradeStrategy: Manual` unless the user explicitly asks for something else.\n- Omit optional fields instead of guessing values.\n- Before generating Dataset or Runtime, prefer checking the installed API versions:\n\n```bash\nkubectl api-resources --api-group data.fluid.io\n```\n\n- If the cluster version is unknown and the user only wants an example, use:\n  - Dataset: `data.fluid.io/v1alpha1`\n  - AlluxioRuntime: `data.fluid.io/v1alpha1`\n  - JuiceFSRuntime: `data.fluid.io/v1alpha1`\n  - ThinRuntime: `data.fluid.io/v1alpha1`\n- For uninstall requests, warn that deleting CRDs or CR instances can remove application configuration.\n\n## CRITICAL: Parameter Handling\n\n**ALWAYS use the exact values provided by the user. Never substitute or guess values.**\n\nWhen generating YAML manifests:\n\n| Parameter | Rule |\n|-----------|------|\n| `name` | MUST use user's value exactly |\n| `namespace` | MUST use user's value exactly |\n| `mountPoint` | MUST use user's value exactly (e.g., s3://bucket, oss://bucket, pvc://, https://) |\n| `replicas` | MUST use user's value exactly |\n| `quota` | MUST use user's value exactly |\n| `mediumType` | Use user's value, default to MEM if not specified |\n| `path` | Use user's value, default to /dev/shm if not specified |\n\n**WRONG**: Using `pvc://` when user specified `s3://mybucket/spark-data`\n**RIGHT**: Using exactly what user provided: `s3://mybucket/spark-data`\n\n## CRITICAL: Operation Scope\n\n**Each operation has a specific scope. Do NOT create additional resources unless user explicitly asks.**\n\n| User Request | Output Scope |\n|--------------|--------------|\n| \"Create Dataset\" | Only Dataset YAML |\n| \"Create AlluxioRuntime\" | Only AlluxioRuntime YAML (NOT Dataset) |\n| \"Create JuiceFSRuntime\" | Only JuiceFSRuntime YAML (NOT Dataset) |\n| \"Create ThinRuntime\" | Only ThinRuntime YAML (NOT Dataset) |\n| \"Create Dataset with Runtime\" | Both Dataset + Runtime YAML |\n| \"Create DataLoad\" | Only DataLoad YAML |\n\n**Example:**\n- User says: \"Create an AlluxioRuntime\" → Output ONLY AlluxioRuntime YAML\n- User says: \"Create a Dataset with AlluxioRuntime\" → Output both Dataset and AlluxioRuntime YAML\n\n## Version Mapping Discovery\n\nWhen the user asks for precision, prove the version mapping first:\n\n```bash\n# Discover KubeSphere extension version\nkubectl get extensionversions.kubesphere.io -l kubesphere.io/extension-ref=fluid\nkubectl get extensionversion fluid-<version> -o yaml\n\n# Discover Fluid runtime image or controller version\nkubectl get pods -n fluid-system -o wide\nkubectl get deploy -n fluid-system alluxio-runtime-controller -o jsonpath='{.spec.template.spec.containers[*].image}'\nkubectl describe pod -n fluid-system <fluid-pod>\n```\n\nIf these commands disagree with assumed mappings, prefer cluster output over defaults.\n\n## Discovery Commands\n\nThis section provides three approaches for querying Fluid status:\n1. **KubeSphere API (curl)** - for extension management and multi-cluster queries\n2. **kubectl** - for direct Kubernetes resource operations\n3. **ksctl CLI** - KubeSphere command-line tool\n\n### Option 1: Using KubeSphere API (curl)\n\nUse curl with environment variables for querying KubeSphere extension status and multi-cluster resources.\n\n**Environment Variables:**\n```bash\nexport KS_HOST=\"http://<kubesphere-host>\"     # KubeSphere console URL (required)\nexport KS_USERNAME=\"admin\"                     # Username (default: admin)\nexport KS_PASSWORD=\"<password>\"                # Password (required)\n```\n\n**Helper Functions (add to ~/.bashrc or use directly):**\n```bash\n# Get OAuth token\nks_token() {\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: ks_api GET/POST/PUT/DELETE <path> [body]\nks_api() {\n  local method=${1:-GET}\n  local path=$2\n  local body=$3\n  local token=$(ks_token)\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**Query Commands:**\n\n```bash\n# List all clusters (host + member clusters)\nks_api GET /kapis/cluster.kubesphere.io/v1alpha1/clusters | jq -r '.items[].metadata.name'\n\n# List installed extensions\nks_api GET /kapis/kubesphere.io/v1alpha1/extensions | jq -r '.items[].metadata.name' | grep -i fluid\n\n# List available extension versions\nks_api GET /kapis/kubesphere.io/v1alpha1/extensionversions | jq -r '.items[].metadata.name' | grep -i fluid\n\n# Get Fluid extension details\nks_api GET /kapis/kubesphere.io/v1alpha1/extensions/fluid | jq\n\n# Get cluster connection status\nks_api GET /kapis/cluster.kubesphere.io/v1alpha1/clusters/<cluster>/status | jq '.conditions'\n```\n\n**Multi-Cluster Resource Query:**\n\n```bash\n# Get datasets in host cluster\nks_api GET /clusters/host/kapis/data.fluid.io/v1alpha1/namespaces/<namespace>/datasets\n\n# Get alluxioruntimes in host cluster\nks_api GET /clusters/host/kapis/data.fluid.io/v1alpha1/namespaces/<namespace>/alluxioruntimes\n\n# Get all runtimes (Alluxio + JuiceFS + Thin)\nks_api GET /clusters/host/kapis/data.fluid.io/v1alpha1/namespaces/<namespace>/allruntimes\n\n# Get specific dataset\nks_api GET /clusters/host/kapis/data.fluid.io/v1alpha1/namespaces/<namespace>/datasets/<name>\n\n# Get CRDs in cluster\nks_api GET /clusters/host/apis/apiextensions.k8s.io/v1/customresourcedefinitions | jq -r '.items[] | select(.metadata.name | contains(\"fluid\")) | .metadata.name'\n```\n\n**API Path Format:**\n```\n# For KubeSphere extension management:\n/kapis/kubesphere.io/v1alpha1/extensions\n/kapis/cluster.kubesphere.io/v1alpha1/clusters\n\n# For Fluid resources in namespace:\n/clusters/{cluster}/kapis/data.fluid.io/v1alpha1/namespaces/{namespace}/{resources}\n/clusters/{cluster}/kapis/data.fluid.io/v1alpha1/namespaces/{namespace}/{resources}/{name}\n```\n\n**Query Parameters:**\n- `page` - Page number (default: 1)\n- `limit` - Items per page\n- `ascending` - Sort direction (default: false)\n- `sortBy` - Sort field (e.g., createTime)\n\n**Supported Resource Types:**\n- `datasets`\n- `alluxioruntimes`\n- `juicefsruntimes`\n- `dataloads`\n- `thinruntimes`\n- `allruntimes`\n\n### CRUD Operations via KubeSphere API\n\n**Create Operations:**\n\n```bash\n# Create Dataset\nDATASET_JSON='{\n  \"apiVersion\": \"data.fluid.io/v1alpha1\",\n  \"kind\": \"Dataset\",\n  \"metadata\": {\n    \"name\": \"<name>\",\n    \"namespace\": \"<namespace>\"\n  },\n  \"spec\": {\n    \"mounts\": [{\n      \"mountPoint\": \"<mountPoint>\",\n      \"name\": \"<mountName>\"\n    }]\n  }\n}'\n\nks_api POST /clusters/host/kapis/data.fluid.io/v1alpha1/namespaces/$NAMESPACE/datasets \"$DATASET_JSON\"\n\n# Or use kubectl:\n# kubectl apply -f examples/dataset.yaml\n```\n\n**Read Operations:**\n\n```bash\n# List all datasets in namespace\nks_api GET /clusters/host/kapis/data.fluid.io/v1alpha1/namespaces/$NAMESPACE/datasets\n\n# Get specific dataset\nks_api GET /clusters/host/kapis/data.fluid.io/v1alpha1/namespaces/$NAMESPACE/datasets/<name>\n```\n\n**Update Operations (Scale Runtime):**\n\n```bash\n# Scale AlluxioRuntime via PUT\nRUNTIME_UPDATE='{\"spec\":{\"replicas\":<new-replicas>}}'\nks_api PUT /clusters/host/kapis/data.fluid.io/v1alpha1/namespaces/$NAMESPACE/alluxioruntimes/<name> \"$RUNTIME_UPDATE\"\n\n# Or use kubectl:\n# kubectl scale alluxioruntime <name> -n <namespace> --replicas=<n>\n```\n\n**Delete Operations:**\n\n```bash\n# Delete dataset\nks_api DELETE /clusters/host/kapis/data.fluid.io/v1alpha1/namespaces/$NAMESPACE/datasets/<name>\n\n# Delete alluxioruntime\nks_api DELETE /clusters/host/kapis/data.fluid.io/v1alpha1/namespaces/$NAMESPACE/thinruntimes/<name>\nks_api DELETE /clusters/host/kapis/data.fluid.io/v1alpha1/namespaces/$NAMESPACE/alluxioruntimes/<name>\n```\n\n### Option 2: Using kubectl (Direct Cluster Access)\n\nUse `kubectl` for direct Kubernetes resource operations.\n\n```bash\n# Extension and version discovery in KubeSphere\nkubectl get extensions.kubesphere.io | grep -i fluid\nkubectl get extensionversions.kubesphere.io | grep -i fluid\n\n# InstallPlan and extension status\nkubectl get installplans.kubesphere.io\nkubectl get installplan fluid -o yaml\nkubectl describe extension fluid\nkubectl describe extensionversion fluid-<version>\n\n# Fluid runtime resources\nkubectl api-resources --api-group data.fluid.io\nkubectl get crd | grep -E 'datasets.data.fluid.io|alluxioruntimes.data.fluid.io'\nkubectl get pods -A | grep -i fluid\nkubectl get datasets.data.fluid.io -A\nkubectl get alluxioruntimes.data.fluid.io -A\n```\n\n### Option 3: Using ksctl CLI\n\n```bash\n# List available datasets\nksctl get dataset -n <namespace>\n\n# Create dataset with runtime\nksctl create dataset -f dataset.yaml\n\n# Check status\nksctl describe dataset <name> -n <namespace>\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 Dataset/Runtime | kubectl |\n| Get extension version info | KubeSphere API (curl) |\n| Quick status check | ksctl |\n\nKubeSphere UI relation:\n\n- Users can also discover and enable the extension from the KubeSphere Extension Marketplace UI\n- When the user asks for repeatable or reviewable operations, prefer `InstallPlan` manifests and `kubectl`\n- When the user explicitly wants console steps, explain the equivalent UI path instead of forcing YAML\n\n---\n\n## Example Files\n\nThis skill includes ready-to-use example manifests in the `examples/` directory:\n\n| File | Description |\n|------|-------------|\n| `examples/dataset.yaml` | Minimal Dataset manifest |\n| `examples/alluxioruntime.yaml` | Dataset + AlluxioRuntime with tiered storage |\n| `examples/juicefs.yaml` | Dataset + JuiceFSRuntime |\n| `examples/thinruntime.yaml` | Dataset + ThinRuntime |\n| `examples/dataload.yaml` | DataLoad for cache warming |\n| `examples/installplan.yaml` | InstallPlan for Fluid extension |\n\n---\n\n## Install Fluid in KubeSphere\n\n### 1. Pre-check\n\n```bash\nkubectl get extension fluid\nkubectl get extensionversions.kubesphere.io -l kubesphere.io/extension-ref=fluid\nkubectl describe extensionversion fluid-<exact-version>\n```\n\nCheck:\n\n- The extension resource exists\n- The exact extension version exists\n- Whether the extension is single-cluster or multi-cluster\n- Whether the user needs custom config\n\n### 2. InstallPlan Template\n\nUse this when the user has already confirmed the extension name and version.\n\n```bash\n# See examples/installplan.yaml for the template\nkubectl apply -f examples/installplan.yaml\nkubectl get installplan fluid -w\nkubectl describe installplan fluid\nkubectl get extension fluid -o yaml\n```\n\n---\n\n## Manage Dataset\n\n### Dataset Template\n\n```bash\n# See examples/dataset.yaml\n# Key fields:\n# - spec.mounts[].mountPoint: Data source (s3://, oss://, pvc://, https://) - USE EXACT VALUE FROM USER\n# - spec.mounts[].name: Mount identifier\n# - spec.mounts[].readOnly: Read-only mount (default: false)\n```\n\n**IMPORTANT**: When user provides `mountPoint`, use it EXACTLY. Do not substitute.\n\nCommon operations:\n\n```bash\nkubectl apply -f examples/dataset.yaml\nkubectl get dataset <name> -n <namespace>\nkubectl describe dataset <name> -n <namespace>\nkubectl delete dataset <name> -n <namespace>\n```\n\n---\n\n## Manage AlluxioRuntime\n\n### AlluxioRuntime Template (Standalone)\n\n**When user asks to create AlluxioRuntime ONLY, generate ONLY AlluxioRuntime YAML:**\n\n```yaml\napiVersion: data.fluid.io/v1alpha1\nkind: AlluxioRuntime\nmetadata:\n  name: {{name}}\n  namespace: {{namespace}}\nspec:\n  replicas: {{replicas}}\n  tieredstore:\n    levels:\n      - mediumtype: {{mediumType}}\n        path: {{path}}\n        quota: {{quota}}\n        high: \"{{high}}\"\n        low: \"{{low}}\n```\n\n**When user explicitly asks for \"Dataset with Runtime\", generate both:**\n\n```bash\n# See examples/alluxioruntime.yaml\n```\n\n### Key fields:\n- `spec.replicas`: Number of Alluxio workers - USE USER'S VALUE\n- `spec.tieredstore.levels`: Storage configuration\n  - `mediumtype`: MEM, SSD, or HDD - USE USER'S VALUE or default to MEM\n  - `path`: Storage path - USE USER'S VALUE or default to /dev/shm\n  - `quota`: Storage size - USE USER'S VALUE\n  - `high/low`: Watermark ratios\n\nCommon operations:\n\n```bash\nkubectl apply -f examples/alluxioruntime.yaml\nkubectl get alluxioruntime <name> -n <namespace> -o wide\nkubectl describe alluxioruntime <name> -n <namespace>\n```\n\n### Scale Runtime\n\n```bash\n# Scale via kubectl\nkubectl scale alluxioruntime <name> -n <namespace> --replicas=<n>\n\n# Scale via kubectl patch\nkubectl patch alluxioruntime <name> -n <namespace> -p '{\"spec\":{\"replicas\":<n>}}'\n\n# Verify\nkubectl get alluxioruntime <name> -n <namespace> -o wide\n```\n\n---\n\n## Manage JuiceFSRuntime\n\n### JuiceFSRuntime Template (Standalone)\n\n**When user asks to create JuiceFSRuntime ONLY, generate ONLY JuiceFSRuntime YAML:**\n\n```yaml\napiVersion: data.fluid.io/v1alpha1\nkind: JuiceFSRuntime\nmetadata:\n  name: {{name}}\n  namespace: {{namespace}}\nspec:\n  volume:\n    name: {{juicefsVolume}}\n    secret: {{secretName}}\n```\n\n**When user explicitly asks for \"Dataset with JuiceFS\", generate both:**\n\n```bash\n# See examples/juicefs.yaml\n```\n\n### Key fields:\n- `spec.volume.name`: JuiceFS volume name - USE USER'S VALUE\n- `spec.volume.secret`: Credentials secret - USE USER'S VALUE\n\nCommon operations:\n\n```bash\nkubectl apply -f examples/juicefs.yaml\nkubectl get juicefsruntime <name> -n <namespace> -o wide\nkubectl describe juicefsruntime <name> -n <namespace>\n```\n\n---\n\n## DataLoad (Cache Warming)\n\n### DataLoad Template - COMPLETE VERSION\n\n**ALWAYS include all required fields:**\n\n```yaml\napiVersion: data.fluid.io/v1alpha1\nkind: DataLoad\nmetadata:\n  name: {{name}}\n  namespace: {{namespace}}\nspec:\n  dataset:\n    name: {{datasetName}}        # REQUIRED - target dataset name\n    namespace: {{datasetNamespace}}  # REQUIRED - target dataset namespace\n  loadMetadata: {{loadMetadata}} # REQUIRED - boolean (default: false)\n  target:                        # REQUIRED - array of paths to load\n    - path: {{targetPath}}       # Path to load, e.g., /data\n```\n\n**Field requirements:**\n- `spec.dataset.name`: REQUIRED - must be provided by user\n- `spec.dataset.namespace`: REQUIRED - must be provided by user  \n- `spec.loadMetadata`: REQUIRED - default to `false` if user doesn't specify\n- `spec.target`: REQUIRED - array of paths, minimum one entry\n- `spec.target[].path`: REQUIRED - the path to load (e.g., /data, /user/home)\n\nCommon operations:\n\n```bash\nkubectl apply -f examples/dataload.yaml\nkubectl get dataload <name> -n <namespace>\nkubectl describe dataload <name> -n <namespace>\n```\n\n---\n\n## Uninstall Fluid\n\n### Uninstall Pre-check\n\nCheck whether datasets or runtimes still exist:\n\n```bash\nkubectl get datasets.data.fluid.io -A\nkubectl get alluxioruntimes.data.fluid.io -A\nkubectl get juicefsruntimes.data.fluid.io -A\nkubectl get thinruntimes.data.fluid.io -A\n```\n\nIf these resources still exist, tell the user to migrate or remove them first.\n\n### Default uninstall path:\n\n```bash\nkubectl delete installplan fluid\nkubectl get installplan fluid\nkubectl get pods -n fluid-system | grep -i fluid\n```\n\nIf the user wants full cleanup, remind them to handle application resources first.\n\n---\n\n## Troubleshooting Playbook\n\n### 1. InstallPlan or extension failed\n\n```bash\nkubectl describe installplan fluid\nkubectl get installplan fluid -o jsonpath='{.status.conditions}'\nkubectl get extension fluid -o yaml\nkubectl get extensionversion fluid-<version> -o yaml\n```\n\n### 2. Fluid Pods are unhealthy\n\n```bash\nkubectl get pods -A | grep -i fluid\nkubectl describe pod -n fluid-system <pod-name>\nkubectl logs -n fluid-system deploy/alluxio-runtime-controller --tail=200\nkubectl logs -n fluid-system deploy/juicefs-runtime-controller --tail=200\nkubectl get events -n fluid-system --sort-by=.lastTimestamp\n```\n\n### 3. CRD missing or not established\n\n```bash\nkubectl get crd datasets.data.fluid.io alluxioruntimes.data.fluid.io juicefsruntimes.data.fluid.io thinruntimes.data.fluid.io\nkubectl describe crd datasets.data.fluid.io\nkubectl api-resources --api-group data.fluid.io\n```\n\nLikely causes:\n\n- Fluid extension installation did not finish\n- CRDs were partially created or rejected by the API server\n- Controller startup failed before CRDs became usable\n\nSafe next actions:\n\n- Re-check `InstallPlan` state and conditions\n- Inspect install logs and controller logs\n\n### 4. Runtime Not Ready\n\n```bash\nkubectl get alluxioruntime <name> -n <namespace>\nkubectl describe alluxioruntime <name> -n <namespace>\nkubectl get pods -n <namespace> -l release=<runtime>\n```\n\nLikely causes:\n\n- Master or worker pods not scheduled\n- Tiered storage configuration issue\n- Insufficient node resources\n\n### 5. Mount Failed\n\n```bash\nkubectl describe dataset <name> -n <namespace>\nkubectl get dataset <name> -n <namespace> -o yaml\n```\n\nLikely causes:\n\n- Mount point inaccessible\n- Invalid credentials\n- Network connectivity to UFS\n\n### 6. DataLoad Stuck\n\n```bash\nkubectl get dataload <name> -n <namespace>\nkubectl describe dataload <name> -n <namespace>\nkubectl get dataset <dataset-name> -n <namespace>\n```\n\n### 7. Scaling Slow\n\n```bash\nkubectl describe alluxioruntime <name> -n <namespace> | grep -A5 \"Scaling\"\nkubectl describe resourcequota -n <namespace>\nkubectl describe nodes | grep -A10 \"Allocated resources\"\n```\n\n---\n\n## Output Patterns\n\nMatch the answer to the user intent:\n\n- Install request: brief pre-check commands plus a complete `InstallPlan` manifest\n- Status request: only the most relevant `kubectl` commands, grouped by purpose\n- Dataset request: one executable manifest plus apply, verify, and delete commands\n- AlluxioRuntime request: ONLY AlluxioRuntime manifest (NOT Dataset), unless user explicitly says \"with Dataset\"\n- Runtime with Dataset request: both Dataset and Runtime manifests\n- DataLoad request: COMPLETE manifest with all required fields (dataset, loadMetadata, target)\n- Scale request: scale command and verification\n- Uninstall request: delete command, verification commands, and cleanup cautions\n- Troubleshooting request: diagnosis commands first, then likely causes, then safe next steps\n\n## Manage ThinRuntime\n\n### ThinRuntime Template (Standalone)\n\n**When user asks to create ThinRuntime ONLY, generate ONLY ThinRuntime YAML:**\n\n```yaml\napiVersion: data.fluid.io/v1alpha1\nkind: ThinRuntime\nmetadata:\n  name: {{name}}\n  namespace: {{namespace}}\nspec:\n  mountPoint: {{mountPoint}}\n thin:\n    profile: {{profileName}}\n    credentials: {{secretName}}\n```\n\n**When user explicitly asks for \"Dataset with ThinRuntime\", generate both:**\n\n```bash\n# See examples/thinruntime.yaml\n```\n\n### Key fields:\n- `spec.mountPoint`: Under storage path - USE USER'S VALUE\n- `spec.thin.profile`: Thin runtime profile name - USE USER'S VALUE\n- `spec.thin.credentials`: Secret containing credentials - USE USER'S VALUE\n\nCommon operations:\n\n```bash\nkubectl apply -f examples/thinruntime.yaml\nkubectl get thinruntime <name> -n <namespace> -o wide\nkubectl describe thinruntime <name> -n <namespace>\n```\n\n---","tags":["kubesphere","fluid","agent-skills","cloud-native","cncf","devops","ebpf","hacktoberfest","kubernetes","llm","multi-cluster","multi-tenancy"],"capabilities":["skill","source-kubesphere","skill-kubesphere-fluid","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-fluid","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 (20,258 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.228Z","embedding":null,"createdAt":"2026-04-20T07:11:49.851Z","updatedAt":"2026-04-22T06:52:45.228Z","lastSeenAt":"2026-04-22T06:52:45.228Z","tsv":"'/.bashrc':633 '/allruntimes':819 '/alluxioruntimes':808 '/bucket':329 '/clusters':858,863 '/clusters/host/apis/apiextensions.k8s.io/v1/customresourcedefinitions':835 '/clusters/host/kapis/data.fluid.io/v1alpha1/namespaces':797,807,818,826,927,949,957,975,995,1002,1007 '/data':1703,1746 '/datasets':798,827 '/dev/shm':363,1508 '/extension-ref=fluid':491,1281 '/kapis/cluster.kubesphere.io/v1alpha1/clusters':729,779,852 '/kapis/data.fluid.io/v1alpha1/namespaces':860,865 '/kapis/kubesphere.io/v1alpha1/extensions':740,851 '/kapis/kubesphere.io/v1alpha1/extensions/fluid':770 '/kapis/kubesphere.io/v1alpha1/extensionversions':755 '/mybucket/spark-data':373,381 '/status':780 '/user/home':1747 '/v1alpha1':256,260,264,268,914,1435,1585,1662,2209 '1':559,587,686,875,1266,1844 '2':571,690,1010,1313,1873 '200':1901,1910 '3':578,693,1097,1922 '4':1989 '5':2023 '6':2048 '7':2064 'a10':2083 'a5':2073 'access':673,1015 'acknowledg':135 'action':1975 'add':631 'addit':394 'admin':620,623,661 'advanc':108 'alloc':2084 'allruntim':898 'alluxio':522,812,1476 'alluxio-runtime-control':521 'alluxioruntim':27,77,159,257,410,412,448,451,459,464,800,894,965,984,998,1242,1416,1417,1425,1429,1437,1528,1534,1544,1553,1561,1996,2000,2070,2129,2132 'alluxioruntimes.data.fluid.io':1080,1094,1783,1933 'alreadi':1322 'also':1177 'alway':286,1653 'answer':2090 'api':228,233,236,561,590,676,679,683,727,738,753,768,777,795,805,816,824,833,844,903,925,947,955,973,993,1000,1005,1068,1071,1137,1143,1166,1942,1945,1964 'api-group':235,1070,1944 'api-resourc':232,1067,1941 'apivers':911,1432,1582,1659,2206 'appli':935,1336,1400,1523,1633,1752,2124,2269 'applic':281,1839 'application/json':710 'application/x-www-form-urlencoded':653 'approach':554,1128,1131 'array':1692,1732 'ascend':880 'ask':11,132,208,399,472,1192,1422,1461,1572,1602,2196,2228 'assum':541 'author':703 'avail':749,1103,1140 'bash':230,480,609,637,719,788,906,940,963,989,1023,1101,1270,1329,1358,1398,1468,1521,1538,1609,1631,1750,1776,1810,1849,1878,1928,1993,2026,2051,2067,2235,2267 'bearer':704 'becam':1971 'bodi':681,692,711,713 'boolean':1687 'brief':2097 'bucket':330 'cach':34,83,87,1255,1647 'call':677 'capabl':140 'caus':1949,2009,2038,2184 'caution':2176 'check':17,225,1118,1170,1269,1286,1768,1769,1978,2100 'cleanup':1834,2175 'cli':580,1100 'client':665,668 'cluster':192,241,544,569,605,722,725,773,785,793,803,831,859,864,1014,1141,1147,1153,1302,1306 'command':162,538,549,583,718,2101,2114,2128,2165,2171,2173,2180 'command-lin':582 'common':1396,1519,1629,1748,2265 'complet':1651,2104,2153 'condit':782,1982 'config':1312 'configur':75,124,282,1484,2018 'confirm':1323 'connect':774,2045 'consol':614,1208 'contain':841,2259 'content':651,708 'content-typ':650,707 'context':190 'control':503,524,1966,1987 'cr':277 'crd':1076,1923,1931,1938 'crds':66,99,275,829,1956,1970 'creat':23,393,404,409,416,423,430,438,446,455,904,907,1109,1114,1424,1574,1959,2198 'create/apply':1158 'createtim':889 'credenti':1623,2043,2223,2260 'critic':283,382 'crud':899 'curl':562,591,593,643,698,1138,1144,1167 'custom':1311 'd':654,712 'data':1365 'data.fluid.io':238,255,259,263,267,913,1073,1434,1584,1661,1947,2208 'data.fluid.io/v1alpha1':254,258,262,266,912,1433,1583,1660,2207 'databackup':118 'dataload':32,85,439,441,896,1253,1646,1649,1664,1757,1761,2049,2054,2058,2151 'dataset':26,71,157,221,253,405,407,415,422,429,431,435,457,462,790,822,893,908,909,916,929,943,953,991,1104,1107,1110,1115,1122,1238,1241,1247,1250,1355,1356,1405,1409,1413,1463,1604,1671,1676,1682,1771,2029,2033,2062,2118,2135,2141,2144,2147,2159,2230 'dataset.yaml':1117 'dataset/runtime':1159 'datasetnam':1673 'datasetnamespac':1679 'datasets.data.fluid.io':1079,1090,1779,1932,1939 'deep':121 'default':107,180,350,361,547,622,874,883,1383,1495,1506,1688,1722,1807 'delet':274,987,990,994,997,1001,1006,1412,1812,2127,2170 'deploy':516 'deploy/alluxio-runtime-controller':1899 'deploy/juicefs-runtime-controller':1908 'describ':530,1056,1060,1121,1283,1345,1408,1533,1643,1760,1851,1887,1937,1999,2028,2057,2069,2076,2080,2279 'descript':1235 'detail':766 'diagnosi':2179 'differ':198 'direct':574,636,882,1013,1019 'directori':1233 'disagre':539 'discov':481,498,1178 'discoveri':468,548,1027 'doesn':1727 'e':1078 'e.g':327,888,1702,1745 'els':211 'enabl':15,1180 'entri':1737 'environ':595,607 'equival':1212 'establish':1927 'event':1913 'exact':173,289,312,319,326,337,344,376,1292,1369,1392 'exampl':251,443,1219,1228,1232 'examples/alluxioruntime.yaml':1240,1470,1525 'examples/dataload.yaml':1252,1754 'examples/dataset.yaml':937,1236,1360,1402 'examples/installplan.yaml':1257,1331,1338 'examples/juicefs.yaml':1246,1611,1635 'examples/thinruntime.yaml':1249,2237,2271 'execut':153,2121 'exist':1290,1295,1775,1797 'explain':1210 'explicit':131,207,398,1206,1460,1601,2138,2227 'export':610,617,624 'expos':196 'extens':60,64,95,170,182,483,564,600,736,750,765,849,1024,1044,1057,1134,1162,1182,1186,1261,1273,1288,1293,1298,1325,1350,1847,1863,1951 'extensions.kubesphere.io':1032 'extensionvers':494,1061,1284,1869 'extensionversions.kubesphere.io':487,1038,1277 'extract':1157 'f':936,1116,1337,1401,1524,1634,1753,2270 'fail':1848,1968,2025 'fals':884,1384,1689,1724 'field':214,887,1362,1472,1613,1657,1704,2158,2239 'file':1220,1234 'final':178 'finish':1955 'first':479,1806,1841,2181 'fluid':3,5,16,18,21,40,43,51,59,94,97,109,139,185,495,499,510,519,534,557,747,762,764,842,854,1035,1041,1052,1058,1062,1063,1087,1260,1263,1274,1285,1342,1347,1351,1764,1814,1818,1824,1828,1853,1857,1864,1870,1874,1885,1891,1897,1906,1916,1950 'fluid-system':509,518,533,1823,1890,1896,1905,1915 'follow':147 'follow-up':146 'forc':1217 'format':846 'full':50,1833 'function':630 'generat':70,76,176,220,301,1427,1466,1577,1607,2201,2233 'get':486,493,506,515,638,687,728,739,754,763,769,772,778,789,796,799,806,809,817,820,825,828,834,948,951,956,1031,1037,1047,1050,1075,1082,1089,1093,1106,1161,1272,1276,1340,1349,1404,1527,1560,1637,1756,1778,1782,1786,1790,1816,1820,1855,1862,1868,1880,1912,1930,1995,2003,2032,2053,2061,2273 'get/post/put/delete':680 'goosef':120 'grant':655 'grep':745,760,1033,1039,1077,1085,1826,1883,2072,2082 'group':237,1072,1946,2115 'guess':217,298 'h':649,702,706 'handl':285,1838 'hdd':1489 'helper':629 'high':1454,1455 'high/low':1516 'host':612,715,723,792,802,1146 'host/oauth/token':648 'id':666 'identifi':1376 'imag':501,528 'import':1385 'inaccess':2041 'includ':1223,1654 'info':1164 'inspect':1983 'instal':13,55,227,735,1262,1952,1984,2095 'installplan':62,155,179,1042,1051,1199,1258,1314,1341,1346,1813,1817,1845,1852,1856,1979,2105 'installplans.kubesphere.io':1048 'instanc':278 'instead':215,1215 'insuffici':2020 'intent':2094 'invalid':2042 'issu':41,102,2019 'item':732,743,758,838,877 'jq':671,730,741,756,771,781,836 'json':910,930 'jsonpath':526,1859 'juicef':813,1606,1615 'juicefsruntim':28,78,261,417,419,895,1248,1566,1567,1575,1579,1587,1638,1644 'juicefsruntimes.data.fluid.io':1787,1934 'juicefsvolum':1596 'key':1361,1471,1612,2238 'kind':915,1436,1586,1663,2210 'ks':611,618,625,641,647,659,663,678,682,696,714,726,737,752,767,776,794,804,815,823,832,924,946,954,972,992,999,1004 'ksctl':579,1099,1105,1113,1120,1171 'kubeconfig':1156 'kubectl':161,231,485,492,505,514,529,572,933,934,981,982,1012,1017,1030,1036,1046,1049,1055,1059,1066,1074,1081,1088,1092,1150,1160,1202,1271,1275,1282,1335,1339,1344,1348,1399,1403,1407,1411,1522,1526,1532,1541,1542,1549,1551,1559,1632,1636,1642,1751,1755,1759,1777,1781,1785,1789,1811,1815,1819,1850,1854,1861,1867,1879,1886,1893,1902,1911,1929,1936,1940,1994,1998,2002,2027,2031,2052,2056,2060,2068,2075,2079,2113,2268,2272,2278 'kubernet':575,1020,1148,1154 'kubespher':2,4,42,54,482,560,581,589,599,613,667,670,848,902,1029,1133,1136,1142,1165,1172,1185,1265 'kubesphere-fluid':1 'kubesphere.io':490,1280 'kubesphere.io/extension-ref=fluid':489,1279 'l':488,1278,2006 'lasttimestamp':1921 'level':1447 'lifecycl':52 'like':1948,2008,2037,2183 'limit':876 'line':584 'list':720,734,748,941,1102,1139 'load':1696,1701,1744 'loadmetadata':1684,1685,2160 'local':684,688,691,694 'log':69,1894,1903,1985,1988 'low':1456,1457 'make':675 'manag':6,44,565,850,1354,1415,1565,2189 'manifest':72,81,303,1200,1229,1239,2106,2122,2133,2150,2154 'manual':203 'map':467,478,542 'marketplac':1187 'master':2010 'match':2088 'mediumtyp':345,1448,1449,1485 'mem':352,1486,1497 'member':724,1152 'metadata':917,1438,1588,1665,2212 'metadata.name':733,744,759,840,843 'method':685,701 'migrat':1802 'minim':1237 'minimum':1735 'miss':1924 'mount':74,101,921,1375,1382,2024,2039 'mountpoint':320,922,1364,1389,2218,2219 'multi':568,604,784,1305 'multi-clust':567,603,783,1304 'must':307,314,321,332,339,1708,1715 'n':508,517,532,985,1108,1123,1406,1410,1414,1529,1535,1545,1554,1562,1639,1645,1758,1762,1822,1889,1895,1904,1914,1997,2001,2005,2030,2034,2055,2059,2063,2071,2078,2275,2281 'name':171,183,200,306,868,918,923,1326,1374,1439,1440,1589,1590,1595,1617,1666,1667,1672,1677,2213,2214,2252 'namespac':313,857,861,866,919,945,1441,1442,1591,1592,1668,1669,1678,1683,2215,2216 'namespace/alluxioruntimes':976,1008 'namespace/datasets':928,950,958,996 'namespace/thinruntimes':1003 'need':1310 'network':2044 'never':295 'next':1974,2187 'node':2021,2081 'number':873,1474 'o':496,512,525,1053,1352,1530,1563,1640,1858,1865,1871,2035,2276 'oauth':639 'omit':212 'one':1736,2120 'oper':110,383,386,577,900,905,939,960,988,1022,1197,1397,1520,1630,1749,2266 'option':213,586,1009,1096 'order':166 'output':154,193,402,449,460,545,2086 'p':1555 'page':871,872,879 'paramet':284,304,870 'partial':1958 'password':626,627,657,662,664 'patch':1550,1552 'path':356,689,716,845,1214,1450,1451,1498,1500,1694,1697,1699,1734,1739,1742,1809,2243 'pattern':2087 'per':878 'perform':31,84 'playbook':1843 'plus':2102,2123 'pod':67,98,507,531,1083,1821,1875,1881,1888,2004,2013 'pods/logs/crds':22 'point':2040 'post':646,926 'pre':1268,1767,2099 'pre-check':1267,1766,2098 'precis':474 'prefer':152,224,543,1198 'procedur':167 'profil':2221,2251 'profilenam':2222 'prove':475 'provid':291,379,552,1388,1710,1717 'purpos':2117 'put':967,974 'queri':63,556,570,598,717,787,869,1132,1145,1151 'quick':1168 'quota':338,1452,1453,1509 'r':672,731,742,757,837 'ratio':1518 're':1977 're-check':1976 'read':938,1380 'read-on':1379 'readi':1225,1992 'readon':1378 'ready-to-us':1224 'recommend':1130 'reject':1961 'relat':1174 'releas':2007 'relev':2112 'remind':1835 'remov':280,1804 'repeat':1194 'replica':91,331,971,986,1444,1445,1546,1557 'request':112,271,401,2096,2108,2119,2130,2145,2152,2163,2169,2178 'requir':127,616,628,1656,1674,1680,1686,1691,1705,1707,1714,1721,1731,1740,2157 'resourc':199,234,395,576,606,786,855,862,867,891,1021,1065,1069,1149,1155,1289,1795,1840,1943,2022,2085 'resourcequota':2077 'respons':150 'review':1196 'right':374 'rule':151,305 'runtim':37,90,223,433,436,500,523,811,962,968,977,1064,1112,1465,1537,1773,1990,2142,2149,2250 's3':328,372,380,1367 'safe':1973,2186 'say':445,454,2139 'scale':36,89,961,964,983,1536,1539,1543,1547,2065,2074,2162,2164 'scenario':1129 'schedul':2015 'scope':105,384,390,403 'secret':669,1597,1624,2258 'secretnam':1598,2224 'section':551 'see':1330,1359,1469,1610,2236 'select':839 'server':1965 'short':165 'singl':1301 'single-clust':1300 'size':1511 'skill':7,47,1222 'skill-kubesphere-fluid' 'slow':2066 'someth':210 'sort':881,886,1919 'sort-bi':1918 'sortbi':885 'sourc':1366 'source-kubesphere' 'spec':920,970,1443,1556,1593,1670,2217 'spec.dataset.name':1706 'spec.dataset.namespace':1713 'spec.loadmetadata':1720 'spec.mountpoint':2240 'spec.mounts':1363,1373,1377 'spec.replicas':1473 'spec.target':1730,1738 'spec.template.spec.containers':527 'spec.thin.credentials':2257 'spec.thin.profile':2248 'spec.tieredstore.levels':1482 'spec.volume.name':1614 'spec.volume.secret':1622 'specif':389,821,952 'specifi':355,366,371,1729 'ssd':1487 'standalon':1419,1569,2193 'startup':1967 'state':1980 'status':19,65,558,601,775,1045,1119,1135,1169,2107 'status.conditions':1860 'step':1209,2188 'still':1774,1796 'storag':123,1245,1483,1499,1510,2017,2242 'stuck':2050 'substitut':296,1395 'support':890 'system':511,520,535,1825,1892,1898,1907,1917 'tail':1900,1909 'target':1675,1681,1690,2161 'targetpath':1698 'task':149 'tell':1798 'templat':1315,1334,1357,1418,1568,1650,2192 'thin':814,2220,2249 'thinruntim':30,80,265,424,426,897,1251,2190,2191,2199,2203,2211,2232,2274,2280 'thinruntimes.data.fluid.io':1791,1935 'three':553 'tier':122,1244,2016 'tieredstor':1446 'token':640,642,674,695,697,705 'tool':585 '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' 'treat':142 'troubleshoot':39,96,1842,2177 'type':652,656,709,892 'uf':2047 'ui':1173,1188,1213 'unhealthi':1877 'uninstal':92,270,1763,1765,1808,2168 'unknown':244 'unless':204,396,2136 'updat':25,959,969,978 'upgrad':57 'upgradestrategi':202 'url':615 'usabl':1972 'use':8,45,201,252,287,308,315,322,333,340,346,357,368,375,588,592,635,932,980,1011,1016,1098,1126,1227,1316,1368,1390,1478,1490,1501,1512,1618,1625,2244,2253,2261 'user':10,115,126,130,189,206,247,294,309,316,323,334,341,347,358,370,378,397,400,444,453,471,1175,1191,1205,1309,1320,1372,1387,1421,1459,1479,1491,1502,1513,1571,1600,1619,1626,1712,1719,1726,1800,1831,2093,2137,2195,2226,2245,2254,2262 'usernam':619,621,658,660 'valu':218,290,299,311,318,325,336,343,349,360,1370,1481,1493,1504,1515,1621,1628,2247,2256,2264 'variabl':596,608 'verif':2167,2172 'verifi':168,1558,2125 'version':174,229,242,466,477,484,504,751,1026,1163,1294,1328,1652 'via':901,966,1540,1548 'view':20 'volum':1594,1616 'w':1343 'want':249,1207,1832 'warm':35,88,1256,1648 'warn':272 'watermark':1517 'whether':1296,1307,1770 'wide':513,1531,1564,1641,2277 'without':125 'worker':1477,2012 'wrong':367 'x':645,700 'yaml':156,158,160,302,408,413,420,427,437,442,452,465,497,1054,1218,1353,1430,1431,1580,1581,1658,1866,1872,2036,2204,2205","prices":[{"id":"db7159a3-d97a-436d-8b98-1027ebbebdd8","listingId":"33296765-5acc-4a41-8cfd-9b3abe8c25c6","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:49.851Z"}],"sources":[{"listingId":"33296765-5acc-4a41-8cfd-9b3abe8c25c6","source":"github","sourceId":"kubesphere/kubesphere/kubesphere-fluid","sourceUrl":"https://github.com/kubesphere/kubesphere/tree/master/skills/kubesphere-fluid","isPrimary":false,"firstSeenAt":"2026-04-20T07:11:49.851Z","lastSeenAt":"2026-04-22T06:52:45.228Z"}],"details":{"listingId":"33296765-5acc-4a41-8cfd-9b3abe8c25c6","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"kubesphere","slug":"kubesphere-fluid","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":"f4e6a59ecfc543ac91498a1b0fdc46ff26d3c090","skill_md_path":"skills/kubesphere-fluid/SKILL.md","default_branch":"master","skill_tree_url":"https://github.com/kubesphere/kubesphere/tree/master/skills/kubesphere-fluid"},"layout":"multi","source":"github","category":"kubesphere","frontmatter":{"name":"kubesphere-fluid","description":"KubeSphere Fluid management Skill. Use when user asks to install or enable Fluid, check Fluid status, view Fluid pods/logs/CRDs, create or update Dataset, AlluxioRuntime, JuiceFSRuntime, or ThinRuntime, perform DataLoad or cache warming, scale runtime, or troubleshoot Fluid issues in KubeSphere."},"skills_sh_url":"https://skills.sh/kubesphere/kubesphere/kubesphere-fluid"},"updatedAt":"2026-04-22T06:52:45.228Z"}}