blob: 7cb01086b66ec42fe6824a6583d2384123fb0aad [file] [log] [blame] [view]
# Code Architecture Documentation
## Project Structure
```
deploy_py/
├── main.py # Main entry point of the deployment system
├── python/ # Python implementation directory
│ ├── config_management/ # Configuration management modules
│ ├── deploy/ # Deployment implementation
│ ├── executor/ # Command execution modules
│ ├── utils/ # Utility functions
│ ├── common/ # Common modules (logging, constants, etc.)
│ └── exceptions/ # Custom exception definitions
└── shell/ # Shell scripts directory
└── utils/ # Shell utility scripts
```
## Core Components
### 1. Main Application (`main.py`)
The main entry point of the deployment system, responsible for:
- Command line argument parsing
- Deployment mode selection (Docker/Bare metal)
- Configuration generation
- Orchestration of the deployment process
Key Classes and Functions:
```python
class MainApplication:
"""
Main application class that orchestrates the deployment process.
Handles command-line arguments and coordinates different deployment modes.
"""
def __init__(self):
"""
Initialize the application with:
- Command line arguments
- OS information
- Path management
- Deployment manager
- Command executor
"""
def parse_arguments(self):
"""
Parse command line arguments including:
- deploy: Regular deployment mode
- docker-deploy: Docker-based deployment
- generate-conf: Configuration generation
- os-info: Operating system information
- docker-instance-num: Number of Docker instances
"""
def deploy_cluster_if_needed(self):
"""
Execute cluster deployment based on selected mode:
- Regular deployment (bare metal/KVM)
- Docker-based deployment
"""
def generate_conf_if_needed(self):
"""
Generate configuration files if requested
- Converts base_conf.yml to detailed conf.yml
- Generates necessary templates
"""
```
### 2. Configuration Management
The configuration management module handles:
- Base configuration parsing
- Advanced configuration generation
- Template rendering
- Configuration validation
Key Components:
- YAML configuration parsing
- Jinja2 template processing
- Configuration validation rules
- Environment-specific settings
### 3. Deployment Module
Handles the actual deployment process with two main modes:
#### Docker Deployment Flow:
1. Parse configuration
2. Generate Docker Compose file
3. Create and configure containers
4. Execute deployment scripts in containers
5. Configure services and components
#### Bare Metal/KVM Deployment Flow:
1. Parse configuration
2. Validate environment
3. Execute Ansible playbooks
4. Configure services directly
### 4. Executor Module
Responsible for command execution and process management:
- Command execution in different environments
- Process management and monitoring
- Error handling and logging
- Status reporting
### 5. Common Utilities
Shared functionality across the system:
- Logging configuration
- Path management
- Constants and configurations
- Error handling
## Deployment Process Flow
```mermaid
sequenceDiagram
participant User
participant Main
participant Config
participant Deployment
participant Executor
User->>Main: Start deployment
Main->>Config: Load configuration
Config->>Config: Validate settings
Main->>Deployment: Initialize deployment
Deployment->>Executor: Prepare environment
Executor->>Executor: Execute commands
Deployment->>Deployment: Configure services
Deployment->>Main: Report status
Main->>User: Complete deployment
```
## Configuration Files
### Base Configuration (base_conf.yml)
```yaml
# Basic deployment configuration
default_password: 'password'
data_dirs: ["/data1", "/data2"]
components_to_install: ["hdfs", "yarn", "hive"]
# Host configuration
hosts:
- 192.168.1.101 node1
- 192.168.1.102 node2
# Docker specific settings
docker_options:
instance_num: 4
memory_limit: "16g"
```
### Generated Configuration (conf.yml)
```yaml
# Detailed configuration generated from base_conf.yml
cluster_config:
name: "cluster_name"
components:
hdfs:
data_dirs: ["/data1/hdfs", "/data2/hdfs"]
yarn:
resource_manager: "node1"
node_managers: ["node2"]
```
## Error Handling
The system implements comprehensive error handling:
1. Configuration Validation
- Schema validation
- Dependency checking
- Resource validation
2. Deployment Errors
- Network connectivity issues
- Resource allocation failures
- Service startup failures
3. Recovery Mechanisms
- Rollback procedures
- Clean-up operations
- Error reporting and logging
## Best Practices
1. Configuration Management
- Use base_conf.yml for basic settings
- Review generated conf.yml
- Validate before deployment
2. Deployment Process
- Start with small clusters
- Verify network connectivity
- Monitor resource usage
3. Troubleshooting
- Check logs regularly
- Verify configurations
- Monitor system resources
## Development Guidelines
1. Code Structure
- Follow modular design
- Maintain separation of concerns
- Document all major functions
2. Error Handling
- Use custom exceptions
- Implement proper logging
- Provide meaningful error messages
3. Testing
- Unit test critical components
- Integration test deployment flows
- Validate configurations