Update configuration files, templates, and internal documentation for the provisioning repository system. Configuration Updates: - KMS configuration modernization - Plugin system settings - Service port mappings - Test cluster topologies - Installation configuration examples - VM configuration defaults - Cedar authorization policies Documentation Updates: - Library module documentation - Extension API guides - AI system documentation - Service management guides - Test environment setup - Plugin usage guides - Validator configuration documentation All changes are backward compatible.
166 lines
5.1 KiB
Plaintext
166 lines
5.1 KiB
Plaintext
# Kubernetes Control Plane Server Template
|
|
# Extracted from wuji infrastructure patterns (real production config)
|
|
# Provides control plane server configuration with proven settings
|
|
|
|
import providers.upcloud.kcl.defaults_upcloud as upcloud_prov
|
|
import workspace_templates.lib.compose as comp
|
|
|
|
# Storage configuration for control plane
|
|
schema ControlPlaneStorage {
|
|
name: str = "root"
|
|
size: int = 35
|
|
total: int = 80
|
|
parts: [any] = [
|
|
{name = "root", size = 35, type = "ext4", mount = True, mount_path = "/"}
|
|
{name = "kluster", size = 45, type = "xfs", mount = True, mount_path = "/kluster"}
|
|
]
|
|
}
|
|
|
|
# Base control plane server configuration from wuji production
|
|
schema ControlPlaneServer {
|
|
# Basic server configuration
|
|
hostname: str # Must be provided (e.g., "{infra}-cp-0")
|
|
title: str # Must be provided (e.g., "{Infra} Control-Panel 0")
|
|
plan: str = "2xCPU-4GB" # Production-tested plan from wuji
|
|
|
|
# Storage configuration (production-tested from wuji)
|
|
storages: [ControlPlaneStorage] = [
|
|
ControlPlaneStorage {}
|
|
]
|
|
|
|
# Network configuration
|
|
network_private_ip: str # Must be provided (e.g., "10.11.1.20")
|
|
liveness_ip: str = "{{network_public_ip}}"
|
|
liveness_port: int = 22
|
|
extra_hostnames: [str] = [] # Will include hostname by default
|
|
|
|
# Labels (production patterns from wuji)
|
|
labels: str = "use=k8s-cp"
|
|
|
|
# Taskservs for control plane (from wuji production)
|
|
default_taskservs: [any] = [
|
|
{name = "os", profile = "controlpanel"}
|
|
{name = "resolv"}
|
|
{name = "runc"}
|
|
{name = "crun"}
|
|
{name = "youki"}
|
|
{name = "containerd"}
|
|
{name = "kubernetes"}
|
|
{name = "external-nfs"}
|
|
]
|
|
|
|
# Additional taskservs
|
|
additional_taskservs: [any] = []
|
|
|
|
# Custom configuration
|
|
custom_config: {str: any} = {}
|
|
}
|
|
|
|
# Template function to create control plane server
|
|
def create_control_plane_server [
|
|
infra_name: str,
|
|
private_ip: str,
|
|
additional_taskservs: [any] = [],
|
|
overrides: {str: any} = {}
|
|
] -> any {
|
|
let base_config = ControlPlaneServer {
|
|
hostname: $"($infra_name)-cp-0"
|
|
title: $"($infra_name | str title-case) Control-Panel 0"
|
|
network_private_ip: $private_ip
|
|
extra_hostnames: [$"($infra_name)-cp-0"]
|
|
additional_taskservs: $additional_taskservs
|
|
}
|
|
|
|
# Apply overrides
|
|
let final_config = comp.deep_merge $base_config $overrides
|
|
|
|
# Combine taskservs
|
|
let all_taskservs = $final_config.default_taskservs | append $final_config.additional_taskservs
|
|
|
|
# Create UpCloud server configuration
|
|
upcloud_prov.Server_upcloud {
|
|
hostname: $final_config.hostname
|
|
title: $final_config.title
|
|
plan: $final_config.plan
|
|
storages: $final_config.storages | each {|storage|
|
|
upcloud_prov.Storage_upcloud {
|
|
name: $storage.name
|
|
size: $storage.size
|
|
total: $storage.total
|
|
parts: $storage.parts
|
|
}
|
|
}
|
|
labels: $final_config.labels
|
|
network_private_ip: $final_config.network_private_ip
|
|
liveness_ip: $final_config.liveness_ip
|
|
liveness_port: $final_config.liveness_port
|
|
extra_hostnames: $final_config.extra_hostnames
|
|
taskservs: $all_taskservs
|
|
} | comp.deep_merge $final_config.custom_config
|
|
}
|
|
|
|
# Common control plane configurations
|
|
control_plane_configs = {
|
|
small: {
|
|
plan: "1xCPU-2GB"
|
|
storages: [{
|
|
name: "root"
|
|
size: 25
|
|
total: 50
|
|
parts: [
|
|
{name = "root", size = 25, type = "ext4", mount = True, mount_path = "/"}
|
|
{name = "kluster", size = 25, type = "xfs", mount = True, mount_path = "/kluster"}
|
|
]
|
|
}]
|
|
}
|
|
standard: {
|
|
plan: "2xCPU-4GB" # Default from wuji
|
|
}
|
|
large: {
|
|
plan: "4xCPU-8GB"
|
|
storages: [{
|
|
name: "root"
|
|
size: 50
|
|
total: 120
|
|
parts: [
|
|
{name = "root", size = 50, type = "ext4", mount = True, mount_path = "/"}
|
|
{name = "kluster", size = 70, type = "xfs", mount = True, mount_path = "/kluster"}
|
|
]
|
|
}]
|
|
}
|
|
}
|
|
|
|
# Export the template for use in infrastructure
|
|
_server = upcloud_prov.Server_upcloud {
|
|
hostname = "cp-0"
|
|
title = "Control Plane 0"
|
|
plan = "2xCPU-4GB"
|
|
storages = [
|
|
{
|
|
name = "root"
|
|
size = 35
|
|
total = 80
|
|
parts = [
|
|
{name = "root", size = 35, type = "ext4", mount = True, mount_path = "/"}
|
|
{name = "kluster", size = 45, type = "xfs", mount = True, mount_path = "/kluster"}
|
|
]
|
|
}
|
|
]
|
|
labels = "use=k8s-cp"
|
|
network_private_ip = "10.11.1.20"
|
|
liveness_ip = "{{network_public_ip}}"
|
|
liveness_port = 22
|
|
extra_hostnames = ["cp-0"]
|
|
taskservs = [
|
|
{name = "os", profile = "controlpanel"}
|
|
{name = "resolv"}
|
|
{name = "runc"}
|
|
{name = "crun"}
|
|
{name = "youki"}
|
|
{name = "containerd"}
|
|
{name = "kubernetes"}
|
|
{name = "external-nfs"}
|
|
]
|
|
}
|
|
|
|
_server |