Skill: rohitg00/k8-multicluster (version 1.0.0)

--- name: k8s-multicluster description: Manage multiple Kubernetes clusters, switch contexts, and perform cross-cluster operations. Use when working with multiple clusters, comparing environments, or managing cluster lifecycle. --- # Multi-Cluster Kubernetes Management Cross-cluster operations and context management using kubectl-mcp-server's multi-cluster support. ## Context Management ### List Available Contexts ``` list_contexts_tool() ``` ### View Current Context ``` kubeconfig_view() # Shows sanitized kubeconfig ``` ### Switch Context CLI: `kubectl-mcp-server context <context-name>` ## Cross-Cluster Operations All kubectl-mcp-server tools support the `context` parameter: ```python # Get pods from production cluster get_pods(namespace="default", context="production-cluster") # Get pods from staging cluster get_pods(namespace="default", context="staging-cluster") ``` ## Common Multi-Cluster Patterns ### Compare Environments ``` # Compare deployment across clusters compare_namespaces( namespace1="production", namespace2="staging", resource_type="deployment", context="production-cluster" ) ``` ### Parallel Queries Query multiple clusters simultaneously: ``` # Production cluster get_pods(namespace="app", context="prod-us-east") get_pods(namespace="app", context="prod-eu-west") # Development cluster get_pods(namespace="app", context="development") ``` ### Cross-Cluster Health Check ``` # Check all clusters for context in ["prod-1", "prod-2", "staging"]: get_nodes(context=context) get_pods(namespace="kube-system", context=context) ``` ## Cluster API (CAPI) Management For managing cluster lifecycle: ### List Managed Clusters ``` capi_clusters_list_tool(namespace="capi-system") ``` ### Get Cluster Details ``` capi_cluster_get_tool(name="prod-cluster", namespace="capi-system") ``` ### Get Workload Cluster Kubeconfig ``` capi_cluster_kubeconfig_tool(name="prod-cluster", namespace="capi-system") ``` ### Machine Management ``` capi_machines_list_tool(namespace="capi-system") capi_machinedeployments_list_tool(namespace="capi-system") ``` ### Scale Cluster ``` capi_machinedeployment_scale_tool( name="prod-cluster-md-0", namespace="capi-system", replicas=5 ) ``` See [CONTEXT-SWITCHING.md](CONTEXT-SWITCHING.md) for detailed patterns. ## Multi-Cluster Helm Deploy charts to specific clusters: ``` install_helm_chart( name="nginx", chart="bitnami/nginx", namespace="web", context="production-cluster" ) list_helm_releases( namespace="web", context="staging-cluster" ) ``` ## Multi-Cluster GitOps ### Flux Across Clusters ``` flux_kustomizations_list_tool( namespace="flux-system", context="cluster-1" ) flux_reconcile_tool( kind="kustomization", name="apps", namespace="flux-system", context="cluster-2" ) ``` ### ArgoCD Across Clusters ``` argocd_apps_list_tool(namespace="argocd", context="management-cluster") ``` ## Federation Patterns ### Secret Synchronization ``` # Read from source cluster get_secrets(namespace="app", context="source-cluster") # Apply to target cluster (via manifest) apply_manifest(secret_manifest, namespace="app", context="target-cluster") ``` ### Cross-Cluster Service Discovery With Cilium ClusterMesh or Istio multi-cluster: ``` cilium_nodes_list_tool(context="cluster-1") istio_proxy_status_tool(context="cluster-2") ``` ## Best Practices 1. **Naming Convention**: Use descriptive context names - `prod-us-east-1`, `staging-eu-west-1` 2. **Access Control**: Different kubeconfigs per environment - Prod: Read-only for most users - Dev: Full access for developers 3. **Always Specify Context**: Avoid accidental cross-cluster operations ``` # Explicit is better get_pods(namespace="app", context="production") ``` 4. **Cluster Groups**: Organize by purpose - Production: `prod-*` - Staging: `staging-*` - Development: `dev-*` ## Related Skills - [k8s-troubleshoot](../k8s-troubleshoot/SKILL.md) - Debug across clusters - [k8s-gitops](../k8s-gitops/SKILL.md) - GitOps multi-cluster

path: CONTEXT-SWITCHING.md
content: # Kubernetes Context Management

Patterns for managing multiple cluster contexts.

## Understanding Contexts

