feat: Providing some clusters for kubernetes
This commit is contained in:
		
							
								
								
									
										73
									
								
								examples/kubernetes/clusters/postgres.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								examples/kubernetes/clusters/postgres.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,73 @@ | ||||
| //! PostgreSQL Cluster Deployment Example | ||||
| //! | ||||
| //! This example shows how to deploy a PostgreSQL cluster using the | ||||
| //! KubernetesManager convenience methods. | ||||
|  | ||||
| use sal_kubernetes::KubernetesManager; | ||||
| use std::collections::HashMap; | ||||
|  | ||||
| #[tokio::main] | ||||
| async fn main() -> Result<(), Box<dyn std::error::Error>> { | ||||
|     // Create Kubernetes manager for the database namespace | ||||
|     let km = KubernetesManager::new("database").await?; | ||||
|  | ||||
|     // Configure PostgreSQL-specific labels | ||||
|     let mut labels = HashMap::new(); | ||||
|     labels.insert("app".to_string(), "postgres-cluster".to_string()); | ||||
|     labels.insert("type".to_string(), "database".to_string()); | ||||
|     labels.insert("engine".to_string(), "postgresql".to_string()); | ||||
|  | ||||
|     // Deploy the PostgreSQL cluster using the convenience method | ||||
|     println!("Deploying PostgreSQL cluster..."); | ||||
|     km.deploy_application( | ||||
|         "postgres-cluster", // name | ||||
|         "postgres:15",      // image | ||||
|         2,                  // replicas (1 master + 1 replica) | ||||
|         5432,               // port | ||||
|         Some(labels),       // labels | ||||
|     ) | ||||
|     .await?; | ||||
|  | ||||
|     println!("✅ PostgreSQL cluster deployed successfully!"); | ||||
|  | ||||
|     // Check deployment status | ||||
|     let deployments = km.deployments_list().await?; | ||||
|     let postgres_deployment = deployments | ||||
|         .iter() | ||||
|         .find(|d| d.metadata.name.as_ref() == Some(&"postgres-cluster".to_string())); | ||||
|  | ||||
|     if let Some(deployment) = postgres_deployment { | ||||
|         let total_replicas = deployment | ||||
|             .spec | ||||
|             .as_ref() | ||||
|             .and_then(|s| s.replicas) | ||||
|             .unwrap_or(0); | ||||
|         let ready_replicas = deployment | ||||
|             .status | ||||
|             .as_ref() | ||||
|             .and_then(|s| s.ready_replicas) | ||||
|             .unwrap_or(0); | ||||
|  | ||||
|         println!( | ||||
|             "Deployment status: {}/{} replicas ready", | ||||
|             ready_replicas, total_replicas | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     println!("\n📋 Connection Information:"); | ||||
|     println!("  Host: postgres-cluster.database.svc.cluster.local"); | ||||
|     println!("  Port: 5432"); | ||||
|     println!("  Database: postgres (default)"); | ||||
|     println!("  Username: postgres (default)"); | ||||
|     println!("  Password: Set POSTGRES_PASSWORD environment variable"); | ||||
|  | ||||
|     println!("\n🔧 To connect from another pod:"); | ||||
|     println!("  psql -h postgres-cluster.database.svc.cluster.local -U postgres"); | ||||
|  | ||||
|     println!("\n💡 Next steps:"); | ||||
|     println!("  • Set environment variables for database credentials"); | ||||
|     println!("  • Add persistent volume claims for data storage"); | ||||
|     println!("  • Configure backup and monitoring"); | ||||
|  | ||||
|     Ok(()) | ||||
| } | ||||
		Reference in New Issue
	
	Block a user