Kubernetes ConfigMap Configuration Example
Github 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:
-
KubernetesClient Configuration- In-Pod configuration setup
- Out-of-Pod configuration setup
ConfigMapaccess 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.22or higher - Git
- GoFrame
- GoFrame Kubernetes ConfigMap Config
Features
The example showcases the following features:
-
KubernetesIntegration- In-Pod configuration
- Out-of-Pod configuration
ConfigMapmanagement- 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:
Kubernetescluster access- Namespace management
- RBAC permissions
-
ConfigMapSetup:ConfigMapcreation- Data item management
- Access control
Client Configuration
-
In-Pod Settings:
- Automatic service account
ConfigMapname- Data item name
-
Out-of-Pod Settings:
KubeConfigpath- 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