Usage Guide
This guide provides comprehensive examples and usage patterns for kubectl-multi.
Basic Commands
Get Resources
# Get nodes from all managed clusters
kubectl multi get nodes
# Get pods from all clusters in all namespaces
kubectl multi get pods -A
# Get services in specific namespace
kubectl multi get services -n kube-system
# Get deployments with label selector
kubectl multi get deployments -l app=nginx -A
# Show labels
kubectl multi get pods --show-labels -n kube-system
Global Flags
--kubeconfig string: Path to kubeconfig file--remote-context string: Remote hosting context (default: “its1”)--all-clusters: Operate on all managed clusters (default: true)-n, --namespace string: Target namespace-A, --all-namespaces: List resources across all namespaces
Output Examples
Sample Input and Output
Getting Nodes
kubectl multi get nodes
Output:
CONTEXT CLUSTER NAME STATUS ROLES AGE VERSION
its1 cluster1 cluster1-control-plane Ready control-plane 6d23h v1.33.1
its1 cluster2 cluster2-control-plane Ready control-plane 6d23h v1.33.1
its1 its1-cluster kubeflex-control-plane Ready <none> 6d23h v1.27.2+k3s1
Getting Pods with Namespace
kubectl multi get pods -n kube-system
Output:
CONTEXT CLUSTER NAME READY STATUS RESTARTS AGE
its1 cluster1 coredns-674b8bbfcf-6k7vc 1/1 Running 2 6d23h
its1 cluster1 etcd-cluster1-control-plane 1/1 Running 2 6d23h
its1 cluster1 kube-apiserver-cluster1-control-plane 1/1 Running 2 6d23h
its1 cluster2 coredns-674b8bbfcf-5c46s 1/1 Running 2 6d23h
its1 cluster2 etcd-cluster2-control-plane 1/1 Running 2 6d23h
its1 its1-cluster coredns-68559449b6-g8kpn 1/1 Running 14 6d23h
Getting Services with All Namespaces
kubectl multi get services -A
Output:
CONTEXT CLUSTER NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
its1 cluster1 default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6d23h
its1 cluster1 kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 6d23h
its1 cluster2 default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6d23h
its1 cluster2 kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 6d23h
Using Label Selectors
kubectl multi get pods -l k8s-app=kube-dns -A
Output:
CONTEXT CLUSTER NAMESPACE NAME READY STATUS RESTARTS AGE
its1 cluster1 kube-system coredns-674b8bbfcf-6k7vc 1/1 Running 2 6d23h
its1 cluster1 kube-system coredns-674b8bbfcf-vhh9g 1/1 Running 2 6d23h
its1 cluster2 kube-system coredns-674b8bbfcf-5c46s 1/1 Running 2 6d23h
its1 cluster2 kube-system coredns-674b8bbfcf-7gft4 1/1 Running 2 6d23h
Supported Resource Types
Cluster-Scoped Resources
nodes(no, node) - Kubernetes nodesnamespaces(ns) - Kubernetes namespacespersistentvolumes(pv) - Persistent volumesstorageclasses(sc) - Storage classesclusterroles- RBAC cluster roles
Namespace-Scoped Resources
pods(po) - Kubernetes podsservices(svc) - Kubernetes servicesdeployments(deploy) - Kubernetes deploymentsconfigmaps(cm) - Configuration mapssecrets- Kubernetes secretspersistentvolumeclaims(pvc) - PV claimsingresses(ing) - Ingress resources
Custom Resources
- Any CRD installed in clusters (auto-discovered)
- KubeStellar resources (managedclusters, etc.)
Advanced Usage
Working with Specific Clusters
By default, kubectl-multi operates on all managed clusters, but you can customize this behavior:
# Use a different ITS context
kubectl multi --remote-context my-its get nodes
# Use a different kubeconfig file
kubectl multi --kubeconfig /path/to/kubeconfig get pods
Output Formatting
# Show additional labels
kubectl multi get pods --show-labels
# Use wide output (if supported by the resource)
kubectl multi get pods -o wide
# Get resource in YAML format
kubectl multi get pod mypod -o yaml
Complex Selectors
# Multiple label selectors
kubectl multi get pods -l app=nginx,version=v1.0
# Field selectors (where supported)
kubectl multi get pods --field-selector status.phase=Running
# Combine selectors and namespaces
kubectl multi get pods -l tier=frontend -n production
Common Workflows
Monitoring Cluster Health
# Check node status across all clusters
kubectl multi get nodes
# Check critical system pods
kubectl multi get pods -n kube-system
# Monitor specific applications
kubectl multi get pods -l app=myapp -A
Resource Discovery
# Find all services
kubectl multi get services -A
# Locate specific deployments
kubectl multi get deployments -l app=web-server
# Check persistent volumes
kubectl multi get pv
Troubleshooting
# Find failing pods
kubectl multi get pods --field-selector status.phase!=Running -A
# Check resource usage
kubectl multi get pods --show-labels -A
# Monitor specific namespaces
kubectl multi get all -n problematic-namespace
Best Practices
Performance Tips
-
Use specific namespaces when possible to reduce output:
kubectl multi get pods -n kube-system # Better than -A -
Use label selectors to filter results:
kubectl multi get pods -l app=nginx # More efficient -
Combine flags effectively:
kubectl multi get deployments -l tier=frontend -n production
Error Handling
kubectl-multi gracefully handles errors from individual clusters:
- If cluster is unavailable, others will still be queried
- Warning messages are displayed for failed clusters
- Partial results are still returned
Output Management
For large outputs:
# Pipe to less for pagination
kubectl multi get pods -A | less
# Save output to file
kubectl multi get nodes > cluster-nodes.txt
# Filter with grep
kubectl multi get pods -A | grep nginx
Troubleshooting Usage
Common Issues
No Resources Found
No resources found
This is normal if the resource type doesn’t exist in any cluster.
Cluster Connection Errors
Warning: failed to list pods in cluster cluster1: connection refused
This indicates a specific cluster is unreachable, but others will continue to work.
Permission Errors
Error: pods is forbidden: User "user" cannot list resource "pods"
Check your RBAC permissions on the managed clusters.
Getting Help
# Get help for the main command
kubectl multi --help
# Get help for specific subcommands
kubectl multi get --help
Next Steps
- Learn about the internal Architecture
- Contribute to development with the Development Guide
- Check the API Reference for technical details