provisioning/examples/complete-workflow.md

2 lines
13 KiB
Markdown
Raw Normal View History

# Complete Workflow Example: Kubernetes Cluster with Package System\n\nThis example demonstrates the complete workflow using the new KCL package and module loader system to deploy a production Kubernetes cluster.\n\n## Scenario\n\nDeploy a 3-node Kubernetes cluster with:\n\n- 1 master node\n- 2 worker nodes\n- Cilium CNI\n- Containerd runtime\n- UpCloud provider\n- Production-ready configuration\n\n## Prerequisites\n\n1. Core provisioning package installed\n2. UpCloud credentials configured\n3. SSH keys set up\n\n## Step 1: Environment Setup\n\n```\n# Ensure core package is installed\ncd /Users/Akasha/project-provisioning\n./provisioning/tools/kcl-packager.nu build --version 1.0.0\n./provisioning/tools/kcl-packager.nu install dist/provisioning-1.0.0.tar.gz\n\n# Verify installation\nkcl list packages | grep provisioning\n```\n\n## Step 2: Create Workspace\n\n```\n# Create new workspace from template\nmkdir -p workspace/infra/production-k8s\ncd workspace/infra/production-k8s\n\n# Initialize workspace structure\n../../../provisioning/tools/workspace-init.nu . init\n\n# Verify structure\ntree -a .\n```\n\nExpected output:\n\n```\n.\n├── kcl.mod\n├── servers.k\n├── README.md\n├── .gitignore\n├── .taskservs/\n├── .providers/\n├── .clusters/\n├── .manifest/\n├── data/\n├── tmp/\n├── resources/\n└── clusters/\n```\n\n## Step 3: Discover Available Modules\n\n```\n# Discover available taskservs\n../../../provisioning/core/cli/module-loader discover taskservs\n\n# Search for Kubernetes-related modules\n../../../provisioning/core/cli/module-loader discover taskservs kubernetes\n\n# Discover providers\n../../../provisioning/core/cli/module-loader discover providers\n\n# Check output formats\n../../../provisioning/core/cli/module-loader discover taskservs --format json\n```\n\n## Step 4: Load Required Modules\n\n```\n# Load Kubernetes stack taskservs\n../../../provisioning/core/cli/module-loader load taskservs . [kubernetes, cilium, containerd]\n\n# Load UpCloud provider\n../../../provisioning/core/cli/module-loader load providers . [upcloud]\n\n# Verify loading\n../../../provisioning/core/cli/module-loader list taskservs .\n../../../provisioning/core/cli/module-loader list providers .\n```\n\nCheck generated files:\n\n```\n# Check auto-generated imports\ncat taskservs.k\ncat providers.k\n\n# Check manifest\ncat .manifest/taskservs.yaml\ncat .manifest/providers.yaml\n```\n\n## Step 5: Configure Infrastructure\n\nEdit `servers.k` to configure the Kubernetes cluster:\n\n```\n# Production Kubernetes Cluster Configuration\nimport provisioning.settings as settings\nimport provisioning.server as server\nimport provisioning.defaults as defaults\n\n# Import loaded modules (auto-generated)\nimport .taskservs.kubernetes.kubernetes as k8s\nimport .taskservs.cilium.cilium as cilium\nimport .taskservs.containerd.containerd as containerd\nimport .providers.upcloud as upcloud\n\n# Cluster settings\nk8s_settings: settings.Settings = {\n main_name = "production-k8s"\n main_title = "Production Kubernetes Cluster"\n\n # Configure paths\n settings_path = "./data/settings.yaml"\n defaults_provs_dirpath = "./defs"\n prov_data_dirpath = "./data"\n created_taskservs_dirpath = "./tmp/k8s-deployment"\n prov_resources_path = "./resources"\n created_clusters_dirpath = "./tmp/k8s-clusters"\n prov_clusters_path = "./clusters"\n\n # Kubernetes cluster settings\n cluster_admin_host = "" # Set by provider (first master)\n cluster_admin_port = 22\n cluster_admin_user = "admin"\n servers_wait_started = 60 # K8s nodes need more time\n\n runset = {\n wait = True\n output_format = "human"\n output_path = "tmp/k8s-deployment"\n inventory_file = "./k8s-inventory.yaml"\n use_time = True\n }\n\n # Secrets configuration\n secrets = {\n provider = "sops"\n sops_config = {\n age_key_file = "~/.age/keys.txt"\n use_age = True\n }\n }\n}\n\n# Production Kubernetes cluster