cockpit-kata/quickstart.md

307 lines
9.1 KiB
Markdown
Executable File

# Quick Start Guide — Cockpit Kata Containers
This guide walks you through installing and running Cockpit Kata Containers in both **standalone mode** (for development and demo) and **Cockpit module mode** (for production use on a real Kata host).
---
## Table of Contents
1. [Standalone Mode (No Kata Required)](#1-standalone-mode-no-kata-required)
2. [Cockpit Module Mode (Production)](#2-cockpit-module-mode-production)
3. [Verifying the Installation](#3-verifying-the-installation)
4. [Common Issues and Fixes](#4-common-issues-and-fixes)
5. [Next Steps](#5-next-steps)
---
## 1. Standalone Mode (No Kata Required)
Use standalone mode to explore the UI, develop features, or demo the module without a Kata Containers installation. All data comes from the mock layer — no real sandboxes, images, or configuration files are needed.
### Prerequisites
| Requirement | Version | Check Command |
|------------|---------|---------------|
| Node.js | 18+ | `node --version` |
| npm | 9+ | `npm --version` |
| (or) bun | 1+ | `bun --version` |
### Steps
```bash
# 1. Clone the repository
git clone <repo-url> cockpit-kata-containers
cd cockpit-kata-containers
# 2. Install dependencies
npm install
# 3. Start the development server
npm run dev
```
The app runs at **http://localhost:3000**. You should see the Kata Containers module with:
- 5 mock sandboxes (3 running, 1 stopped, 1 error)
- 4 pre-imported images (1 with validation errors)
- 4 runtime configurations (kata-qemu, kata-clh, kata-fc, kata-dragonball)
- Simulated metrics for running sandboxes
### What You Can Do
| Feature | How to Try It |
|---------|---------------|
| Browse sandboxes | Click "Sandboxes" in the sidebar — view the table, click a row for details |
| View sandbox detail | Click any sandbox name — see Overview, Metrics, Network, Console tabs |
| Import an image | Click "Import Image" — walk through the 4-step wizard with any `.tar.gz` or `.img` file |
| Export an image | Click "Export" — select a QCrows image, choose qcow2/ISO/PXE format, configure options, click Export |
| Inspect kernel | Click "Kernel" — view kernel config, boot params, hypervisor compatibility, and regenerate initrd |
| Push via PXE | Click "Import Image" → violet Radio button on any QCrows image → configure TFTP and push |
| Build a custom image | Click "Build Guide" — follow rootfs or initrd instructions with progress tracking |
| Edit configuration | Click "Configuration" — select a profile, click "Edit Config", modify TOML, save |
| View metrics | Click "Metrics" — see aggregate stats and per-sandbox breakdowns |
### Environment Variables (Optional)
| Variable | Default | Description |
|----------|---------|-------------|
| `PORT` | 3000 | Development server port |
| `KATA_IMAGE_DIR` | /tmp/kata-uploads | Directory for uploaded images (standalone mode) |
---
## 2. Cockpit Module Mode (Production)
Use Cockpit module mode on a host that runs Kata Containers. The module communicates with `kata-runtime`, `crictl`, `kata-monitor`, and the container runtime via Cockpit's bridge APIs.
### Prerequisites
| Requirement | Version | Install |
|------------|---------|---------|
| Cockpit | 286+ | OS package manager |
| kata-runtime | 2.5+ | See [Kata Containers docs](https://github.com/kata-containers/kata-containers#install) |
| containerd | 1.6+ | OS package manager |
| crictl | 1.25+ | OS package manager |
| KVM support | enabled | BIOS/UEFI + kernel module |
| Node.js | 18+ | For building the module only |
| npm | 9+ | For building the module only |
### Verify KVM Support
```bash
# Check if KVM is available
ls -la /dev/kvm
# Check if KVM kernel module is loaded
lsmod | grep kvm
# If not loaded, load it
sudo modprobe kvm_intel # Intel CPUs
sudo modprobe kvm_amd # AMD CPUs
```
### Verify Kata Installation
```bash
# Check kata-runtime version
kata-runtime --version
# Run the built-in host check
kata-runtime check
```
### Build and Install the Module
```bash
# 1. Enter the Cockpit module directory
cd cockpit-kata/
# 2. Install build dependencies
npm install
# 3. Build the production bundle
npm run build
# Output: dist/index.js, dist/index.js.map, dist/manifest.json
# 4. Install to Cockpit's package directory
sudo cp -r dist/ /usr/share/cockpit/kata/
# 5. Verify Cockpit sees the module
cockpit-bridge --packages | grep kata
# Expected output: kata
```
### Development Install (Symlink)
For iterative development, use a symlink instead of copying:
```bash
cd cockpit-kata/
npm install
npm run devel-install # Creates ~/.local/share/cockpit/kata → $(pwd)
```
Changes are not live — you need to rebuild (`npm run build`) and refresh the browser. For auto-rebuild:
```bash
npm run watch # Rebuilds on every file change
```
### Start kata-monitor (For Metrics)
The Metrics Dashboard requires `kata-monitor` running as a Prometheus endpoint:
```bash
# Start kata-monitor on the default port (8090)
sudo kata-monitor --listen-address 127.0.0.1:8090 &
# Verify it's running
curl -s http://127.0.0.1:8090/metrics | head -5
```
If you use a different address or port, update the CSP in `cockpit-kata/manifest.json`:
```json
"content-security-policy": "default-src 'self'; connect-src 'self' http://YOUR_ADDRESS:YOUR_PORT ws:; ..."
```
### Access Cockpit
```bash
# Start Cockpit (if not already running)
sudo systemctl enable --now cockpit.socket
# Open in browser
# https://<host-ip>:9090
```
Navigate to **Kata Containers** in the Cockpit sidebar.
---
## 3. Verifying the Installation
### Standalone Mode
1. Open http://localhost:3000
2. You should see the sidebar with 7 navigation items
3. Click "Sandboxes" — 5 mock sandboxes should appear
4. Click "Import Image" — the wizard should load with drag-and-drop zone
5. Click "Export" — QCrows image list with qcow2/ISO/PXE format selector
6. Click "Kernel" — kernel config viewer with hypervisor compatibility matrix
7. Click "Configuration" — 4 runtime profiles should be listed
8. Open browser DevTools (F12) — check for console errors (there should be none)
### Cockpit Module Mode
1. Open Cockpit at https://\<host\>:9090
2. Navigate to "Kata Containers" in the sidebar
3. The sandbox list should show real Kata sandboxes (if any are running)
4. Click "Configuration" — you should see the actual `configuration.toml` files from `/usr/share/defaults/kata-containers/`
5. Click "Edit Config" on a profile — modify a value, click Save, then verify the file was updated:
```bash
cat /usr/share/defaults/kata-containers/configuration-qemu.toml
```
---
## 4. Common Issues and Fixes
### "cockpit-bridge --packages" doesn't show kata
**Cause:** The module files aren't in the right directory or Cockpit hasn't refreshed its cache.
```bash
# Verify the files are there
ls -la /usr/share/cockpit/kata/
# Should show: index.js, index.js.map, manifest.json
# Restart Cockpit to pick up new packages
sudo systemctl restart cockpit
```
### kata-runtime check fails
**Cause:** KVM not available, kata-runtime not installed, or wrong container runtime.
```bash
# Check KVM
ls /dev/kvm
# Check containerd CRI socket
ls /run/containerd/containerd.sock
# Check kata-runtime
which kata-runtime
kata-runtime --version
# Full diagnostic
kata-runtime check
```
### Metrics Dashboard shows "kata-monitor not running"
**Cause:** `kata-monitor` is not started or not on port 8090.
```bash
# Start it
sudo kata-monitor --listen-address 127.0.0.1:8090 &
# Or if it's on a different port, update the CSP in manifest.json
```
### Build fails with TypeScript errors
```bash
# Clear caches
rm -rf cockpit-kata/node_modules cockpit-kata/dist
cd cockpit-kata && npm install && npm run build
```
### Blank page in Cockpit
**Cause:** CSP blocking the module's scripts or network requests.
1. Open browser DevTools → Console
2. Look for CSP violation messages
3. Update `manifest.json`'s `content-security-policy` to allow the required origins
---
## 5. Next Steps
Once the module is running:
1. **Create a RuntimeClass** — Set up Kubernetes RuntimeClasses that reference your Kata configurations:
```bash
kubectl apply -f - <<EOF
apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
name: kata-qemu
handler: kata-qemu
EOF
```
2. **Launch a Kata pod** Deploy a pod using the RuntimeClass:
```bash
kubectl run nginx-kata --image=nginx --runtimeclass=kata-qemu
```
3. **Import a custom image** Use the Import Image wizard to bring in a rootfs or initrd with your application pre-installed.
4. **Build your own image** Follow the Build Guide to create a custom Kata container image from scratch.
5. **Configure runtime settings** Use the Configuration view to tune vCPU, memory, and boot parameters per VMM profile.
6. **Export for deployment** Use the Export view to convert a QCrows image to qcow2 (QEMU VM), ISO (live USB), or PXE (network boot).
7. **Install QCrows CLI tools** The automated installer deploys five CLI tools to `/usr/local/bin/`:
```bash
qcrows-pack # Create .qcrows archives
qcrows-verify # Verify .qcrows integrity
qcrows-inspect # Read .qcrows metadata
qcrows-export # Export to qcow2, ISO, or PXE
qcrows-initrd-regen # Regenerate initrd (env-aware)
```