원클릭으로
opensearch
// 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
// 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
Operate the KubeSphere network extension. Use when Codex needs to install, upgrade, configure, enable, disable, or inspect the `network` extension; manage Calico `IPPool` resources, namespace bindings, migrations, or network isolation flows; or consult the bundled network extension references in this skill.
Use when working with KubeSphere DevOps extension, CI/CD pipelines, Jenkins integration, or pipeline troubleshooting
Use when creating, running, or managing CI/CD pipelines in KubeSphere DevOps, including pipeline API operations and run monitoring
Use when working with WizTelemetry Logging extension for KubeSphere, including installation, configuration, and log query API
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.
Use when managing credentials in KubeSphere DevOps, including repository credentials, kubeconfig, and API tokens
| 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 |
OpenSearch 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.
| Component | Description | Default |
|---|---|---|
| opensearch-master | Master node for cluster coordination | 1 replica |
| opensearch-data | Data nodes for storing indices | 3 replicas |
| opensearch-dashboards | Web UI for visualizing data | disabled |
| opensearch-curator | Scheduled task to clean old indices | enabled |
# Check if OpenSearch is installed
kubectl get installplan opensearch -o jsonpath='{.spec.enabled}'
# Get installed version
kubectl get extension opensearch -o jsonpath='{.status.installedVersion}'
# Get target clusters
kubectl get installplan opensearch -o jsonpath='{.spec.clusterScheduling.placement.clusters}'
Returns:
"true" - installed and enabled"false" - installed but disabledkubectl get clusters -o jsonpath='{.items[*].metadata.name}'
⚠️ CRITICAL: Do Not guess.
⚠️ CRITICAL: DO NOT proceed until target clusters are determined.
Ask user (if not specified):
Available clusters: host, dev
Which clusters do you want to deploy OpenSearch to?
MUST do this to get the latest version:
kubectl get extensionversions -l kubesphere.io/extension-ref=opensearch -o jsonpath='{range .items[*]}{.spec.version}{"\n"}{end}' | sort -V | tail -1
⚠️ CRITICAL: InstallPlan metadata.name MUST be opensearch. DO NOT use any other name.
Use the latest version obtained from "Get Latest Version" step.
apiVersion: kubesphere.io/v1alpha1
kind: InstallPlan
metadata:
name: opensearch
spec:
extension:
name: opensearch
version: <VERSION> # From Get Latest Version step
enabled: true
upgradeStrategy: Manual
clusterScheduling:
placement:
clusters:
- host
apiVersion: kubesphere.io/v1alpha1
kind: InstallPlan
metadata:
name: opensearch
spec:
extension:
name: opensearch
version: <VERSION> # From Get Latest Version step
enabled: true
upgradeStrategy: Manual
config: |
opensearch-dashboards:
enabled: true
clusterScheduling:
placement:
clusters:
- host
apiVersion: kubesphere.io/v1alpha1
kind: InstallPlan
metadata:
name: opensearch
spec:
extension:
name: opensearch
version: <VERSION> # From Get Latest Version step
enabled: true
upgradeStrategy: Manual
config: |
opensearch-curator:
enabled: false
clusterScheduling:
placement:
clusters:
- host
| Parameter | Type | Default | Description |
|---|---|---|---|
opensearch-master.replicas | int | 1 | Number of master nodes |
opensearch-master.opensearchJavaOpts | string | "-Xmx512M -Xms512M" | JVM options |
opensearch-master.resources | object | - | Resource limits/requests |
opensearch-data.replicas | int | 3 | Number of data nodes |
opensearch-data.opensearchJavaOpts | string | "-Xmx1536M -Xms1536M" | JVM options |
opensearch-data.resources | object | - | Resource limits/requests |
opensearch-data.service.type | string | NodePort | Service type |
opensearch-data.service.nodePort | int | 30920 | NodePort for external access |
opensearch-dashboards.enabled | bool | false | Enable OpenSearch Dashboards |
opensearch-curator.enabled | bool | true | Enable index cleanup job |
opensearch-master:
replicas: 1
opensearchJavaOpts: "-Xmx512M -Xms512M"
resources:
requests:
cpu: "100m"
memory: "512Mi"
limits:
cpu: "500m"
memory: "1Gi"
opensearch-data:
replicas: 3
opensearchJavaOpts: "-Xmx2048M -Xms2048M"
resources:
requests:
cpu: "200m"
memory: "2Gi"
limits:
cpu: "2000m"
memory: "4Gi"
persistence:
size: 50Gi
storageClass: "local-volume"
⚠️ CRITICAL: You MUST access the target cluster BEFORE checking status or running any kubectl commands below.
❌ DO NOT run kubectl commands without using the target cluster kubeconfig ✅ MUST run:
kubectl --kubeconfig=/tmp/<cluster>-kubeconfig ...
Checklist (must complete before any operation):
1. Find target clusters:
kubectl get installplan opensearch -o jsonpath='{.spec.clusterScheduling.placement.clusters}'
2. Get cluster kubeconfig:
kubectl get cluster <cluster-name> -o jsonpath='{.spec.connection.kubeconfig}' | base64 -d > /tmp/<cluster-name>-kubeconfig
3. Use this kubeconfig for ALL subsequent commands
Note: Replace
<cluster-name>with the actual cluster name. Usespec.connection.kubeconfigfor imported clusters.
⚠️ REQUIRED: Complete Access Target Cluster checklist FIRST
# Extension status
kubectl --kubeconfig=/tmp/<cluster>-kubeconfig get extension opensearch
# InstallPlan status
kubectl --kubeconfig=/tmp/<cluster>-kubeconfig get installplan opensearch
⚠️ REQUIRED: Complete Access Target Cluster checklist FIRST
# All pods
kubectl --kubeconfig=/tmp/<cluster>-kubeconfig get pods -n kubesphere-logging-system -l app.kubernetes.io/instance=opensearch-agent
# By component
kubectl --kubeconfig=/tmp/<cluster>-kubeconfig get pods -n kubesphere-logging-system -l app.kubernetes.io/name=opensearch-master
kubectl --kubeconfig=/tmp/<cluster>-kubeconfig get pods -n kubesphere-logging-system -l app.kubernetes.io/name=opensearch-data
# Status
kubectl --kubeconfig=/tmp/<cluster>-kubeconfig get pods -n kubesphere-logging-system -l app.kubernetes.io/instance=opensearch-agent -o wide
⚠️ REQUIRED: Complete Access Target Cluster checklist FIRST
OpenSearch uses NodePort (default: 30920) to expose service externally.
# Get NodePort service
kubectl --kubeconfig=/tmp/<cluster>-kubeconfig get svc -n kubesphere-logging-system opensearch-cluster-data
# Get node IP
kubectl --kubeconfig=/tmp/<cluster>-kubeconfig get nodes -o jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}'
# Access OpenSearch externally
# URL: https://<node-ip>:30920
curl -k -u admin:admin "https://<node-ip>:30920/_cluster/health"
⚠️ This section defines what information this skill provides to other skills
When OpenSearch is successfully deployed, other skills can retrieve:
| Field | Example Value | Description |
|---|---|---|
endpoint | https://127.0.0.1:30920 | Full URL for Vector sink |
nodePort | 30920 | NodePort number |
nodeIP | 127.0.0.1 | Node internal IP |
auth.user | admin | Default username |
auth.password | admin | Default password |
How other skills should get this info:
Find which cluster OpenSearch was deployed to:
kubectl get installplan opensearch -o jsonpath='{.spec.clusterScheduling.placement.clusters}'
Get cluster kubeconfig:
kubectl get cluster <cluster-name> -o jsonpath='{.spec.connection.kubeconfig}' | base64 -d > /tmp/<cluster-name>-kubeconfig
Get OpenSearch endpoint:
# NodePort
NODE_PORT=$(kubectl --kubeconfig=/tmp/<cluster>-kubeconfig get svc -n kubesphere-logging-system opensearch-cluster-data -o jsonpath='{.spec.ports[?(@.port==9200)].nodePort}')
# Node IP
NODE_IP=$(kubectl --kubeconfig=/tmp/<cluster>-kubeconfig get nodes -o jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}')
# Full endpoint
echo "https://${NODE_IP}:${NODE_PORT}"
apiVersion: kubesphere.io/v1alpha1
kind: InstallPlan
metadata:
name: opensearch
spec:
extension:
name: opensearch
version: <VERSION> # From Get Latest Version step
enabled: true
upgradeStrategy: Manual
config: |
opensearch-data:
replicas: 5
opensearchJavaOpts: "-Xmx4096M -Xms4096M"
opensearch-dashboards:
enabled: true
clusterScheduling:
placement:
clusters:
- host
Uninstall from all clusters:
kubectl delete installplan opensearch
Uninstall from specific cluster:
To remove OpenSearch from a specific cluster, update the InstallPlan by removing that cluster from clusterScheduling.placement.clusters:
apiVersion: kubesphere.io/v1alpha1
kind: InstallPlan
metadata:
name: opensearch
spec:
extension:
name: opensearch
version: <VERSION>
enabled: true
upgradeStrategy: Manual
config: |
opensearch-data:
replicas: 3
clusterScheduling:
placement:
clusters:
- <REMAINING_CLUSTERS> # Remove the cluster you want to uninstall from
⚠️ REQUIRED: Complete Access Target Cluster checklist FIRST
kubectl --kubeconfig=/tmp/<cluster>-kubeconfig get pods -n kubesphere-logging-system -l app.kubernetes.io/instance=opensearch-agent
# Pod events
kubectl --kubeconfig=/tmp/<cluster>-kubeconfig describe pods -n kubesphere-logging-system -l app.kubernetes.io/instance=opensearch-agent
⚠️ REQUIRED: Complete Access Target Cluster checklist FIRST
# Cluster health
curl -k -u admin:admin "https://<node-ip>:30920/_cluster/health"
# List indices
curl -k -u admin:admin "https://<node-ip>:30920/_cat/indices"
| Issue | Solution |
|---|---|
| Pods not starting | Check node resources and storage availability |
| Out of memory | Increase JVM heap size |
| Cannot connect | Check NodePort firewall rules |
| Index storage full | Increase PVC size or enable Curator |