{"id":"d797d735-c3d0-4773-9056-a78e3d1f0582","shortId":"pcCdgU","kind":"skill","title":"opensearch","tagline":"Use when installing or configuring the OpenSearch extension for KubeSphere, which provides distributed search and analytics engine for storing logs, events, auditing, and notification history","description":"# OpenSearch Extension\n\n## Overview\n\nOpenSearch is a distributed search and analytics engine built into the KubeSphere WizTelemetry Observability Platform. It is used to store, search, and analyze observability data including logs, auditing events, K8s events, and notification history.\n\n## When to Use\n\n- Installing OpenSearch cluster for KubeSphere observability extensions\n- Configuring OpenSearch storage for logging, events, auditing, and notifications\n- Managing OpenSearch Dashboard and Curator components\n\n## Components\n\n| Component | Description | Default |\n|-----------|-------------|---------|\n| opensearch-master | Master node for cluster coordination | 1 replica |\n| opensearch-data | Data nodes for storing indices | 3 replicas |\n| opensearch-dashboards | Web UI for visualizing data | disabled |\n| opensearch-curator | Scheduled task to clean old indices | enabled |\n\n## Prerequisites\n\n### Check Installation Status\n\n```bash\n# Check if OpenSearch is installed\nkubectl get installplan opensearch -o jsonpath='{.spec.enabled}'\n\n# Get installed version\nkubectl get extension opensearch -o jsonpath='{.status.installedVersion}'\n\n# Get target clusters\nkubectl get installplan opensearch -o jsonpath='{.spec.clusterScheduling.placement.clusters}'\n```\n\nReturns:\n- `\"true\"` - installed and enabled\n- `\"false\"` - installed but disabled\n- Empty/Error - not installed\n\n### Get Available Clusters\n\n```bash\nkubectl get clusters -o jsonpath='{.items[*].metadata.name}'\n```\n\n### Confirm Target Clusters (MUST DO)\n\n**⚠️ CRITICAL: Do Not guess.**\n\n**⚠️ CRITICAL: DO NOT proceed until target clusters are determined.**\n\n- If user **explicitly specified** target clusters in the request → Use those clusters directly\n- If user **did NOT specify** target clusters → You MUST ask user to confirm which clusters to deploy to\n\n**Ask user (if not specified):**\n```\nAvailable clusters: host, dev\nWhich clusters do you want to deploy OpenSearch to?\n```\n\n### Get Latest Version\n\n**MUST do this to get the latest version:**\n\n```bash\nkubectl get extensionversions -l kubesphere.io/extension-ref=opensearch -o jsonpath='{range .items[*]}{.spec.version}{\"\\n\"}{end}' | sort -V | tail -1\n```\n\n## Installation\n\n**⚠️ CRITICAL: InstallPlan `metadata.name` MUST be `opensearch`. DO NOT use any other name.**\n\nUse the latest version obtained from \"Get Latest Version\" step.\n\n### Minimal Installation\n\n```yaml\napiVersion: kubesphere.io/v1alpha1\nkind: InstallPlan\nmetadata:\n  name: opensearch\nspec:\n  extension:\n    name: opensearch\n    version: <VERSION>  # From Get Latest Version step\n  enabled: true\n  upgradeStrategy: Manual\n  clusterScheduling:\n    placement:\n      clusters:\n        - host\n```\n\n### With OpenSearch Dashboard\n\n```yaml\napiVersion: kubesphere.io/v1alpha1\nkind: InstallPlan\nmetadata:\n  name: opensearch\nspec:\n  extension:\n    name: opensearch\n    version: <VERSION>  # From Get Latest Version step\n  enabled: true\n  upgradeStrategy: Manual\n  config: |\n    opensearch-dashboards:\n      enabled: true\n  clusterScheduling:\n    placement:\n      clusters:\n        - host\n```\n\n### Disable Curator\n\n```yaml\napiVersion: kubesphere.io/v1alpha1\nkind: InstallPlan\nmetadata:\n  name: opensearch\nspec:\n  extension:\n    name: opensearch\n    version: <VERSION>  # From Get Latest Version step\n  enabled: true\n  upgradeStrategy: Manual\n  config: |\n    opensearch-curator:\n      enabled: false\n  clusterScheduling:\n    placement:\n      clusters:\n        - host\n```\n\n## Configuration\n\n### Parameters\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `opensearch-master.replicas` | int | 1 | Number of master nodes |\n| `opensearch-master.opensearchJavaOpts` | string | \"-Xmx512M -Xms512M\" | JVM options |\n| `opensearch-master.resources` | object | - | Resource limits/requests |\n| `opensearch-data.replicas` | int | 3 | Number of data nodes |\n| `opensearch-data.opensearchJavaOpts` | string | \"-Xmx1536M -Xms1536M\" | JVM options |\n| `opensearch-data.resources` | object | - | Resource limits/requests |\n| `opensearch-data.service.type` | string | NodePort | Service type |\n| `opensearch-data.service.nodePort` | int | 30920 | NodePort for external access |\n| `opensearch-dashboards.enabled` | bool | false | Enable OpenSearch Dashboards |\n| `opensearch-curator.enabled` | bool | true | Enable index cleanup job |\n\n### Resource Configuration\n\n```yaml\nopensearch-master:\n  replicas: 1\n  opensearchJavaOpts: \"-Xmx512M -Xms512M\"\n  resources:\n    requests:\n      cpu: \"100m\"\n      memory: \"512Mi\"\n    limits:\n      cpu: \"500m\"\n      memory: \"1Gi\"\n\nopensearch-data:\n  replicas: 3\n  opensearchJavaOpts: \"-Xmx2048M -Xms2048M\"\n  resources:\n    requests:\n      cpu: \"200m\"\n      memory: \"2Gi\"\n    limits:\n      cpu: \"2000m\"\n      memory: \"4Gi\"\n  persistence:\n    size: 50Gi\n    storageClass: \"local-volume\"\n```\n\n## Operations\n\n### Access Target Cluster\n\n> ⚠️ **CRITICAL**: You MUST access the target cluster BEFORE checking status or running any kubectl commands below.\n> \n> ❌ **DO NOT** run kubectl commands without using the target cluster kubeconfig\n> ✅ **MUST** run: `kubectl --kubeconfig=/tmp/<cluster>-kubeconfig ...`\n\n**Checklist (must complete before any operation):**\n\n- [ ] 1. Find target clusters:\n  ```bash\n  kubectl get installplan opensearch -o jsonpath='{.spec.clusterScheduling.placement.clusters}'\n  ```\n\n- [ ] 2. Get cluster kubeconfig:\n  ```bash\n  kubectl get cluster <cluster-name> -o jsonpath='{.spec.connection.kubeconfig}' | base64 -d > /tmp/<cluster-name>-kubeconfig\n  ```\n\n- [ ] 3. Use this kubeconfig for ALL subsequent commands\n\n> **Note**: Replace `<cluster-name>` with the actual cluster name. Use `spec.connection.kubeconfig` for imported clusters.\n\n### Check Status\n\n> ⚠️ **REQUIRED**: Complete [Access Target Cluster](#access-target-cluster) checklist FIRST\n\n```bash\n# Extension status\nkubectl --kubeconfig=/tmp/<cluster>-kubeconfig get extension opensearch\n\n# InstallPlan status\nkubectl --kubeconfig=/tmp/<cluster>-kubeconfig get installplan opensearch\n```\n\n### Get Pods\n\n> ⚠️ **REQUIRED**: Complete [Access Target Cluster](#access-target-cluster) checklist FIRST\n\n```bash\n# All pods\nkubectl --kubeconfig=/tmp/<cluster>-kubeconfig get pods -n kubesphere-logging-system -l app.kubernetes.io/instance=opensearch-agent\n\n# By component\nkubectl --kubeconfig=/tmp/<cluster>-kubeconfig get pods -n kubesphere-logging-system -l app.kubernetes.io/name=opensearch-master\nkubectl --kubeconfig=/tmp/<cluster>-kubeconfig get pods -n kubesphere-logging-system -l app.kubernetes.io/name=opensearch-data\n\n# Status\nkubectl --kubeconfig=/tmp/<cluster>-kubeconfig get pods -n kubesphere-logging-system -l app.kubernetes.io/instance=opensearch-agent -o wide\n```\n\n### External Endpoint\n\n> ⚠️ **REQUIRED**: Complete [Access Target Cluster](#access-target-cluster) checklist FIRST\n\nOpenSearch uses NodePort (default: 30920) to expose service externally.\n\n```bash\n# Get NodePort service\nkubectl --kubeconfig=/tmp/<cluster>-kubeconfig get svc -n kubesphere-logging-system opensearch-cluster-data\n\n# Get node IP\nkubectl --kubeconfig=/tmp/<cluster>-kubeconfig get nodes -o jsonpath='{.items[0].status.addresses[?(@.type==\"InternalIP\")].address}'\n\n# Access OpenSearch externally\n# URL: https://<node-ip>:30920\ncurl -k -u admin:admin \"https://<node-ip>:30920/_cluster/health\"\n```\n\n---\n\n### Output Contract (For Other Skills)\n\n> ⚠️ **This section defines what information this skill provides to other skills**\n\nWhen OpenSearch is successfully deployed, other skills can retrieve:\n\n| Field | Example Value | Description |\n|-------|---------------|-------------|\n| `endpoint` | `https://127.0.0.1:30920` | Full URL for Vector sink |\n| `nodePort` | `30920` | NodePort number |\n| `nodeIP` | `127.0.0.1` | Node internal IP |\n| `auth.user` | `admin` | Default username |\n| `auth.password` | `admin` | Default password |\n\n**How other skills should get this info:**\n\n1. Find which cluster OpenSearch was deployed to:\n   ```bash\n   kubectl get installplan opensearch -o jsonpath='{.spec.clusterScheduling.placement.clusters}'\n   ```\n\n2. Get cluster kubeconfig:\n   ```bash\n   kubectl get cluster <cluster-name> -o jsonpath='{.spec.connection.kubeconfig}' | base64 -d > /tmp/<cluster-name>-kubeconfig\n   ```\n\n3. Get OpenSearch endpoint:\n   ```bash\n   # NodePort\n   NODE_PORT=$(kubectl --kubeconfig=/tmp/<cluster>-kubeconfig get svc -n kubesphere-logging-system opensearch-cluster-data -o jsonpath='{.spec.ports[?(@.port==9200)].nodePort}')\n   \n   # Node IP\n   NODE_IP=$(kubectl --kubeconfig=/tmp/<cluster>-kubeconfig get nodes -o jsonpath='{.items[0].status.addresses[?(@.type==\"InternalIP\")].address}')\n   \n   # Full endpoint\n   echo \"https://${NODE_IP}:${NODE_PORT}\"\n   ```\n\n### Update Configuration\n\n```yaml\napiVersion: kubesphere.io/v1alpha1\nkind: InstallPlan\nmetadata:\n  name: opensearch\nspec:\n  extension:\n    name: opensearch\n    version: <VERSION>  # From Get Latest Version step\n  enabled: true\n  upgradeStrategy: Manual\n  config: |\n    opensearch-data:\n      replicas: 5\n      opensearchJavaOpts: \"-Xmx4096M -Xms4096M\"\n    opensearch-dashboards:\n      enabled: true\n  clusterScheduling:\n    placement:\n      clusters:\n        - host\n```\n\n### Uninstall\n\n**Uninstall from all clusters:**\n\n```bash\nkubectl delete installplan opensearch\n```\n\n**Uninstall from specific cluster:**\n\nTo remove OpenSearch from a specific cluster, update the InstallPlan by removing that cluster from `clusterScheduling.placement.clusters`:\n\n```yaml\napiVersion: kubesphere.io/v1alpha1\nkind: InstallPlan\nmetadata:\n  name: opensearch\nspec:\n  extension:\n    name: opensearch\n    version: <VERSION>\n  enabled: true\n  upgradeStrategy: Manual\n  config: |\n    opensearch-data:\n      replicas: 3\n  clusterScheduling:\n    placement:\n      clusters:\n        - <REMAINING_CLUSTERS>  # Remove the cluster you want to uninstall from\n```\n\n## Troubleshooting\n\n> ⚠️ **REQUIRED**: Complete [Access Target Cluster](#access-target-cluster) checklist FIRST\n\n### Pod Issues\n\n```bash\nkubectl --kubeconfig=/tmp/<cluster>-kubeconfig get pods -n kubesphere-logging-system -l app.kubernetes.io/instance=opensearch-agent\n\n# Pod events\nkubectl --kubeconfig=/tmp/<cluster>-kubeconfig describe pods -n kubesphere-logging-system -l app.kubernetes.io/instance=opensearch-agent\n```\n\n### OpenSearch Health\n\n> ⚠️ **REQUIRED**: Complete [Access Target Cluster](#access-target-cluster) checklist FIRST\n\n```bash\n# Cluster health\ncurl -k -u admin:admin \"https://<node-ip>:30920/_cluster/health\"\n\n# List indices\ncurl -k -u admin:admin \"https://<node-ip>:30920/_cat/indices\"\n```\n\n### Common Issues\n\n| Issue | Solution |\n|-------|----------|\n| Pods not starting | Check node resources and storage availability |\n| Out of memory | Increase JVM heap size |\n| Cannot connect | Check NodePort firewall rules |\n| Index storage full | Increase PVC size or enable Curator |\n\n## Notes\n\n1. **Resource Requirements**: OpenSearch requires significant CPU and memory\n2. **Storage**: Data nodes use persistent storage\n3. **NodePort**: Default port is 30920\n4. **Multi-cluster**: Can be deployed to specific clusters","tags":["opensearch","kubesphere","agent-skills","cloud-native","cncf","devops","ebpf","hacktoberfest","kubernetes","llm","multi-cluster","multi-tenancy"],"capabilities":["skill","source-kubesphere","skill-opensearch","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/opensearch","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 · 16920 github stars · SKILL.md body (11,044 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-05-03T00:52:30.873Z","embedding":null,"createdAt":"2026-04-18T21:53:18.539Z","updatedAt":"2026-05-03T00:52:30.873Z","lastSeenAt":"2026-05-03T00:52:30.873Z","tsv":"'-1':288 '/extension-ref=opensearch':277 '/instance=opensearch-agent':680,728,1085,1102 '/name=opensearch-data':712 '/name=opensearch-master':697 '/tmp':563,596,636,645,668,685,700,716,759,777,890,902,927,1073,1090 '/v1alpha1':318,349,385,952,1024 '0':784,934 '1':101,423,487,571,861,1169 '100m':494 '127.0.0.1':830,842 '1gi':501 '2':583,877,1178 '2000m':518 '200m':513 '2gi':515 '3':111,440,506,598,892,1044,1185 '30920':462,748,793,831,838,1190 '30920/_cat/indices':1132 '30920/_cluster/health':799,1124 '4':1191 '4gi':520 '5':977 '500m':499 '50gi':523 '512mi':496 '9200':919 'access':466,529,535,622,626,654,658,735,739,789,1059,1063,1107,1111 'access-target-clust':625,657,738,1062,1110 'actual':610 'address':788,938 'admin':797,798,847,851,1122,1123,1130,1131 'analyt':17,36 'analyz':52 'apivers':315,346,382,949,1021 'app.kubernetes.io':679,696,711,727,1084,1101 'app.kubernetes.io/instance=opensearch-agent':678,726,1083,1100 'app.kubernetes.io/name=opensearch-data':710 'app.kubernetes.io/name=opensearch-master':695 'ask':232,241 'audit':23,57,80 'auth.password':850 'auth.user':846 'avail':182,246,1145 'base64':594,888 'bash':136,184,270,575,587,631,663,753,869,881,896,995,1070,1116 'bool':468,474 'built':38 'cannot':1153 'check':133,137,540,618,1140,1155 'checklist':565,629,661,742,1066,1114 'clean':128 'cleanup':478 'cluster':69,99,161,183,187,194,207,215,221,229,237,247,251,340,377,413,531,538,557,574,585,590,611,617,624,628,656,660,737,741,770,864,879,884,913,988,994,1003,1010,1017,1047,1050,1061,1065,1109,1113,1117,1194,1200 'clusterschedul':338,375,411,986,1045 'clusterscheduling.placement.clusters':1019 'command':546,552,605 'common':1133 'complet':567,621,653,734,1058,1106 'compon':88,89,90,682 'config':369,405,972,1039 'configur':6,74,415,481,947 'confirm':192,235 'connect':1154 'contract':801 'coordin':100 'cpu':493,498,512,517,1175 'critic':197,201,290,532 'curat':87,124,380,408,1167 'curl':794,1119,1127 'd':595,889 'dashboard':85,115,344,372,472,983 'data':54,105,106,120,443,504,771,914,975,1042,1180 'default':92,419,747,848,852,1187 'defin':807 'delet':997 'deploy':239,256,820,867,1197 'describ':1092 'descript':91,420,828 'determin':209 'dev':249 'direct':222 'disabl':121,177,379 'distribut':14,33 'echo':941 'empty/error':178 'enabl':131,173,334,365,373,401,409,470,476,968,984,1035,1166 'end':284 'endpoint':732,829,895,940 'engin':18,37 'event':22,58,60,79,1087 'exampl':826 'explicit':212 'expos':750 'extens':9,28,73,154,325,356,392,632,639,959,1031 'extensionvers':273 'extern':465,731,752,791 'fals':174,410,469 'field':825 'find':572,862 'firewal':1157 'first':630,662,743,1067,1115 'full':832,939,1161 'get':143,149,153,159,163,181,186,259,266,272,308,330,361,397,577,584,589,638,647,650,670,687,702,718,754,761,772,779,858,871,878,883,893,904,929,964,1075 'guess':200 'health':1104,1118 'heap':1151 'histori':26,63 'host':248,341,378,414,989 'import':616 'includ':55 'increas':1149,1162 'index':477,1159 'indic':110,130,1126 'info':860 'inform':809 'instal':4,67,134,141,150,171,175,180,289,313 'installplan':144,164,291,320,351,387,578,641,648,872,954,998,1013,1026 'int':422,439,461 'intern':844 'internalip':787,937 'ip':774,845,922,924,943 'issu':1069,1134,1135 'item':190,281,783,933 'job':479 'jsonpath':147,157,167,189,279,581,592,782,875,886,916,932 'jvm':432,449,1150 'k':795,1120,1128 'k8s':59 'kind':319,350,386,953,1025 'kubeconfig':558,562,564,586,597,601,635,637,644,646,667,669,684,686,699,701,715,717,758,760,776,778,880,891,901,903,926,928,1072,1074,1089,1091 'kubectl':142,152,162,185,271,545,551,561,576,588,634,643,666,683,698,714,757,775,870,882,900,925,996,1071,1088 'kubespher':11,41,71,674,691,706,722,765,908,1079,1096 'kubesphere-logging-system':673,690,705,721,764,907,1078,1095 'kubesphere.io':276,317,348,384,951,1023 'kubesphere.io/extension-ref=opensearch':275 'kubesphere.io/v1alpha1':316,347,383,950,1022 'l':274,677,694,709,725,1082,1099 'latest':260,268,304,309,331,362,398,965 'limit':497,516 'limits/requests':437,454 'list':1125 'local':526 'local-volum':525 'log':21,56,78,675,692,707,723,766,909,1080,1097 'manag':83 'manual':337,368,404,971,1038 'master':95,96,426,485 'memori':495,500,514,519,1148,1177 'metadata':321,352,388,955,1027 'metadata.name':191,292 'minim':312 'multi':1193 'multi-clust':1192 'must':195,231,262,293,534,559,566 'n':283,672,689,704,720,763,906,1077,1094 'name':301,322,326,353,357,389,393,612,956,960,1028,1032 'node':97,107,427,444,773,780,843,898,921,923,930,942,944,1141,1181 'nodeip':841 'nodeport':457,463,746,755,837,839,897,920,1156,1186 'note':606,1168 'notif':25,62,82 'number':424,441,840 'o':146,156,166,188,278,580,591,729,781,874,885,915,931 'object':435,452 'observ':43,53,72 'obtain':306 'old':129 'opensearch':1,8,27,30,68,75,84,94,104,114,123,139,145,155,165,257,295,323,327,343,354,358,371,390,394,407,471,484,503,579,640,649,744,769,790,817,865,873,894,912,957,961,974,982,999,1006,1029,1033,1041,1103,1172 'opensearch-cluster-data':768,911 'opensearch-cur':122,406 'opensearch-curator.enabled':473 'opensearch-dashboard':113,370,981 'opensearch-dashboards.enabled':467 'opensearch-data':103,502,973,1040 'opensearch-data.opensearchjavaopts':445 'opensearch-data.replicas':438 'opensearch-data.resources':451 'opensearch-data.service.nodeport':460 'opensearch-data.service.type':455 'opensearch-mast':93,483 'opensearch-master.opensearchjavaopts':428 'opensearch-master.replicas':421 'opensearch-master.resources':434 'opensearchjavaopt':488,507,978 'oper':528,570 'option':433,450 'output':800 'overview':29 'paramet':416,417 'password':853 'persist':521,1183 'placement':339,376,412,987,1046 'platform':44 'pod':651,665,671,688,703,719,1068,1076,1086,1093,1137 'port':899,918,945,1188 'prerequisit':132 'proceed':204 'provid':13,812 'pvc':1163 'rang':280 'remov':1005,1015,1048 'replac':607 'replica':102,112,486,505,976,1043 'request':218,492,511 'requir':620,652,733,1057,1105,1171,1173 'resourc':436,453,480,491,510,1142,1170 'retriev':824 'return':169 'rule':1158 'run':543,550,560 'schedul':125 'search':15,34,50 'section':806 'servic':458,751,756 'signific':1174 'sink':836 'size':522,1152,1164 'skill':804,811,815,822,856 'skill-opensearch' 'solut':1136 'sort':285 'source-kubesphere' 'spec':324,355,391,958,1030 'spec.clusterscheduling.placement.clusters':168,582,876 'spec.connection.kubeconfig':593,614,887 'spec.enabled':148 'spec.ports':917 'spec.version':282 'specif':1002,1009,1199 'specifi':213,227,245 'start':1139 'status':135,541,619,633,642,713 'status.addresses':785,935 'status.installedversion':158 'step':311,333,364,400,967 'storag':76,1144,1160,1179,1184 'storageclass':524 'store':20,49,109 'string':429,446,456 'subsequ':604 'success':819 'svc':762,905 'system':676,693,708,724,767,910,1081,1098 'tail':287 'target':160,193,206,214,228,530,537,556,573,623,627,655,659,736,740,1060,1064,1108,1112 'task':126 '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' 'troubleshoot':1056 'true':170,335,366,374,402,475,969,985,1036 'type':418,459,786,936 'u':796,1121,1129 'ui':117 'uninstal':990,991,1000,1054 'updat':946,1011 'upgradestrategi':336,367,403,970,1037 'url':792,833 'use':2,47,66,219,298,302,554,599,613,745,1182 'user':211,224,233,242 'usernam':849 'v':286 'valu':827 'vector':835 'version':151,261,269,305,310,328,332,359,363,395,399,962,966,1034 'visual':119 'volum':527 'want':254,1052 'web':116 'wide':730 'without':553 'wiztelemetri':42 'xms1536m':448 'xms2048m':509 'xms4096m':980 'xms512m':431,490 'xmx1536m':447 'xmx2048m':508 'xmx4096m':979 'xmx512m':430,489 'yaml':314,345,381,482,948,1020","prices":[{"id":"0a2b62e6-d3ea-44dd-bb43-c01033ce8169","listingId":"d797d735-c3d0-4773-9056-a78e3d1f0582","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-18T21:53:18.539Z"}],"sources":[{"listingId":"d797d735-c3d0-4773-9056-a78e3d1f0582","source":"github","sourceId":"kubesphere/kubesphere/opensearch","sourceUrl":"https://github.com/kubesphere/kubesphere/tree/master/skills/opensearch","isPrimary":false,"firstSeenAt":"2026-04-18T21:53:18.539Z","lastSeenAt":"2026-05-03T00:52:30.873Z"}],"details":{"listingId":"d797d735-c3d0-4773-9056-a78e3d1f0582","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"kubesphere","slug":"opensearch","github":{"repo":"kubesphere/kubesphere","stars":16920,"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-27T06:10:27Z","description":"The container platform tailored for Kubernetes multi-cloud, datacenter, and edge management ⎈ 🖥 ☁️","skill_md_sha":"12ee5e1bf4774a6fe143036f457ddcafa08d5211","skill_md_path":"skills/opensearch/SKILL.md","default_branch":"master","skill_tree_url":"https://github.com/kubesphere/kubesphere/tree/master/skills/opensearch"},"layout":"multi","source":"github","category":"kubesphere","frontmatter":{"name":"opensearch","description":"Use when installing or configuring the OpenSearch extension for KubeSphere, which provides distributed search and analytics engine for storing logs, events, auditing, and notification history"},"skills_sh_url":"https://skills.sh/kubesphere/kubesphere/opensearch"},"updatedAt":"2026-05-03T00:52:30.873Z"}}