Description
Background
Headlamp currently supports plugin installation through the headlamp-plugin
CLI tool, which can install plugins to a specified directory. However, for in-cluster mode deployments, we need a more Kubernetes-native way to manage plugins that can:
- Install plugins during container initialization
- Support configuration management
- Handle plugin updates and removals
- Work seamlessly with Kubernetes deployments
Objective
Create a containerized version of the headlamp-plugin CLI tool that can be used as an init container in Kubernetes deployments. This container will:
- Accept a configuration file (via ConfigMap/Secret/Path) specifying which plugins to install
- Install the specified plugins into a shared volume before Headlamp starts
- Be automatically built and published as part of Headlamp's release process
- Provide a seamless way to manage plugins in Kubernetes environments
The container will be used in Headlamp's Helm chart as an init container, allowing operators to declaratively manage their plugins through Kubernetes-native configuration. This eliminates the need for manual plugin installation and ensures consistent plugin deployment across all Headlamp instances.
Implementation Details
1. Plugin Installer Container
1.1 Configuration Format
Create a YAML-based plugin configuration format:
plugins:
- name: my-plugin
source: https://example.com/plugin.tar.gz
version: 1.0.0
config:
key1: value1
key2: value2
- name: another-plugin
source: https://github.com/org/plugin/releases/download/v1.0.0/plugin.tar.gz
version: latest
2. CLI Extensions
2.1 New CLI Arguments
Extend headlamp-plugin to support:
headlamp-plugin install --config /path/to/config.yaml
headlamp-plugin install --source url --config-json '{"key": "value"}'
2.2 Configuration Management
- Add configuration parsing functionality
- Support multiple plugin installations
- Enable plugin-specific configuration
- Add validation for configurations
3. Kubernetes Integration
3.1 Init Container Setup
Update Headlamp's Helm chart to support plugin installation:
initContainers:
- name: plugin-installer
image: headlamp/plugin-installer:latest
volumeMounts:
- name: plugins-dir
mountPath: /plugins
- name: plugin-config
mountPath: /config
env:
- name: PLUGIN_CONFIG_PATH
value: /config/plugins.yaml
volumes:
- name: plugins-dir
emptyDir: {}
- name: plugin-config
configMap:
name: headlamp-plugin-config
3.2 ConfigMap for Plugin Configuration
apiVersion: v1
kind: ConfigMap
metadata:
name: headlamp-plugin-config
data:
plugins.yaml: |
plugins:
- name: my-plugin
source: https://example.com/plugin.tar.gz
version: 1.0.0
4. Implementation Steps
4.1 Extend Plugin Manager
- Add configuration file support to PluginManager class
- Implement batch installation functionality
- Add configuration validation
- Support plugin-specific settings
4.2 Create Docker Image
- Set up Docker build process
- Create installation scripts
- Add configuration parsing
- Include necessary dependencies
4.3 Update Helm Chart
- Add init container configuration
- Create ConfigMap templates
- Add volume management
- Update documentation
4.4 Add CI/CD Support
- Automate Docker image builds
- Add image versioning
- Set up container scanning
- Configure release automation
5. Plugin Installation Process
5.1 Container Startup
#!/bin/sh
# Read config file
CONFIG_FILE=${PLUGIN_CONFIG_PATH:-/config/plugins.yaml}
# Parse and install plugins
headlamp-plugin install --config $CONFIG_FILE
5.2 Volume Management
- Use emptyDir for single-node setups
- Support PersistentVolume for production
- Handle plugin updates
- Manage plugin configurations
Success Criteria
- Plugins can be installed via configuration files
- Init container successfully installs plugins during pod startup
- Plugin configurations are properly managed
- Updates and removals work as expected
- Process is documented and maintainable
Technical Requirements
- Kubernetes 1.16+
- Helm 3+
- Node.js 18+
- Access to plugin repositories
- Sufficient storage for plugins
Notes
- Consider security implications of plugin downloads
- Plan for plugin version compatibility
- Document upgrade procedures
- Consider backup and restore procedures
- Add monitoring for plugin installation status
cc @headlamp-k8s/maintainers