Skip to content

Create Plugin Installer Container for Headlamp #2787

Open
@knrt10

Description

@knrt10

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:

  1. Install plugins during container initialization
  2. Support configuration management
  3. Handle plugin updates and removals
  4. 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

Metadata

Metadata

Assignees

Labels

backendIssues related to the backendkind/featureCategorizes issue or PR as related to a new feature.lxfpluginsproposal

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions