Install any skill in seconds. Free to start, no credit card required.
Get Started Free →KubeSphere extension management Skill. Use when user requests to install, configure, upgrade, uninstall extensions, or query extension info/troubleshoot issues. Includes extension discovery, dependency management, install configuration, version management.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 196% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 63% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 61% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 93% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 468% | 0% |
┌──────────────────────┐ ┌─────────────────────────────┐ ┌──────────────────────┐ ┌──────────────────────┐
│ Extension Museum │ │ Extension │ │ InstallPlan │ │ Deployed Extension │
│ (Local Chart Repo) │───────▶│ - description │───────▶│ - extension │───────▶│ │
│ │ (sync) │ - status │ │ - config │ │ Namespace: <target> │
└──────────────────────┘ │ ExtensionVersion │ │ - clusterScheduling │ │ └── Pods, Services │
│ - version │ └──────────────────────┘ └──────────────────────┘
│ - chartURL │ │ (reconcile)
│ - externalDependencies │ |
│ - installationMode │ |
└─────────────────────────────┘ ▼
┌──────────────────────┐
│ Job │
│ helm-upgrade-<name> │
│ - helm install/ │
│ upgrade/uninstall │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Pod │
│ (Helm execution) │
└──────────────────────┘Metadata and status for available/installed extensions.
| Field | Description | Example | |-------|-------------|---------| | metadata.name | Extension name | whizard-monitoring | | spec.versions[] | Available versions | [1.2.0, 1.2.1] | | status.state | Current state | Installed/Upgrading/Failed | | status.enabled | Enabled status | true/false | | status.installedVersion | Installed version | 1.2.1 |
Version-specific details: Helm chart location, dependencies, requirements.
| Field | Description | Example | |-------|-------------|---------| | metadata.name | Version resource name | whizard-monitoring-1.2.1 | | spec.version | Version number | 1.2.1 | | spec.chartURL | Helm chart URL | https://extensions-museum.../whizard-monitoring-1.2.1.tgz | | spec.namespace | Target namespace | kubesphere-monitoring-system | | spec.installationMode | Install mode | Multicluster/HostOnly | | spec.ksVersion | Required KS version | >=4.2.0-0 | | spec.externalDependencies[] | Required extensions | [name: whizard-telemetry] |
Trigger for install/upgrade/uninstall. Creates Helm Job to deploy components.
Spec: | Field | Type | Required | Description | |-------|------|----------|-------------| | metadata.name | string | ✅ | Must match spec.extension.name | | spec.extension.name | string | ✅ | Extension name | | spec.extension.version | string | ✅ | Exact version to install | | spec.enabled | bool | ✅ | Enable extension | | spec.upgradeStrategy | string | ✅ | Use Manual for production | | spec.config | string | ❌ | Custom YAML config | | spec.clusterScheduling | object | ❌ | Multi-cluster config (Multicluster mode only) |
Status: | Field | Description | |-------|-------------| | status.state | Installed/Installing/Upgrading/Failed | | status.jobName | Helm upgrade Job name | | status.targetNamespace | Target namespace | | status.conditions[] | Status conditions with messages |
⚠️ CRITICAL:
metadata.name = spec.extension.nameenabled: true and upgradeStrategy: Manualbash# List all extensions kubectl get extensions # List by category for c in $(kubectl get categories.kubesphere.io -o jsonpath='{.items[*].metadata.name}'); do exts=$(kubectl get extensions.kubesphere.io -l kubesphere.io/category="$c" -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}') [ -n "$exts" ] && echo -e "$c:\n$exts" done # List extension available versions kubectl get extensionversions.kubesphere.io -l kubesphere.io/extension-ref=<extension-name> # View extension details kubectl describe extension <extension-name> kubectl describe extensionversion.kubesphere.io <extension-name>-<version>
⚠️ CRITICAL:
metadata.name MUST match spec.extension.namerecommendedVersion or latest)bash# Verify the extension and version exist before creating InstallPlan kubectl get extension <extension-name> kubectl get extensionversion <extension-name>-<version> # Get version details (check installationMode, namespace, dependencies, etc.) kubectl describe extension <extension-name> kubectl describe extensionversion <extension-name>-<version>
Based on the extension details above:
installationMode=Multicluster, specify clusters in placement.clustersyamlapiVersion: kubesphere.io/v1alpha1 kind: InstallPlan metadata: name: <extension-name> spec: # clusterScheduling: # Only for Multicluster extensions. # placement: # clusters: # - <cluster-name> # overrides: # host: |- # # Extension agent configuration: custom settings for the extension agent in the current cluster, with higher priority than the global extension configuration. # # custom: # key: override-value # config: | ## Omit if user didn't request custom config # # Custom configuration for the extension, serving as a global extension configuration that can override default settings. # # custom: # key: override-value enabled: true extension: name: <extension-name> # CRITICAL: MUST match metadata.name version: <version> # CRITICAL: Use EXACT version requested upgradeStrategy: Manual
bashkubectl apply -f installplan-<extension-name>.yaml
bash# Watch status kubectl get installplan <extension-name> -w # Get details kubectl describe installplan <extension-name> # Verify extension status kubectl describe extension <extension-name> # Check deployed resources NAMESPACE=$(kubectl get installplan <extension-name> -o jsonpath='{.status.targetNamespace}') kubectl get pods,svc -n $NAMESPACE
⚠️ CRITICAL: InstallPlan metadata.name MUST match spec.extension.name
spec.config or spec.clusterScheduling (version unchanged)spec.extension.version to new versionbash# Get current InstallPlan as template kubectl get installplan <extension-name> -o yaml > installplan-<extension-name>.yaml # Edit and apply: # - For Update: modify spec.config or spec.clusterScheduling # - For Upgrade: change spec.extension.version to target version kubectl apply -f installplan-<extension-name>.yaml kubectl get installplan <extension-name> -w
bashkubectl delete installplan <extension-name>
spec.config) unless custom values are neededupgradeStrategy: Manual for productionrecommendedVersion or latest)Symptoms: InstallPlan stuck in "Installing"/"Upgrading", Job pod shows Error/Failed
Diagnosis:
bash# Step 1: Check InstallPlan status kubectl describe installplan <extension-name> # Check status.state and status.conditions # Step 2: Check Job pod logs NAMESPACE=$(kubectl get installplan <extension-name> -o jsonpath='{.status.targetNamespace}') JOB_NAME=$(kubectl get installplan <extension-name> -o jsonpath='{.status.jobName}') kubectl logs -n $NAMESPACE -l job-name=$JOB_NAME --tail=100 # Step 3: For Multicluster - check cluster scheduling status kubectl get installplan <extension-name> -o jsonpath='{.status.clusterSchedulingStatuses}' | jq . # Check each cluster's state and conditions, then get job name and logs
Solutions:
Symptoms: Job pod completed successfully, but InstallPlan stays in "Installing"/"Upgrading"
Diagnosis:
bash# Check if job completed NAMESPACE=$(kubectl get installplan <extension-name> -o jsonpath='{.status.targetNamespace}') JOB_NAME=$(kubectl get installplan <extension-name> -o jsonpath='{.status.jobName}') kubectl get pods -n $NAMESPACE -l job-name=$JOB_NAME # Check job completion time vs current time kubectl get job $JOB_NAME -n $NAMESPACE -o jsonpath='{.status.completionTime}'
Cause: Clock skew between nodes (NTP not synchronized)
Solution: Check and synchronize NTP across all cluster nodes
| Action | Command | |--------|---------| | List all extensions | kubectl get extensions | | List extension versions | kubectl get extensionversions.kubesphere.io -l kubesphere.io/extension-ref=<name> | | View extension details | kubectl describe extension <name> | | View version details | kubectl describe extensionversion <name>-<version> | | Install extension | kubectl apply -f installplan-<name>.yaml | | Track installation | kubectl get installplan <name> -w | | Upgrade extension | Modify version in InstallPlan, then kubectl apply | | Uninstall extension | kubectl delete installplan <name> |
kubesphere-core - Core platform architecturekubesphere-cluster-management - Cluster operationsOther measured skills in the registry, with their headline benchmark lift.