kcli-cluster-deployment
π―Skillfrom karmab/kcli
Deploys and manages Kubernetes clusters across multiple distributions using kcli, supporting OpenShift, k3s, kubeadm, and cloud provider platforms.
Installation
npx skills add https://github.com/karmab/kcli --skill kcli-cluster-deploymentSkill Details
Guides deployment and management of Kubernetes clusters with kcli. Use when deploying OpenShift, k3s, kubeadm, or other Kubernetes distributions.
Overview
# kcli Cluster Deployment
Supported Cluster Types
| Type | Description | Module |
|------|-------------|--------|
| openshift | Red Hat OpenShift (IPI/UPI) | kvirt/cluster/openshift/ |
| okd | Community OpenShift | Same as openshift |
| hypershift | OpenShift Hosted Control Planes | kvirt/cluster/hypershift/ |
| microshift | Lightweight edge OpenShift | kvirt/cluster/microshift/ |
| generic | Generic Kubernetes (alias: kubernetes) | kvirt/cluster/kubernetes/ |
| kubeadm | Standard Kubernetes via kubeadm | kvirt/cluster/kubeadm/ |
| k3s | Lightweight Kubernetes | kvirt/cluster/k3s/ |
| rke2 | Rancher Kubernetes Engine 2 | kvirt/cluster/rke2/ |
| aks | Azure Kubernetes Service | kvirt/cluster/aks/ |
| eks | Amazon Elastic Kubernetes | kvirt/cluster/eks/ |
| gke | Google Kubernetes Engine | kvirt/cluster/gke/ |
Basic Cluster Commands
```bash
# Create cluster
kcli create kube
# Create with parameters
kcli create kube openshift -P ctlplanes=3 -P workers=2 mycluster
# List clusters
kcli list kube
# Get cluster info
kcli info kube mycluster
# Delete cluster
kcli delete kube mycluster
# Scale cluster
kcli scale kube
# Get kubeconfig
kcli get kubeconfig mycluster
```
OpenShift Deployment
Minimal Example
```bash
kcli create kube openshift -P pull_secret=~/pull-secret.json mycluster
```
Key Parameters
```yaml
# Required
pull_secret: ~/pull-secret.json # Red Hat pull secret
domain: example.com # Base domain
# Topology
ctlplanes: 3 # Control plane nodes
workers: 2 # Worker nodes
version: stable # OpenShift version (stable, 4.14, etc.)
# Resources
ctlplane_memory: 16384 # Control plane memory (MB)
ctlplane_numcpus: 8 # Control plane CPUs
worker_memory: 8192 # Worker memory
worker_numcpus: 4 # Worker CPUs
# Networking
network: default # Libvirt network
api_ip: 192.168.122.253 # API VIP (auto-detected if omitted)
ingress_ip: 192.168.122.252 # Ingress VIP
```
Disconnected/Air-gapped
```yaml
disconnected_url: registry.local:5000
disconnected_user: admin
disconnected_password: password
ca: |
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
```
kubeadm Deployment
```bash
kcli create kube kubeadm -P domain=k8s.local -P ctlplanes=1 -P workers=2 myk8s
```
Key Parameters
```yaml
domain: k8s.local # Required domain
version: 1.29 # Kubernetes version
ctlplanes: 1 # Control planes (odd number for HA)
workers: 2 # Worker count
network: default # Network name
api_ip: 192.168.122.250 # API endpoint (for multi-ctlplane)
image: centos9stream # Base OS image
```
k3s Deployment
```bash
kcli create kube k3s -P ctlplanes=1 -P workers=2 myk3s
```
Key Parameters
```yaml
ctlplanes: 1
workers: 2
version: latest # k3s version
domain: k3s.local
image: ubuntu2204
```
RKE2 Deployment
```bash
kcli create kube rke2 -P ctlplanes=1 -P workers=2 myrke2
```
Key Parameters
```yaml
ctlplanes: 1
workers: 2
version: latest # RKE2 version
domain: rke2.local
image: ubuntu2204
```
HyperShift (Hosted Control Planes)
```bash
kcli create kube hypershift \
-P pull_secret=~/pull-secret.json \
-P nodepool_replicas=2 \
myhypershift
```
Key Parameters
```yaml
pull_secret: ~/pull-secret.json
management_cluster: mgmt # Existing cluster name
nodepool_replicas: 2 # Worker node count
release_image: ... # Specific OCP release
```
MicroShift Deployment
```bash
kcli create kube microshift -P pull_secret=~/pull-secret.json mymicroshift
```
Key Parameters
```yaml
pull_secret: ~/pull-secret.json
version: latest # MicroShift version
image: rhel9 # RHEL-based image required
```
Cluster Directory Structure
Clusters store state in ~/.kcli/clusters/:
```
~/.kcli/clusters/mycluster/
βββ kcli_parameters.yml # Stored parameters
βββ kubeconfig # Cluster kubeconfig
βββ auth/ # Auth credentials (OpenShift)
β βββ kubeadmin-password
β βββ kubeconfig
βββ (other cluster-specific files)
```
Scaling Operations
```bash
# Scale workers
kcli scale kube openshift -P workers=5 mycluster
# Scale control planes (careful!)
kcli scale kube kubeadm -P ctlplanes=3 mycluster
# Add nodes with specific parameters
kcli scale kube openshift -P workers=3 -P worker_memory=16384 mycluster
```
Troubleshooting
Check Deployment Progress
```bash
# OpenShift: watch bootstrap
kcli ssh mycluster-bootstrap
journalctl -f -u bootkube
# kubeadm: check cluster status
export KUBECONFIG=~/.kcli/clusters/mycluster/kubeconfig
kubectl get nodes
kubectl get pods -A
```
Common Issues
- API IP not reachable: Ensure
api_ipis in the correct subnet - Pull secret invalid: Verify JSON format and Red Hat subscription
- Insufficient resources: Check VM memory/CPU against requirements
- DNS resolution: Ensure domain resolves or use
sslip: true
Debug Mode
```bash
kcli -d create kube openshift mycluster # Verbose output
```
Cloud Provider Notes
For cloud providers (AWS, GCP, Azure), kcli can:
- Auto-create load balancers (
cloud_lb: true) - Configure cloud DNS (
cloud_dns: true) - Set up cloud storage (
cloud_storage: true)
```yaml
cloud_lb: true
cloud_dns: true
cloud_storage: true
```
More from this repository6
Manages and interacts with virtual machines across multiple cloud and virtualization providers using a unified command-line interface for deployment, configuration, and lifecycle management.
Validates kcli code quality by running linting checks, spelling verification, and comprehensive test suites for the project.
Guides developers in implementing custom virtualization providers for kcli by defining a standardized interface and core method requirements.
Configures and manages cloud provider settings for kcli, supporting multiple providers like KVM, AWS, GCP, and Azure through a unified ~/.kcli/config.yml file.
Manages virtual machine lifecycle operations across providers using kcli, enabling creation, configuration, and management of VMs with flexible commands.
Guides developers in creating kcli plan files with Jinja2 templating for deploying VMs, networks, and infrastructure resources efficiently.