Skip to content

Latest commit

 

History

History
324 lines (298 loc) · 28 KB

File metadata and controls

324 lines (298 loc) · 28 KB

Existing VPC Template

The following steps will provision AWS resources (compute and storage instances in existing VPC) and configure the IBM Spectrum Scale cloud solution.

  1. Change the working directory to aws_scale_templates/sub_modules/instance_template.

    cd ibm-spectrum-scale-cloud-install/aws_scale_templates/sub_modules/instance_template/
    
  2. Create terraform variable definitions file (terraform.tfvars.json) and provide infrastructure inputs.

    Note: In case of multi availability zone, provide 3 AZ values for the vpc_availability_zones keyword. Ex: "vpc_availability_zones"=["us-east-1a", "us-east-1b", "us-east-1c"]

    Minimal Example-1 (create only storage cluster with gp2):

    {
        "vpc_region": "us-east-1",
        "vpc_availability_zones": ["us-east-1a"],
        "resource_prefix": "spectrum-scale",
        "vpc_id": null,                                  // Use an existing vpc id
        "vpc_storage_cluster_private_subnets": [],       // Use an existing vpc private subnet
        "vpc_compute_cluster_private_subnets": [],       // Use an existing vpc private subnet
        "total_storage_cluster_instances": 4,
        "total_compute_cluster_instances": 0,            // Make compute nodes count to zero
        "ebs_block_devices_per_storage_instance": 1,
        "ebs_block_device_volume_size": 500,
        "ebs_block_device_volume_type": "gp2",
        "compute_cluster_image_id": "ami-0b0af3577fe5e3532",
        "compute_cluster_gui_password": "Passw0rd",
        "compute_cluster_gui_username": "admin",
        "operator_email": null,                          // Email address for notification
        "storage_cluster_image_id": "ami-0b0af3577fe5e3532",
        "compute_cluster_key_pair": null,                // Use an existing AWS EC2 key pair
        "storage_cluster_key_pair": null,                // Use an existing AWS EC2 key pair
        "bastion_ssh_private_key": null,                 // Use bastion ssh private key path
        "storage_cluster_gui_username": "admin",
        "storage_cluster_gui_password": "Passw0rd",
        "bastion_instance_public_ip": null,              // Use null if direct connectivity to vpc exists
        "bastion_security_group_id": null                // Use null if direct connectivity to vpc exists
    }

    Minimal Example-2 (create only storage cluster with gp3):

    {
        "vpc_region": "us-east-1",
        "vpc_availability_zones": ["us-east-1a"],
        "resource_prefix": "spectrum-scale",
        "vpc_id": null,                                  // Use an existing vpc id
        "vpc_storage_cluster_private_subnets": [],       // Use an existing vpc private subnet
        "vpc_compute_cluster_private_subnets": [],       // Use an existing vpc private subnet
        "total_storage_cluster_instances": 4,
        "total_compute_cluster_instances": 0,            // Make compute nodes count to zero
        "ebs_block_devices_per_storage_instance": 1,
        "ebs_block_device_volume_type": "gp3",
        "ebs_block_device_iops": 3000,
        "ebs_block_device_throughput": 125,
        "compute_cluster_image_id": "ami-0b0af3577fe5e3532",
        "compute_cluster_gui_password": "Passw0rd",
        "compute_cluster_gui_username": "admin",
        "operator_email": null,                          // Email address for notification
        "storage_cluster_image_id": "ami-0b0af3577fe5e3532",
        "compute_cluster_key_pair": null,                // Use an existing AWS EC2 key pair
        "storage_cluster_key_pair": null,                // Use an existing AWS EC2 key pair
        "bastion_ssh_private_key": null,                 // Use bastion ssh private key path
        "storage_cluster_gui_username": "admin",
        "storage_cluster_gui_password": "Passw0rd",
        "bastion_instance_public_ip": null,              // Use null if direct connectivity to vpc exists
        "bastion_security_group_id": null                // Use null if direct connectivity to vpc exists
    }

    Minimal Example-3 (create only storage cluster with iop1, iop2):

    {
        "vpc_region": "us-east-1",
        "vpc_availability_zones": ["us-east-1a"],
        "resource_prefix": "spectrum-scale",
        "vpc_id": null,                                  // Use an existing vpc id
        "vpc_storage_cluster_private_subnets": [],       // Use an existing vpc private subnet
        "vpc_compute_cluster_private_subnets": [],       // Use an existing vpc private subnet
        "total_storage_cluster_instances": 4,
        "ebs_block_devices_per_storage_instance": 1,
        "ebs_block_device_volume_type": "gp3",
        "ebs_block_device_iops": 3000,
        "total_compute_cluster_instances": 0,
        "compute_cluster_image_id": "ami-0b0af3577fe5e3532",
        "compute_cluster_gui_password": "Passw0rd",
        "compute_cluster_gui_username": "admin",
        "operator_email": "sasikanth.eda@in.ibm.com",
        "storage_cluster_image_id": "ami-0b0af3577fe5e3532",
        "compute_cluster_key_pair": null,                // Use an existing AWS EC2 key pair
        "storage_cluster_key_pair": null,                // Use an existing AWS EC2 key pair
        "bastion_ssh_private_key": null,                 // Use bastion ssh private key path
        "storage_cluster_gui_username": "admin",
        "storage_cluster_gui_password": "Passw0rd",
        "bastion_instance_public_ip": null,              // Use null if direct connectivity to vpc exists
        "bastion_security_group_id": null                // Use null if direct connectivity to vpc exists
    }

    Minimal Example-4 (create only storage cluster with NVMe/nitro instances):

    {
        "vpc_region": "us-east-1",
        "vpc_availability_zones": ["us-east-1a"],
        "resource_prefix": "spectrum-scale",
        "vpc_id": null,                                   // Use an existing vpc id
        "vpc_storage_cluster_private_subnets": [],        // Use an existing vpc private subnet
        "vpc_compute_cluster_private_subnets": [],        // Use an existing vpc private subnet
        "total_storage_cluster_instances": 4,
        "ebs_block_devices_per_storage_instance": 1,
        "ebs_block_device_volume_type": "gp3",
        "ebs_block_device_iops": 3000,
        "ebs_block_device_throughput": 125,
        "total_compute_cluster_instances": 0,
        "compute_cluster_image_id": "ami-0b0af3577fe5e3532",
        "compute_cluster_gui_password": "Passw0rd",
        "compute_cluster_gui_username": "admin",
        "operator_email": "sasikanth.eda@in.ibm.com",
        "storage_cluster_image_id": "ami-0b0af3577fe5e3532",
        "compute_cluster_key_pair": null,                 // Use an existing AWS EC2 key pair
        "storage_cluster_key_pair": null,                 // Use an existing AWS EC2 key pair
        "bastion_ssh_private_key": null,                  // Use bastion ssh private key path
        "storage_cluster_gui_username": "admin",
        "storage_cluster_gui_password": "Passw0rd",
        "bastion_instance_public_ip": null,               // Use null if direct connectivity to vpc exists
        "bastion_security_group_id": null                 // Use null if direct connectivity to vpc exists
    }

    Minimal Example-5 (create only compute cluster):

    {
        "vpc_region": "us-east-1",
        "vpc_availability_zones": ["us-east-1a"],
        "resource_prefix": "spectrum-scale",
        "vpc_id": null,                                  // Use an existing vpc id
        "vpc_storage_cluster_private_subnets": [],       // Use an existing vpc private subnet
        "vpc_compute_cluster_private_subnets": [],       // Use an existing vpc private subnet
        "total_storage_cluster_instances": 0,            // Make storage nodes count to zero
        "total_compute_cluster_instances": 3,
        "compute_cluster_image_id": "ami-0b0af3577fe5e3532",
        "compute_cluster_gui_password": "Passw0rd",
        "compute_cluster_gui_username": "admin",
        "operator_email": "sasikanth.eda@in.ibm.com",
        "storage_cluster_image_id": "ami-0b0af3577fe5e3532",
        "storage_cluster_key_pair": null,                // Use an existing AWS EC2 key pair
        "compute_cluster_key_pair": null,                // Use an existing AWS EC2 key pair
        "bastion_ssh_private_key": null,                 // Use bastion ssh private key path
        "storage_cluster_gui_username": "admin",
        "storage_cluster_gui_password": "Passw0rd"
        "bastion_instance_public_ip": null,              // Use null if direct connectivity to vpc exists
        "bastion_security_group_id": null                // Use null if direct connectivity to vpc exists
    }

    Minimal Example-6 (create remote mount based compute and storage instances):

    {
        "vpc_region": "us-east-1",
        "vpc_availability_zones": ["us-east-1a"],
        "resource_prefix": "spectrum-scale",
        "vpc_id": null,                                  // Use an existing vpc id
        "vpc_storage_cluster_private_subnets": [],       // Use an existing vpc private subnet
        "vpc_compute_cluster_private_subnets": [],       // Use an existing vpc private subnet
        "create_separate_namespaces": false,
        "total_storage_cluster_instances": 4,
        "total_compute_cluster_instances": 3,
        "compute_cluster_image_id": "ami-0b0af3577fe5e3532",
        "compute_cluster_gui_password": "Passw0rd",
        "compute_cluster_gui_username": "admin",
        "operator_email": "sasikanth.eda@in.ibm.com",
        "storage_cluster_image_id": "ami-0b0af3577fe5e3532",
        "compute_cluster_key_pair": null,                // Use an existing AWS EC2 key pair
        "storage_cluster_key_pair": null,                // Use an existing AWS EC2 key pair
        "bastion_ssh_private_key": null,                 // Use bastion ssh private key path
        "storage_cluster_gui_username": "admin",
        "storage_cluster_gui_password": "Passw0rd",
        "bastion_instance_public_ip": null,              // Use null if direct connectivity to vpc exists
        "bastion_security_group_id": null                // Use null if direct connectivity to vpc exists
    }

    Minimal Example-7 (create a single cluster with both compute and storage instances):

    {
        "vpc_region": "us-east-1",
        "vpc_availability_zones": ["us-east-1a"],
        "resource_prefix": "spectrum-scale",
        "vpc_id": "vpc-0b24596ced49f9407",
        "vpc_storage_cluster_private_subnets": ["subnet-0d74f55f21106371a"],
        "vpc_compute_cluster_private_subnets": ["subnet-0e2a0fda0cca020a7"],
        "create_separate_namespaces": false,
        "total_storage_cluster_instances": 4,
        "total_compute_cluster_instances": 3,
        "compute_cluster_key_pair": null,
        "compute_cluster_image_id": "ami-0b0af3577fe5e3532",
        "compute_cluster_gui_password": "Passw0rd",
        "compute_cluster_gui_username": "admin",
        "operator_email": "sasikanth.eda@in.ibm.com",
        "storage_cluster_image_id": "ami-0b0af3577fe5e3532",
        "storage_cluster_key_pair": null,
        "bastion_ssh_private_key": null,                 [[** Use bastion ssh private key path **]]
        "storage_cluster_gui_username": "admin",
        "storage_cluster_gui_password": "Passw0rd",
        "bastion_instance_public_ip": null,              // Use null if direct connectivity to vpc exists
        "bastion_security_group_id": null                // Use null if direct connectivity to vpc exists
    }
  3. Run terraform init and terraform apply -auto-approve to provision resources.