A kubeconfig context combines:
- **Cluster**: API server URL and CA certificate
- **User**: Authentication credentials
- **Namespace**: Default namespace (optional)

## Context Naming Conventions

### By Environment

```
production-us-east-1
production-eu-west-1
staging-us-east-1
development
```

### By Purpose

```
management-cluster
workload-cluster-1
workload-cluster-2
monitoring-cluster
```

### By Team

```
team-a-dev
team-a-prod
team-b-dev
platform-admin
```

## MCP Commands

```python
# List all contexts
list_contexts_tool()

# View kubeconfig (sanitized)
kubeconfig_view()
```

## Context in Every Command

All kubectl-mcp-server tools accept `context` parameter:

```python
# Explicit context (recommended)
get_pods(namespace="default", context="production")
get_pods(namespace="default", context="staging")

# Current context (implicit)
get_pods(namespace="default")
```

## Multi-Cluster Patterns

### Compare Environments

```python
# Get deployments from both clusters
prod_deps = get_deployments(namespace="app", context="production")
staging_deps = get_deployments(namespace="app", context="staging")
```

### Cross-Cluster Secret Sync

```python
# Read secret from source
[REDACTED_SECRET]"app", context="source-cluster")

# Apply to target (via manifest)
apply_manifest(secret_yaml, namespace="app", context="target-cluster")
```

### Parallel Health Checks

```python
contexts = ["prod-1", "prod-2", "staging"]
for ctx in contexts:
    nodes = get_nodes(context=ctx)
    pods = get_pods(namespace="kube-system", context=ctx)
    # Report status
```

### Rolling Deployment Across Clusters

```python
# Deploy to staging first
install_helm_chart(name="app", chart="./app",
                   namespace="prod", context="staging")

# Verify
get_pods(namespace="prod", label_selector="app=myapp", context="staging")

# Deploy to production regions sequentially
for region in ["us-east", "us-west", "eu-west"]:
    install_helm_chart(name="app", chart="./app",
                       namespace="prod", context=f"production-{region}")
    # Wait for healthy
    get_pods(namespace="prod", context=f"production-{region}")
```

## Access Control Per Context

### Separate Kubeconfigs

```bash
# Different files per environment
export KUBECONFIG=~/.kube/production.yaml
export KUBECONFIG=~/.kube/development.yaml
```

### Service Account Per Cluster

```python
# Different SAs for different access levels
# Production: read-only SA
get_pods(namespace="app", context="production-readonly")

# Development: full access SA
apply_manifest(manifest, namespace="app", context="development-admin")
```

## Cluster API Management

For managing cluster lifecycle:

```python
# List CAPI-managed clusters
capi_clusters_list_tool(namespace="capi-system")

# Get workload cluster kubeconfig
kubeconfig = capi_cluster_kubeconfig_tool(
    name="workload-cluster-1",
    namespace="capi-system"
)

# Use the kubeconfig to access workload cluster
# (save to file, add to contexts)
```

## Federation Patterns

### Kubefed Resources

Cross-cluster resource propagation with KubeFed.

### Cluster Mesh (Cilium)

```python
# Check Cilium cluster mesh status
cilium_nodes_list_tool(context="cluster-1")
cilium_nodes_list_tool(context="cluster-2")
```

### Multi-Cluster Service Mesh (Istio)

```python
istio_proxy_status_tool(context="primary")
istio_proxy_status_tool(context="remote")
```

## Best Practices

1. **Always Use Explicit Context**
   ```python
   # Good: explicit
   get_pods(context="production")

   # Risky: implicit
   get_pods()  # Which cluster?
   ```

2. **Naming Convention**
   - Consistent format: `<env>-<region>`
   - Short but descriptive

3. **Read-Only for Production**
   - Default production context: read-only
   - Separate admin context for changes

4. **Audit Cross-Cluster Operations**
   - Log which clusters are accessed
   - Track who made changes

5. **Separate Credentials**
   - Different SAs per environment
   - Shorter token lifetimes for prod

## Troubleshooting

### Context Not Found

```python
list_contexts_tool()
# Verify context name is correct
```

### Authentication Failure

```python
# Check credentials
# Token expired?
# Certificate valid?
```

### Network Issues

```
# API server reachable?
# VPN connected?
# Firewall rules?
```


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: suspicious | SkillSpector: suspicious (CRITICAL)