Kubernetes ConfigMap
Configuration Example
Code Source: https://github.com/gogf/examples/tree/main/config/kubecm
Description
This directory contains an example demonstrating how to integrate Kubernetes ConfigMap
with GoFrame
applications for configuration management. It shows:
-
Kubernetes
Client Configuration- In-Pod configuration setup
- Out-of-Pod configuration setup
ConfigMap
access and management- Error handling and logging
-
Configuration Management
- Configuration loading and parsing
- Dynamic configuration updates
- Configuration value retrieval
Directory Structure
.
├── boot_in_pod/ # Bootstrap configuration for in-pod deployment
│ └── boot.go # In-pod client initialization
├── boot_out_pod/ # Bootstrap configuration for out-of-pod deployment
│ └── boot.go # Out-of-pod client initialization
├── main.go # Main application entry
├── go.mod # Go module file
└── go.sum # Go module checksums
Requirements
- Go 1.22 or higher
- Git
- GoFrame
- GoFrame Kubernetes ConfigMap Config
Features
The example showcases the following features:
-
Kubernetes
Integration- In-Pod configuration
- Out-of-Pod configuration
ConfigMap
management- Error handling
-
Configuration Management
- Configuration loading
- Value retrieval
- Type conversion
- Default values
-
Dynamic Updates
- Configuration watching
- Change notification
- Hot reload support
Configuration
Kubernetes
Setup
-
Cluster Configuration:
Kubernetes
cluster access- Namespace management
- RBAC permissions
-
ConfigMap
Setup:ConfigMap
creation- Data item management
- Access control
Client Configuration
-
In-Pod Settings:
- Automatic service account
ConfigMap
name- Data item name
-
Out-of-Pod Settings:
KubeConfig
path- Namespace selection
- Client configuration
- Access permissions
Usage
-
Create
ConfigMap
:# Create a ConfigMap with configuration data
kubectl create configmap test-configmap --from-file=config.yaml=./config.yaml -
Configure Access:
# Ensure proper RBAC permissions
kubectl create role config-reader --verb=get,list,watch --resource=configmaps
kubectl create rolebinding config-reader-binding --role=config-reader --serviceaccount=default:default -
Run Example:
# For in-pod deployment
go run main.go
# For out-of-pod deployment (local development)
KUBE_CONFIG=~/.kube/config go run main.go
Implementation Details
-
In-Pod Setup (
boot_in_pod/boot.go
):- Simple configuration for in-pod deployment
- Automatic service account usage
- Minimal configuration required
-
Out-of-Pod Setup (
boot_out_pod/boot.go
):- External cluster access configuration
- KubeConfig file usage
- Namespace specification
- Custom client configuration
-
Configuration Access (
main.go
):- Configuration availability check
- Bulk configuration retrieval
- Single value access
- Error handling
Notes
- The example supports both in-pod and out-of-pod deployments
- In-pod deployment uses the pod's service account
- Out-of-pod deployment requires KubeConfig file
- ConfigMap changes are automatically reflected
- Proper RBAC permissions are required
- Configuration paths can be customized based on needs