{"id":"2412fba0-cfd2-429c-a6bb-8e86e9febe9f","shortId":"ZtRZLC","kind":"skill","title":"kubesphere-openkruise","tagline":"KubeSphere OpenKruise management Skill. Use when user asks to install or enable OpenKruise, check OpenKruise status, view kruise pods/logs/CRDs, create or update SidecarSet, manage sidecar injection, create or update CloneSet, perform in-place update or batch rollout, uninstall o","description":"# Skill: kubesphere-openkruise\n\n# KubeSphere OpenKruise Management\n\nUse this skill for the full OpenKruise lifecycle in KubeSphere:\n\n- Install or upgrade the OpenKruise extension through `InstallPlan`\n- Query extension status, CRDs, Pods, and logs\n- Generate `SidecarSet` manifests for sidecar injection and rolling updates\n- Generate `CloneSet` manifests for advanced stateless workloads, in-place updates, and batch rollout\n- Uninstall the OpenKruise extension\n- Troubleshoot failed Pods, missing CRDs, and webhook problems\n\nOut of scope by default:\n\n- Advanced OpenKruise CRDs not requested by the user, such as `BroadcastJob`, `NodeImage`, `UnitedDeployment`, or `AdvancedPodAutoscaler`\n- Deep chart-value design without cluster evidence\n\nIf the user explicitly asks for those CRDs, acknowledge that they are OpenKruise capabilities but treat them as a follow-up task instead of assuming they belong in the default workflow.\n\n## Response Rules\n\n- Prefer executable output: `InstallPlan` YAML, `SidecarSet` YAML, `CloneSet` 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 `openkruise` only if the user context or cluster output does not expose a different resource name.\n- In this KubeSphere environment, the observed mapping is:\n  - KubeSphere extension version `1.0.3`\n  - OpenKruise runtime version `1.4.0`\n- Distinguish two version concepts before generating `InstallPlan`:\n  - KubeSphere extension version: used by `spec.extension.version`\n  - OpenKruise runtime version: the controller or component version seen in Pods or docs\n- For this environment, if the user asks to install the current OpenKruise plugin and does not provide another extension version, prefer `spec.extension.version: 1.0.3`.\n- If the user only provides the OpenKruise runtime version, first ask them to confirm the matching KubeSphere extension version.\n- Never invent a version. If the version is missing, first show how to list versions and ask the user to confirm one.\n- `InstallPlan.metadata.name` MUST equal `InstallPlan.spec.extension.name`.\n- `InstallPlan` is cluster-scoped in KubeSphere. Do not add a namespace to `kubectl get|describe|delete installplan`.\n- Use `upgradeStrategy: Manual` unless the user explicitly asks for something else.\n- Omit optional fields instead of guessing values.\n- Before generating `SidecarSet` or `CloneSet`, prefer checking the installed API versions:\n\n```bash\nkubectl api-resources --api-group apps.kruise.io\n```\n\n- If the cluster version is unknown and the user only wants an example, prefer:\n  - `SidecarSet`: `apps.kruise.io/v1alpha1`\n  - `CloneSet`: `apps.kruise.io/v1alpha1`\n- For uninstall requests, warn that deleting CRDs or CR instances can remove application configuration. Do not suggest deleting CRDs unless the user explicitly asks for full cleanup.\n\n## Version Mapping Discovery\n\nTreat the `1.0.3 -> 1.4.0` mapping as environment evidence, not a universal rule. When the user asks for precision, prove it first:\n\n```bash\n# Discover KubeSphere extension version\nkubectl get extensionversions.kubesphere.io -l kubesphere.io/extension-ref=openkruise\nkubectl get extensionversion openkruise-1.0.3 -o yaml\n\n# Discover deployed runtime image or controller version\nkubectl get pods -n kruise-system -o wide\nkubectl get deploy -n kruise-system kruise-manager -o jsonpath='{.spec.template.spec.containers[*].image}'\nkubectl describe pod -n kruise-system <kruise-manager-pod>\n```\n\nIf these commands disagree with the assumed mapping, prefer cluster output over the baked-in default.\n\n## Discovery Commands\n\nThis section provides two approaches for querying OpenKruise 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\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 kruise\n\n# List available extension versions\nks_api GET /kapis/kubesphere.io/v1alpha1/extensionversions | jq -r '.items[].metadata.name' | grep -i kruise\n\n# Get OpenKruise extension details\nks_api GET /kapis/kubesphere.io/v1alpha1/extensions/openkruise | jq\n\n# Get cluster connection status (for member clusters)\nks_api GET /kapis/cluster.kubesphere.io/v1alpha1/clusters/member-4/status | jq '.conditions'\n```\n\n### Multi-Cluster Resource Query (host cluster)\n\n```bash\n# Get pods in host cluster\nks_api GET /clusters/host/api/v1/namespaces/kruise-system/pods | jq -r '.items[].metadata.name'\n\n# Get SidecarSets in host cluster (cluster-wide)\nks_api GET /clusters/host/kapis/apps.kruise.io/v1alpha1/users/admin/sidecarsets | jq -r '.items[].metadata.name'\n\n# Get CloneSets in host cluster (cluster-wide)\nks_api GET /clusters/host/kapis/apps.kruise.io/v1alpha1/users/admin/clonesets | jq -r '.items[].metadata.name'\n\n# Get SidecarSets in specific namespace\nks_api GET /clusters/host/kapis/apps.kruise.io/v1alpha1/namespaces/default/sidecarsets | jq -r '.items[].metadata.name'\n\n# Get namespaces where a SidecarSet is applied\nks_api GET /clusters/host/kapis/apps.kruise.io/v1alpha1/users/admin/sidecarsetname/side1 | jq -r '.items[].metadata.name'\n\n# Get specific SidecarSet details\nks_api GET /clusters/host/kapis/apps.kruise.io/v1alpha1/users/admin/sidecarsets/side1 | jq\n\n# Get CRDs in host cluster\nks_api GET /clusters/host/apis/apiextensions.k8s.io/v1/customresourcedefinitions | jq -r '.items[] | select(.metadata.name | contains(\"kruise\")) | .metadata.name'\n```\n\n### Multi-Cluster Resource Query (member cluster)\n\n```bash\n# Get pods in member cluster\nks_api GET /clusters/member-4/api/v1/namespaces/kruise-system/pods | jq -r '.items[].metadata.name'\n\n# Get SidecarSets in member cluster (cluster-wide)\nks_api GET /clusters/member-4/kapis/apps.kruise.io/v1alpha1/users/admin/sidecarsets | jq -r '.items[].metadata.name'\n\n# Get CloneSets in member cluster (cluster-wide)\nks_api GET /clusters/member-4/kapis/apps.kruise.io/v1alpha1/users/admin/clonesets | jq -r '.items[].metadata.name'\n\n# Get CRDs in member cluster\nks_api GET /clusters/member-4/apis/apiextensions.k8s.io/v1/customresourcedefinitions | jq -r '.items[] | select(.metadata.name | contains(\"kruise\")) | .metadata.name'\n```\n\n**API Path Format:**\n\n```\n# For KubeSphere extension management:\n/kapis/kubesphere.io/v1alpha1/extensions\n/kapis/cluster.kubesphere.io/v1alpha1/clusters\n\n# For cluster-wide OpenKruise resources (SidecarSet, CloneSet):\n/clusters/{cluster}/kapis/apps.kruise.io/v1alpha1/users/admin/{resources}\n/clusters/{cluster}/kapis/apps.kruise.io/v1alpha1/users/admin/{resources}/{name}\n/clusters/{cluster}/kapis/apps.kruise.io/v1alpha1/users/admin/sidecarsetname/{sidecarsetName}\n\n/clusters/{cluster}/api/v1/namespaces/{namespace}/{resources}\n/clusters/{cluster}/apis/apiextensions.k8s.io/v1/customresourcedefinitions\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### Option 2: Using kubectl (Direct Cluster Access)\n\nUse `kubectl` for direct Kubernetes resource operations on the **host cluster**.\n\n```bash\n# Extension and version discovery in KubeSphere\nkubectl get extensions.kubesphere.io | grep -i kruise\nkubectl get extensionversions.kubesphere.io | grep -i kruise\nkubectl get extensionversions.kubesphere.io -l kubesphere.io/extension-ref=openkruise\n\n# InstallPlan and extension status\nkubectl get installplans.kubesphere.io\nkubectl get installplan openkruise -o yaml\nkubectl describe extension openkruise\nkubectl describe extensionversion openkruise-<version>\n\n# OpenKruise runtime resources\nkubectl api-resources --api-group apps.kruise.io\nkubectl get crd | grep -E 'clonesets.apps.kruise.io|sidecarsets.apps.kruise.io'\nkubectl get pods -A | grep -i kruise\nkubectl get sidecarsets.apps.kruise.io -A\nkubectl get clonesets.apps.kruise.io -A\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 pods -n kruise-system\nkubectl get sidecarsets.apps.kruise.io -A\nkubectl get clonesets.apps.kruise.io -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 InstallPlan/SidecarSet/CloneSet | kubectl |\n| Get extension version info | KubeSphere API (curl) |\n\n## Install OpenKruise in KubeSphere\n\n### 1. Pre-check\n\n```bash\nkubectl get extension openkruise\nkubectl get extensionversions.kubesphere.io -l kubesphere.io/extension-ref=openkruise\nkubectl describe extensionversion openkruise-<exact-version>\n```\n\nCheck:\n\n- The extension resource really 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- Whether the user is giving an extension version or only the OpenKruise runtime version\n- In this environment, remember that extension `1.0.3` maps to OpenKruise runtime `1.4.0`\n\n### 2. InstallPlan Template\n\nUse this when the user has already confirmed the extension name and version.\n\n**Note:** \n- InstallPlan is a KubeSphere CRD resource, **created and managed only in the host cluster** (not in member clusters)\n- `clusterScheduling.placement.clusters` specifies which clusters the extension **agent components** should be installed to (host, member-4, etc.)\n\n```yaml\napiVersion: kubesphere.io/v1alpha1\nkind: InstallPlan\nmetadata:\n  name: openkruise\nspec:\n  enabled: true\n  extension:\n    name: openkruise\n    version: <exact-version>\n  upgradeStrategy: Manual\n  # config: |\n  #   featureGates: \"PreDownloadImageForInPlaceUpdate=true\"\n  clusterScheduling:\n    placement:\n      clusters:\n      - host\n      - member-4\n    # overrides:\n    #   host: |-\n    #     featureGates: \"PreDownloadImageForInPlaceUpdate=true\"\n```\n\n**Fields:**\n- `clusterScheduling.placement.clusters`: List of clusters to install the extension **agent** (e.g., `host`, `member-4`). The OpenKruise agent will be deployed to these clusters.\n- `clusterScheduling.overrides`: Cluster-specific config overrides (optional)\n\nApply and verify:\n\n```bash\nkubectl apply -f installplan-openkruise.yaml\nkubectl get installplan openkruise -w\nkubectl describe installplan openkruise\nkubectl get extension openkruise -o yaml\n```\n\n**Check installation status per cluster:**\n\n```bash\nkubectl get installplan openkruise -o jsonpath='{.status.clusterSchedulingStatuses}'\n```\n\n### 2.1 Config Handling\n\n`spec.config` is a YAML string block, not a nested object. Only include it when the user asks for non-default settings.\n\n```yaml\nspec:\n  config: |\n    featureGates: \"PreDownloadImageForInPlaceUpdate=true\"\n```\n\nRules:\n\n- The content under `config: |` must itself be valid YAML\n- Do not invent config keys without evidence from chart values, extension documentation, or user-provided requirements\n- If config keys are unknown, prefer default install and show discovery commands first\n\nUseful discovery commands:\n\n```bash\nkubectl describe extensionversion openkruise-<extension-version>\nkubectl get extensionversion openkruise-<extension-version> -o yaml\n```\n\n### 3. Status and Logs After Install\n\n```bash\nTARGET_NS=$(kubectl get installplan openkruise -o jsonpath='{.status.targetNamespace}')\nJOB_NAME=$(kubectl get installplan openkruise -o jsonpath='{.status.jobName}')\n\nkubectl get pods -n \"${TARGET_NS:-kruise-system}\"\nkubectl logs -n \"${TARGET_NS:-kruise-system}\" -l job-name=\"$JOB_NAME\" --tail=200\nkubectl logs -n \"${TARGET_NS:-kruise-system}\" deploy/kruise-manager --tail=200\nkubectl get crd | grep -E 'clonesets.apps.kruise.io|sidecarsets.apps.kruise.io'\n```\n\n## Manage SidecarSet\n\nUse `SidecarSet` when the user wants cluster-level sidecar injection and separate lifecycle management for sidecars.\n\n### SidecarSet Template\n\n```yaml\napiVersion: apps.kruise.io/v1alpha1\nkind: SidecarSet\nmetadata:\n  name: log-agent\nspec:\n  selector:\n    matchLabels:\n      app: demo\n  namespaceSelector:\n    matchLabels:\n      kubernetes.io/metadata.name: demo-project\n  containers:\n  - name: log-agent\n    image: fluent/fluent-bit:2.2\n    imagePullPolicy: IfNotPresent\n    env:\n    - name: LOG_LEVEL\n      value: info\n    volumeMounts:\n    - name: varlog\n      mountPath: /var/log\n    podInjectPolicy: BeforeAppContainer\n  volumes:\n  - name: varlog\n    hostPath:\n      path: /var/log\n  updateStrategy:\n    type: RollingUpdate\n    maxUnavailable: 1\n```\n\nCommon operations:\n\n```bash\nkubectl apply -f sidecarset.yaml\nkubectl get sidecarset log-agent -o yaml\nkubectl describe sidecarset log-agent\nkubectl delete sidecarset log-agent\n```\n\nVerify injection:\n\n```bash\nkubectl get pods -n demo-project -l app=demo\nkubectl get pod <pod-name> -n demo-project -o jsonpath='{.spec.containers[*].name}'\nkubectl describe pod <pod-name> -n demo-project\n```\n\nSidecarSet troubleshooting checks:\n\n- `spec.selector` matches the workload Pod labels\n- `namespaceSelector` matches the target namespace labels\n- The sidecar image can be pulled in target namespaces\n- `kruise-manager` webhook is healthy\n\n## Manage CloneSet\n\nUse `CloneSet` when the user wants an enhanced workload with in-place image updates, batch rollout, or richer update controls than `Deployment`.\n\n### CloneSet Template\n\n```yaml\napiVersion: apps.kruise.io/v1alpha1\nkind: CloneSet\nmetadata:\n  name: sample-app\n  namespace: demo-project\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: sample-app\n  template:\n    metadata:\n      labels:\n        app: sample-app\n    spec:\n      containers:\n      - name: app\n        image: nginx:1.25\n        imagePullPolicy: IfNotPresent\n        ports:\n        - containerPort: 80\n  updateStrategy:\n    type: InPlaceIfPossible\n    partition: 0%\n    maxUnavailable: 1\n```\n\nCommon operations:\n\n```bash\nkubectl apply -f cloneset.yaml\nkubectl get cloneset sample-app -n demo-project\nkubectl describe cloneset sample-app -n demo-project\nkubectl delete cloneset sample-app -n demo-project\n```\n\nVerify rollout state:\n\n```bash\nkubectl get pods -n demo-project -l app=sample-app -o wide\nkubectl get events -n demo-project --sort-by=.lastTimestamp\n```\n\n### In-place Update Guidance\n\nWhen the user asks for \"in-place update\" or an in-place image update:\n\n1. Keep `spec.updateStrategy.type: InPlaceIfPossible`\n2. Change the container image in `spec.template.spec.containers`\n3. Re-apply the manifest\n\n```bash\nkubectl get cloneset sample-app -n demo-project -o yaml > cloneset.yaml\n# edit image and, if needed, updateStrategy.partition\nkubectl apply -f cloneset.yaml\nkubectl describe cloneset sample-app -n demo-project\nkubectl get pods -n demo-project -l app=sample-app -o wide\n```\n\n### Batch Rollout Guidance\n\nUse `partition` to keep part of the Pods on the old revision during a rollout.\n\n- `partition: 100%` means keep all replicas on the old revision\n- `partition: 50%` means only half of the replicas move to the new revision\n- `partition: 0%` means finish the rollout\n\nExample rollout sequence:\n\n1. Change image to the new version and set `partition: 100%`\n2. Lower to `partition: 50%`\n3. Lower to `partition: 0%`\n\nAt each step, verify Pod revision movement:\n\n```bash\nkubectl get cloneset sample-app -n demo-project -o yaml\nkubectl get pods -n demo-project -l app=sample-app -o wide\n```\n\n### CloneSet Troubleshooting Checks\n\n- If Pods are recreated instead of in-place updated, confirm `updateStrategy.type` is `InPlaceIfPossible` or `InPlaceOnly`\n- Some field changes still require Pod recreation\n- If CPU and memory are changed together with image updates in unsupported environments, split the change into separate steps\n- Check the controller and workload events with:\n\n```bash\nkubectl describe cloneset sample-app -n demo-project\nkubectl get pods -n demo-project -l app=sample-app -o wide\nkubectl get events -n demo-project --sort-by=.lastTimestamp\n```\n\n## Uninstall OpenKruise\n\n### Uninstall Pre-check\n\nCheck whether workloads still depend on OpenKruise resources before uninstalling the extension:\n\n```bash\nkubectl get sidecarsets.apps.kruise.io -A\nkubectl get clonesets.apps.kruise.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 openkruise\nkubectl get installplan openkruise\nkubectl get pods -n kruise-system | grep -i kruise\n```\n\nIf the user wants full cleanup, remind them to handle application resources first:\n\n- Delete or migrate `SidecarSet` and `CloneSet` resources that are still in use\n- Confirm whether application teams still depend on OpenKruise behavior\n- Only discuss CRD removal after the user explicitly confirms full cleanup\n\n## Troubleshooting Playbook\n\n### 1. InstallPlan or extension failed\n\n```bash\nkubectl describe installplan openkruise\nkubectl get installplan openkruise -o jsonpath='{.status.conditions}'\nkubectl get extension openkruise -o yaml\nkubectl get extensionversion openkruise-<version> -o yaml\n```\n\n### 2. Kruise Pods are unhealthy\n\n```bash\nkubectl get pods -A | grep -i kruise\nkubectl describe pod -n kruise-system <pod-name>\nkubectl logs -n kruise-system deploy/kruise-manager --tail=200\nkubectl get events -n kruise-system --sort-by=.lastTimestamp\n```\n\n### 3. CRD missing or not established\n\n```bash\nkubectl get crd clonesets.apps.kruise.io sidecarsets.apps.kruise.io\nkubectl describe crd clonesets.apps.kruise.io\nkubectl describe crd sidecarsets.apps.kruise.io\nkubectl api-resources --api-group apps.kruise.io\n```\n\nLikely causes:\n\n- OpenKruise extension installation did not finish\n- CRDs were partially created or rejected by the API server\n- Webhook or controller startup failed before CRDs became usable\n\nSafe next actions:\n\n- Re-check `InstallPlan` state and conditions\n- Inspect install Job logs and `kruise-manager` logs\n- Avoid creating workload CRs until the CRDs are established\n\n### 4. Webhook failure\n\n```bash\nkubectl get mutatingwebhookconfigurations,validatingwebhookconfigurations | grep -i kruise\nkubectl describe mutatingwebhookconfiguration | grep -i -A5 kruise\nkubectl describe validatingwebhookconfiguration | grep -i -A5 kruise\nkubectl logs -n kruise-system deploy/kruise-manager --tail=200\n```\n\nLikely causes:\n\n- `kruise-manager` Pod is not Ready\n- Webhook service endpoints are missing\n- TLS certificate has expired or does not match the service DNS name\n- The API server cannot reach the webhook service\n- The target Pod or namespace does not match `SidecarSet` selectors\n\nSafe next actions:\n\n- Check `kruise-manager` Pod readiness and recent restarts\n- Check Service and Endpoints for the webhook target\n- Inspect recent TLS or x509 errors in controller logs\n- Verify the target namespace labels and Pod labels match the `SidecarSet`\n\n### 5. Sidecar not injected\n\n```bash\nkubectl get sidecarset -A\nkubectl get sidecarset <name> -o yaml\nkubectl get pod <pod-name> -n <namespace> -o yaml\nkubectl get namespace <namespace> --show-labels\n```\n\n### 6. CloneSet rollout stuck\n\n```bash\nkubectl describe cloneset <name> -n <namespace>\nkubectl get pods -n <namespace> -l app=<label> -o wide\nkubectl get events -n <namespace> --sort-by=.lastTimestamp\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- `SidecarSet` request: one executable manifest plus apply, verify, and delete commands\n- `CloneSet` request: one executable manifest plus rollout guidance for in-place update or partition-based rollout\n- Uninstall request: delete command, verification commands, and cleanup cautions\n- Troubleshooting request: diagnosis commands first, then likely causes, then safe next steps","tags":["kubesphere","openkruise","agent-skills","cloud-native","cncf","devops","ebpf","hacktoberfest","kubernetes","llm","multi-cluster","multi-tenancy"],"capabilities":["skill","source-kubesphere","skill-kubesphere-openkruise","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-openkruise","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,603 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.376Z","embedding":null,"createdAt":"2026-04-20T07:11:51.503Z","updatedAt":"2026-04-22T06:52:45.376Z","lastSeenAt":"2026-04-22T06:52:45.376Z","tsv":"'-4':1126,1348,1378,1397 '/.bashrc':611 '/api/v1/namespaces':972 '/apis/apiextensions.k8s.io/v1/customresourcedefinitions':977 '/clusters':957,961,966,970,975 '/clusters/host/api/v1/namespaces/kruise-system/pods':779 '/clusters/host/apis/apiextensions.k8s.io/v1/customresourcedefinitions':861 '/clusters/host/kapis/apps.kruise.io/v1alpha1/namespaces/default/sidecarsets':824 '/clusters/host/kapis/apps.kruise.io/v1alpha1/users/admin/clonesets':811 '/clusters/host/kapis/apps.kruise.io/v1alpha1/users/admin/sidecarsetname/side1':839 '/clusters/host/kapis/apps.kruise.io/v1alpha1/users/admin/sidecarsets':795 '/clusters/host/kapis/apps.kruise.io/v1alpha1/users/admin/sidecarsets/side1':851 '/clusters/member-4/api/v1/namespaces/kruise-system/pods':886 '/clusters/member-4/apis/apiextensions.k8s.io/v1/customresourcedefinitions':931 '/clusters/member-4/kapis/apps.kruise.io/v1alpha1/users/admin/clonesets':918 '/clusters/member-4/kapis/apps.kruise.io/v1alpha1/users/admin/sidecarsets':902 '/extension-ref=openkruise':472,1042,1240 '/kapis/apps.kruise.io/v1alpha1/users/admin':959,963 '/kapis/apps.kruise.io/v1alpha1/users/admin/sidecarsetname':968 '/kapis/cluster.kubesphere.io/v1alpha1/clusters':707,948 '/kapis/cluster.kubesphere.io/v1alpha1/clusters/member-4/status':760 '/kapis/kubesphere.io/v1alpha1/extensions':718,947 '/kapis/kubesphere.io/v1alpha1/extensions/openkruise':748 '/kapis/kubesphere.io/v1alpha1/extensionversions':733 '/metadata.name:':1645 '/tmp':1142,1151 '/v1alpha1':405,409,1354,1628,1802 '/var/log':1669,1677 '0':1846,2043,2071 '1':545,565,664,984,1225,1682,1848,1936,2051,2304 '1.0.3':233,286,442,477,1293 '1.25':1836 '1.4.0':237,443,1298 '100':2020,2061 '2':557,668,1000,1299,1940,2062,2333 '2.1':1450 '2.2':1656 '200':1584,1595,2361,2489 '3':671,1098,1535,1816,1947,2067,2373 '4':2456 '5':2574 '50':2030,2066 '6':2600 '80':1841 'a5':2472,2479 'access':651,1005 'acknowledg':147 'action':2430,2536 'add':341,609 'admin':598,601,639 'advanc':89,116 'advancedpodautoscal':130 'agent':1340,1393,1400,1635,1653,1695,1703,1709 'alreadi':1308 'anoth':281 'answer':2629 'api':377,382,385,547,568,654,657,661,705,716,731,746,758,777,793,809,822,837,849,859,884,900,916,929,940,1069,1072,1190,1196,1219,2395,2398,2417,2517 'api-group':384,1071,2397 'api-resourc':381,1068,2394 'apivers':1351,1625,1799 'app':1639,1721,1809,1819,1822,1826,1829,1833,1861,1871,1881,1898,1901,1959,1982,1995,1998,2085,2100,2103,2164,2177,2180,2614 'appli':835,1414,1419,1687,1853,1950,1974,2663 'applic':422,2267,2284 'application/json':688 'application/x-www-form-urlencoded':631 'approach':540,1181,1184 'apps.kruise.io':387,404,408,1074,1627,1801,2400 'apps.kruise.io/v1alpha1':403,407,1626,1800 'ascend':989 'ask':11,143,270,297,322,357,433,455,1469,1923 'assum':164,523 'author':681 'avail':727,1193 'avoid':2447 'back':1171 'bake':531 'baked-in':530 'base':2684 'base64':1140 'bash':379,461,587,615,697,770,877,1017,1116,1229,1417,1442,1524,1541,1685,1712,1851,1889,1953,2079,2158,2212,2238,2309,2338,2379,2459,2578,2604 'batch':40,97,1788,2001 'bearer':682 'becam':2426 'beforeappcontain':1671 'behavior':2290 'belong':166 'block':1458 'bodi':659,670,689,691 'brief':2636 'broadcastjob':126 'call':655 'cannot':2519 'capabl':152 'caus':2402,2491,2702 'caution':2694 'certif':2505 'chang':1941,2052,2127,2137,2147 'chart':133,1499 'chart-valu':132 'check':17,374,1228,1245,1437,1743,2108,2151,2199,2200,2433,2537,2546,2639 'cleanup':436,2262,2301,2693 'client':643,646 'cloneset':33,86,180,372,406,801,908,956,1772,1774,1796,1804,1858,1868,1878,1956,1979,2082,2106,2161,2275,2601,2607,2668 'cloneset.yaml':1855,1966,1976 'clonesets.apps.kruise.io':1080,1095,1168,1601,2219,2383,2388 'cluster':137,213,335,390,526,555,583,700,703,751,756,765,769,775,788,790,804,806,857,872,876,882,895,897,911,913,927,951,958,962,967,971,976,1004,1016,1101,1108,1114,1122,1123,1132,1143,1148,1152,1174,1194,1200,1206,1262,1266,1329,1333,1337,1375,1388,1406,1409,1441,1612 'cluster-level':1611 'cluster-scop':334 'cluster-specif':1408 'cluster-wid':789,805,896,912,950 'cluster.cluster.kubesphere.io':1131 'clusterschedul':1373 'clusterscheduling.overrides':1407 'clusterscheduling.placement.clusters':1334,1385 'command':183,519,535,696,1519,1523,2640,2653,2667,2689,2691,2698 'common':1683,1849 'complet':2643 'compon':257,1341 'concept':241 'condit':762,2437 'config':1272,1369,1411,1451,1477,1485,1494,1509 'configur':423 'confirm':300,326,1309,2119,2282,2299 'connect':752 'consol':592 'contain':867,937,1649,1831,1943 'containerport':1840 'content':629,686,1483 'content-typ':628,685 'context':211 'control':255,485,1793,2153,2421,2561 'cpu':2133 'cr':418 'crd':1077,1320,1598,2293,2374,2382,2387,2391 'crds':72,107,118,146,416,428,854,924,2409,2425,2453 'creat':23,30,1322,2412,2448 'create/apply':1211 'createtim':998 'crs':2450 'curl':548,569,571,621,676,1191,1197,1220 'current':274 'custom':1271 'd':632,690,1141 'deep':131 'default':115,169,201,533,600,983,992,1473,1514,2235 'delet':348,415,427,1705,1877,2240,2270,2666,2688 'demo':1640,1647,1718,1722,1728,1739,1812,1864,1874,1884,1895,1909,1962,1985,1992,2088,2097,2167,2174,2188 'demo-project':1646,1717,1727,1738,1811,1863,1873,1883,1894,1908,1961,1984,1991,2087,2096,2166,2173,2187 'depend':2204,2287 'deploy':481,498,1403,1795 'deploy/kruise-manager':1593,2359,2487 'describ':347,511,1057,1061,1242,1428,1526,1699,1735,1867,1978,2160,2311,2347,2386,2390,2468,2475,2606 'design':135 'detail':744,847 'diagnosi':2697 'differ':219 'direct':560,614,991,1003,1009 'disagre':520 'discov':462,480 'discoveri':439,534,1021,1518,1522 'discuss':2292 'distinguish':238 'dns':2514 'doc':263 'document':1502 'e':1079,1600 'e.g':997,1394 'echo':1137 'edit':1967 'els':360 'enabl':15,1361 'encod':1128,1139 'endpoint':2501,2549 'enhanc':1780 'env':1659 'environ':225,266,446,573,585,1289,2144 'equal':330 'error':2559 'establish':2378,2455 'etc':1349 'event':1906,2156,2185,2364,2619 'evid':138,447,1497 'exact':194,1252 'exampl':400,2048 'execut':174,2660,2671 'exist':1250,1255,2225 'expir':2507 'explicit':142,356,432,2298 'export':588,595,602,1149,1175 'expos':217 'extens':66,70,102,191,203,231,246,282,304,464,550,578,714,728,743,945,1018,1045,1058,1187,1215,1232,1247,1253,1258,1279,1292,1311,1339,1363,1392,1433,1501,2211,2307,2323,2404 'extensions.kubesphere.io':1026 'extensionvers':475,1062,1243,1527,1531,2329 'extensionversions.kubesphere.io':468,1032,1038,1236 'extract':1104,1109,1210 'f':1420,1688,1854,1975 'fail':104,2308,2423 'failur':2458 'fals':993 'featureg':1370,1381,1478 'field':363,996,1384,2126 'final':199 'finish':2045,2408 'first':296,315,460,1520,2234,2269,2699 'fluent/fluent-bit':1655 'follow':159 'follow-up':158 'format':942 'full':56,435,2261,2300 'function':608 'generat':76,85,197,243,369 'get':346,467,474,488,497,616,665,706,717,732,741,747,750,759,771,778,784,794,800,810,816,823,829,838,844,850,853,860,878,885,891,901,907,917,923,930,1025,1031,1037,1048,1051,1076,1083,1090,1094,1117,1130,1156,1163,1167,1214,1231,1235,1423,1432,1444,1530,1545,1554,1561,1597,1691,1714,1724,1857,1891,1905,1955,1988,2081,2093,2170,2184,2214,2218,2244,2248,2315,2322,2328,2340,2363,2381,2461,2580,2584,2589,2595,2610,2618 'get/post/put/delete':658 'give':1277 'grant':633 'grep':723,738,1027,1033,1078,1086,1599,2254,2343,2464,2470,2477 'group':386,1073,2399,2654 'guess':366 'guidanc':1919,2003,2675 'h':627,680,684 'half':2033 'handl':1452,2266 'healthi':1770 'helper':607 'host':590,693,701,768,774,787,803,856,1015,1173,1199,1328,1346,1376,1380,1395 'host/oauth/token':626 'hostpath':1675 'id':644 'ifnotpres':1658,1838 'imag':483,509,1654,1758,1786,1834,1934,1944,1968,2053,2140 'imagepullpolici':1657,1837 'in-plac':35,92,1783,1915,1925,1931,2115,2677 'includ':1464 'info':1217,1664 'inject':29,81,1615,1711,2577 'inplaceifposs':1844,1939,2122 'inplaceon':2124 'inspect':2438,2554 'instal':13,61,272,376,713,1221,1344,1390,1438,1515,1540,2405,2439,2634 'installplan':68,176,200,244,332,349,1043,1052,1300,1316,1356,1424,1429,1445,1546,1555,2241,2245,2305,2312,2316,2434,2644 'installplan-openkruise.yaml':1421 'installplan.metadata.name':328 'installplan.spec.extension.name':331 'installplan/sidecarset/cloneset':1212 'installplans.kubesphere.io':1049 'instanc':419 'instead':162,364,2113 'intent':2633 'invent':307,1493 'item':710,721,736,782,798,814,827,842,864,889,905,921,934,986 'job':1551,1579,1581,2440 'job-nam':1578 'jq':649,708,719,734,749,761,780,796,812,825,840,852,862,887,903,919,932 'jsonpath':507,1135,1448,1549,1558,1731,2319 'keep':1937,2007,2022 'key':1495,1510 'kind':1355,1629,1803 'kruis':21,492,501,504,515,725,740,868,938,1029,1035,1088,1160,1567,1575,1591,1766,2252,2256,2334,2345,2351,2357,2367,2444,2466,2473,2480,2485,2493,2539 'kruise-manag':503,1765,2443,2492,2538 'kruise-system':491,500,514,1159,1566,1574,1590,2251,2350,2356,2366,2484 'ks':589,596,603,619,625,637,641,656,660,674,692,704,715,730,745,757,776,792,808,821,836,848,858,883,899,915,928 'kubeconfig':1103,1111,1118,1127,1138,1145,1150,1154,1176,1209 'kubectl':182,345,380,466,473,487,496,510,558,1002,1007,1024,1030,1036,1047,1050,1056,1060,1067,1075,1082,1089,1093,1129,1155,1162,1166,1203,1213,1230,1234,1241,1418,1422,1427,1431,1443,1525,1529,1544,1553,1560,1569,1585,1596,1686,1690,1698,1704,1713,1723,1734,1852,1856,1866,1876,1890,1904,1954,1973,1977,1987,2080,2092,2159,2169,2183,2213,2217,2239,2243,2247,2310,2314,2321,2327,2339,2346,2353,2362,2380,2385,2389,2393,2460,2467,2474,2481,2579,2583,2588,2594,2605,2609,2617,2652 'kubernet':561,1010,1201,1207 'kubernetes.io':1644 'kubernetes.io/metadata.name:':1643 'kubespher':2,4,46,48,60,224,230,245,303,338,463,546,567,577,591,645,648,944,1023,1186,1189,1195,1218,1224,1319 'kubesphere-openkruis':1,45 'kubesphere.io':471,1041,1239,1353 'kubesphere.io/extension-ref=openkruise':470,1040,1238 'kubesphere.io/v1alpha1':1352 'l':469,1039,1237,1577,1720,1897,1994,2099,2176,2613 'label':1749,1755,1825,2567,2570,2599 'lasttimestamp':1914,2193,2372,2624 'level':1613,1662 'lifecycl':58,1618 'like':2401,2490,2701 'limit':985 'list':319,698,712,726,1192,1386 'local':662,666,669,672 'log':75,1538,1570,1586,1634,1652,1661,1694,1702,1708,2354,2441,2446,2482,2562 'log-ag':1633,1651,1693,1701,1707 'lower':2063,2068 'make':653 'manag':6,27,50,505,551,946,1324,1603,1619,1767,1771,2445,2494,2540 'manifest':78,87,1952,2645,2661,2672 'manual':352,1368 'map':228,438,444,524,1294 'match':302,1745,1751,2511,2531,2571,2627 'matchlabel':1638,1642,1818 'maxunavail':1681,1847 'mean':2021,2031,2044 'member':702,755,875,881,894,910,926,1107,1121,1125,1147,1205,1332,1347,1377,1396 'memori':2135 'metadata':1357,1631,1805,1824 'metadata.name':711,722,737,783,799,815,828,843,866,869,890,906,922,936,939 'method':663,679 'migrat':2230,2272 'miss':106,314,2375,2503 'mountpath':1668 'move':2037 'movement':2078 'multi':554,582,764,871,1100,1265 'multi-clust':553,581,763,870,1099,1264 'must':329,1486 'mutatingwebhookconfigur':2462,2469 'n':490,499,513,1158,1563,1571,1587,1716,1726,1737,1862,1872,1882,1893,1907,1960,1983,1990,2086,2095,2165,2172,2186,2250,2349,2355,2365,2483,2591,2608,2612,2620 'name':192,204,221,965,1124,1133,1144,1153,1312,1358,1364,1552,1580,1582,1632,1650,1660,1666,1673,1733,1806,1832,2515 'namespac':343,820,830,973,1754,1764,1810,2528,2566,2596 'namespaceselector':1641,1750 'need':1270,1971 'nest':1461 'never':306 'new':2040,2056 'next':2429,2535,2705 'nginx':1835 'nodeimag':127 'non':1472 'non-default':1471 'note':1315 'ns':1543,1565,1573,1589 'number':982 'o':43,478,494,506,1054,1134,1435,1447,1533,1548,1557,1696,1730,1902,1964,1999,2090,2104,2181,2318,2325,2331,2586,2592,2615 'oauth':617 'object':1462 'observ':227 'old':2014,2027 'omit':361 'one':327,2659,2670 'openkruis':3,5,16,18,47,49,57,65,101,117,151,206,234,251,275,293,476,543,742,953,1053,1059,1063,1064,1222,1233,1244,1284,1296,1359,1365,1399,1425,1430,1434,1446,1528,1532,1547,1556,2195,2206,2242,2246,2289,2313,2317,2324,2330,2403 'oper':563,1012,1684,1850 'option':362,564,999,1097,1413 'order':187 'output':175,214,527,2625 'overrid':1379,1412 'page':980,981,988 'paramet':979 'part':2008 'partial':2411 'partit':1845,2005,2019,2029,2042,2060,2065,2070,2683 'partition-bas':2682 'password':604,605,635,640,642 'path':667,694,941,1676,2237 'pattern':2626 'per':987,1440 'perform':34 'place':37,94,1785,1917,1927,1933,2117,2679 'placement':1374 'playbook':2303 'plugin':276 'plus':2641,2662,2673 'pod':73,105,261,489,512,772,879,1084,1157,1562,1715,1725,1736,1748,1892,1989,2011,2076,2094,2110,2130,2171,2249,2335,2341,2348,2495,2526,2541,2569,2590,2611 'podinjectpolici':1670 'pods/logs/crds':22 'port':1839 'post':624 'pre':1227,2198,2638 'pre-check':1226,2197,2637 'precis':457 'predownloadimageforinplaceupd':1371,1382,1479 'prefer':173,284,373,401,525,1513 'problem':110 'procedur':188 'project':1648,1719,1729,1740,1813,1865,1875,1885,1896,1910,1963,1986,1993,2089,2098,2168,2175,2189 'prove':458 'provid':280,291,538,1506 'pull':1761 'purpos':2656 'queri':69,542,556,576,695,767,874,978,1102,1106,1146,1185,1198,1204 'r':650,709,720,735,781,797,813,826,841,863,888,904,920,933 're':1949,2432 're-appli':1948 're-check':2431 'reach':2520 'readi':2498,2542 'realli':1249 'recent':2544,2555 'recommend':1183 'recreat':2112,2131 'reject':2414 'relev':2651 'rememb':1290 'remind':2263 'remov':421,2232,2294 'replica':1815,2024,2036 'request':120,412,2635,2647,2658,2669,2687,2696 'requir':594,606,1507,2129 'resourc':220,383,562,584,766,873,954,960,964,974,1011,1066,1070,1115,1202,1208,1248,1321,2207,2223,2268,2276,2396 'respons':171 'restart':2545 'revis':2015,2028,2041,2077 'richer':1791 'roll':83 'rollingupd':1680 'rollout':41,98,1789,1887,2002,2018,2047,2049,2602,2674,2685 'rule':172,451,1481 'runtim':235,252,294,482,1065,1285,1297 'safe':2428,2534,2704 'sampl':1808,1821,1828,1860,1870,1880,1900,1958,1981,1997,2084,2102,2163,2179 'sample-app':1807,1820,1827,1859,1869,1879,1899,1957,1980,1996,2083,2101,2162,2178 'scenario':1182 'scope':113,336 'secret':647 'section':537 'seen':259 'select':865,935 'selector':1637,1817,2533 'separ':1617,2149 'sequenc':2050 'server':2418,2518 'servic':2500,2513,2523,2547 'set':1474,2059 'short':186 'show':316,1517,2598 'show-label':2597 'sidecar':28,80,1614,1621,1757,2575 'sidecarset':26,77,178,370,402,785,817,833,846,892,955,1604,1606,1622,1630,1692,1700,1706,1741,2273,2532,2573,2581,2585,2657 'sidecarset.yaml':1689 'sidecarsetnam':969 'sidecarsets.apps.kruise.io':1081,1091,1164,1602,2215,2384,2392 'singl':1261 'single-clust':1260 'skill':7,44,53 'skill-kubesphere-openkruise' 'someth':359 'sort':990,995,1912,2191,2370,2622 'sort-bi':1911,2190,2369,2621 'sortbi':994 'source-kubesphere' 'spec':1360,1476,1636,1814,1830 'spec.config':1453 'spec.connection.kubeconfig':1136 'spec.containers':1732 'spec.extension.version':250,285 'spec.selector':1744 'spec.template.spec.containers':508,1946 'spec.updatestrategy.type':1938 'specif':819,845,1410 'specifi':1335 'split':2145 'startup':2422 'state':1888,2435 'stateless':90 'status':19,71,544,579,753,1046,1188,1439,1536,2646 'status.clusterschedulingstatuses':1449 'status.conditions':2320 'status.jobname':1559 'status.targetnamespace':1550 'step':2074,2150,2706 'still':2128,2203,2224,2279,2286 'string':1457 'stuck':2603 'suggest':426 'switch':1170 'system':493,502,516,1161,1568,1576,1592,2253,2352,2358,2368,2486 'tail':1583,1594,2360,2488 'target':1542,1564,1572,1588,1753,1763,2525,2553,2565 'task':161 'team':2285 'tell':2226 'templat':1301,1623,1797,1823 'tls':2504,2556 'togeth':2138 'token':618,620,652,673,675,683 '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':154,440 'troubleshoot':103,1742,2107,2302,2695 'true':1362,1372,1383,1480 'two':239,539 'type':630,634,687,1679,1843 'unhealthi':2337 'uninstal':42,99,411,2194,2196,2209,2236,2686 'uniteddeploy':128 'univers':450 'unknown':393,1512 'unless':353,429 'unsupport':2143 'updat':25,32,38,84,95,1787,1792,1918,1928,1935,2118,2141,2680 'updatestrategi':1678,1842 'updatestrategy.partition':1972 'updatestrategy.type':2120 'upgrad':63 'upgradestrategi':351,1367 'url':593 'usabl':2427 'use':8,51,248,350,566,570,613,1001,1006,1179,1302,1521,1605,1773,2004,2281 'user':10,123,141,210,269,289,324,355,396,431,454,1269,1275,1306,1468,1505,1609,1777,1922,2228,2259,2297,2632 'user-provid':1504 'usernam':597,599,636,638 'valid':1489 'validatingwebhookconfigur':2463,2476 'valu':134,367,1500,1663 'variabl':574,586 'varlog':1667,1674 'verif':2690 'verifi':189,1416,1710,1886,2075,2563,2664 'version':195,232,236,240,247,253,258,283,295,305,309,312,320,378,391,437,465,486,729,1020,1216,1254,1280,1286,1314,1366,2057 'view':20 'volum':1672 'volumemount':1665 'w':1426 'want':398,1610,1778,2260 'warn':413 'webhook':109,1768,2419,2457,2499,2522,2552 'whether':1256,1267,1273,2201,2283 'wide':495,791,807,898,914,952,1903,2000,2105,2182,2616 'without':136,1496 'workflow':170 'workload':91,1747,1781,2155,2202,2449 'x':623,678 'x509':2558 'yaml':177,179,181,479,1055,1350,1436,1456,1475,1490,1534,1624,1697,1798,1965,2091,2326,2332,2587,2593","prices":[{"id":"049947e4-255c-4da4-90b6-d481706969dc","listingId":"2412fba0-cfd2-429c-a6bb-8e86e9febe9f","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:51.503Z"}],"sources":[{"listingId":"2412fba0-cfd2-429c-a6bb-8e86e9febe9f","source":"github","sourceId":"kubesphere/kubesphere/kubesphere-openkruise","sourceUrl":"https://github.com/kubesphere/kubesphere/tree/master/skills/kubesphere-openkruise","isPrimary":false,"firstSeenAt":"2026-04-20T07:11:51.503Z","lastSeenAt":"2026-04-22T06:52:45.376Z"}],"details":{"listingId":"2412fba0-cfd2-429c-a6bb-8e86e9febe9f","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"kubesphere","slug":"kubesphere-openkruise","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":"bea04d1b61fbca95b65e45ec8d72b418c08a2cf3","skill_md_path":"skills/kubesphere-openkruise/SKILL.md","default_branch":"master","skill_tree_url":"https://github.com/kubesphere/kubesphere/tree/master/skills/kubesphere-openkruise"},"layout":"multi","source":"github","category":"kubesphere","frontmatter":{"name":"kubesphere-openkruise","description":"KubeSphere OpenKruise management Skill. Use when user asks to install or enable OpenKruise, check OpenKruise status, view kruise pods/logs/CRDs, create or update SidecarSet, manage sidecar injection, create or update CloneSet, perform in-place update or batch rollout, uninstall or remove OpenKruise, or troubleshoot Kruise Pod, CRD, and webhook issues in KubeSphere."},"skills_sh_url":"https://skills.sh/kubesphere/kubesphere/kubesphere-openkruise"},"updatedAt":"2026-04-22T06:52:45.376Z"}}