Requirements

Name Version
terraform ~> 1.0
aws ~> 5.0

Inputs

Name Description Type
airgap If true, instance iam profile, git utils which need internet access will be skipped. bool
bastion_instance_public_ip Bastion instance public ip address. string
bastion_instance_ref Bastion instance ref. string
bastion_security_group_ref Bastion security group reference (id/self-link). string
bastion_ssh_private_key Bastion SSH private key path, which will be used to login to bastion host. string
bastion_user Bastion login username. string
client_ip_ranges List of gateway/client ip/cidr ranges. list(string)
client_security_group_ref Client security group reference (id/self-link). string
cluster_type Cluster type to provision. Examples: Storage-only, Compute-only, Combined-compute-storage. string
compute_cluster_boot_disk_type EBS volume types: standard, gp2, gp3, io1, io2 and sc1 or st1. string
compute_cluster_filesystem_mountpoint Compute cluster (accessingCluster) Filesystem mount point. string
compute_cluster_gui_password Password for Compute cluster GUI. string
compute_cluster_gui_username GUI user to perform system management and monitoring tasks on compute cluster. string
compute_cluster_image_ref ID of AMI to use for provisioning the compute cluster instances. string
compute_cluster_instance_type Instance type to use for provisioning the compute cluster instances. string
compute_cluster_key_pair The key pair to use to launch the compute cluster host. string
compute_cluster_tags Additional tags for the compute cluster. map(string)
compute_cluster_volume_tags Additional tags for the compute cluster volume(s). map(string)
create_remote_mount_cluster Flag to select if separate compute and storage cluster needs to be created and proceed for remote mount filesystem setup. bool
create_scale_cluster Flag to represent whether to create scale cluster or not. bool
enable_placement_group If true, a placement group will be created and all instances will be created with strategy - cluster. bool
filesystem_parameters Filesystem parameters in relationship with disk parameters.
list(object({
name = string
filesystem_config_file = string
filesystem_encrypted = bool
filesystem_kms_key_ref = string
device_delete_on_termination = bool
disk_config = list(object({
filesystem_pool = string
block_devices_per_storage_instance = number
block_device_volume_type = string
block_device_volume_size = string
block_device_iops = string
block_device_throughput = string
}))
}))
gateway_instance_type Instance type to use for provisioning the gateway instances. string
gateway_tags Additional tags for the gateway instances. map(string)
gateway_volume_tags Additional tags for the gateway volume(s). map(string)
instances_ssh_user_name Compute/Storage EC2 instances login username. string
inventory_format Specify inventory format suited for ansible playbooks. Examples: ini, json string
marked_vm_names_to_attach_disks Specify the instance names for which disks needs to be attached list(string)
operator_email SNS notifications will be sent to provided email id. string
protocol_instance_type Instance type to use for provisioning the protocol instances. string
protocol_tags Additional tags for the protocol instances. map(string)
protocol_volume_tags Additional tags for the protocol volume(s). map(string)
resource_prefix Prefix is added to all resources that are created. string
root_device_encrypted Whether to enable volume encryption for root device. bool
root_device_kms_key_ref Amazon Resource Name (ARN) of the KMS Key to use when encrypting the root volume. string
scale_ansible_repo_clone_path Path to clone github.com/IBM/ibm-spectrum-scale-install-infra. string
spectrumscale_rpms_path Path that contains IBM Spectrum Scale product cloud rpms. string
storage_cluster_boot_disk_type EBS volume types: standard, gp2, gp3, io1, io2 and sc1 or st1. string
storage_cluster_gui_password Password for Storage cluster GUI string
storage_cluster_gui_username GUI user to perform system management and monitoring tasks on storage cluster. string
storage_cluster_image_ref ID of AMI to use for provisioning the storage cluster instances. string
storage_cluster_instance_type Instance type to use for provisioning the storage cluster instances. string
storage_cluster_key_pair The key pair to use to launch the storage cluster host. string
storage_cluster_tags Additional tags for the storage cluster. map(string)
storage_cluster_tiebreaker_instance_type Instance type to use for the tie breaker instance (will be provisioned only in Multi-AZ configuration). string
storage_cluster_volume_tags Additional tags for the storage cluster volume(s). map(string)
total_compute_cluster_instances Number of EC2 instances to be launched for compute cluster. number
total_gateway_instances Number of EC2 instances to be launched for gateway nodes. number
total_protocol_instances Number of EC2 instances to be launched for protocol nodes. number
total_storage_cluster_instances Number of EC2 instances to be launched for storage cluster. number
using_cloud_connection This flag is intended to enable ansible related communication between a cloud virtual machine (VM) to cloud existing virtual private cloud (VPC). This mode requires variable client_security_group_ref (make sure it is in the same vpc), as the cloud VM security group reference (id/self-link) will be added to the allowed ingress list of scale (storage/compute) cluster security groups. bool
using_direct_connection This flag is intended to enable ansible related communication between an on-premise virtual machine (VM) to cloud virtual private cloud (VPC) via a VPN or direct connection. This mode requires variable client_ip_ranges, as the on-premise client ip will be added to the allowed ingress list of scale (storage/compute) cluster security groups. bool
using_jumphost_connection This flag is intended to enable ansible related communication between an on-premise virtual machine (VM) to cloud existing virtual private cloud (VPC). This mode requires variable bastion_user, bastion_instance_public_ip, bastion_security_group_ref, bastion_ssh_private_key, as the jump host related security group reference (id/self-link) will be added to the allowed ingress list of scale (storage/compute) cluster security groups. bool
using_packer_image If true, gpfs rpm copy step will be skipped during the configuration. bool
using_rest_api_remote_mount If false, skips GUI initialization on compute cluster for remote mount configuration. string
vpc_availability_zones A list of availability zones names or ids in the region. list(string)
vpc_compute_cluster_dns_domain DNS domain name to be used for compute cluster. string
vpc_compute_cluster_private_subnets List of IDs of compute cluster private subnets. list(string)
vpc_forward_dns_zone DNS zone name to be used for scale cluster (Ex: example-zone). string
vpc_protocol_private_subnets List of IDs of protocol private subnets. list(string)
vpc_ref VPC id were to deploy the bastion. string
vpc_region The region where AWS operations will take place. Examples are us-east-1, us-west-2, etc. string
vpc_reverse_dns_domain DNS reverse domain (Ex: 10.in-addr.arpa). string
vpc_reverse_dns_zone DNS reverse zone lookup to be used for scale cluster (Ex: example-zone-reverse). string
vpc_storage_cluster_dns_domain DNS domain name to be used for storage cluster. string
vpc_storage_cluster_private_subnets List of IDs of storage cluster private subnets. list(string)

Outputs

Name Description
airgap Air gap environment
bastion_user Bastion OS Login username.
ces_private_ips CES/Protocol ENI (secondary private) ips.
cluster_sns_arn n/a
compute_cluster_instance_cidrs n/a
compute_cluster_instance_details Compute cluster instance details (map of id, private_ip, dns)
compute_cluster_security_group_id Compute cluster security group id.
gateway_instance_details Gateway instance details (map of id, private_ip, dns)
instance_iam_profile n/a
placement_group_id Placement group id.
protocol_cluster_security_group_id Protocol cluster security group id.
protocol_instance_details Protocol instance details (map of id, private_ip, dns)
storage_cluster_dec_instance_details Storage cluster desc instance details (map of id, private_ip, dns)
storage_cluster_desc_data_volume_mapping Mapping of storage cluster desc instance ip vs. device path.
storage_cluster_instance_cidrs n/a
storage_cluster_instance_details Protocol instance details (map of id, private_ip, dns)
storage_cluster_security_group_id Storage cluster security group id.
storage_cluster_with_data_volume_mapping Mapping of storage cluster instance ip vs. device path.