O-RAN SMO on AWS EKS - Deployment Guide

O-RAN SMO on AWS EKS - Deployment Guide

Overview

Configurations and deployment guide for Service Management and Orchestration (SMO) on AWS EKS. Supports single-node and multi-node clusters with cost optimization.

Quick Start

Prerequisites

  1. AWS Account with IAM user having `AdministratorAccess`,`PowerUserAccess`

  2. CLI Tools: AWS CLI, kubectl, eksctl

  3. SSH Key: For EKS node access

Installation Commands

# Install CLI tools curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip && sudo ./aws/install curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp sudo mv /tmp/eksctl /usr/local/bin # Configure AWS aws configure # Region: eu-west-1, Output: json # Create SSH key aws ec2 create-key-pair --key-name smo-eks-key --region eu-west-1 --query 'KeyMaterial' --output text > ~/.ssh/smo-eks-key.pem chmod 600 ~/.ssh/smo-eks-key.pem

EKS Cluster Deployment

Single Node Cluster

Configuration: m5.4xlarge (16 vCPU, 64GB RAM), Spot instance, 100GB gp3 storage

apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: smo-test-single region: eu-west-1 version: "1.32" availabilityZones: ["eu-west-1a", "eu-west-1b"] managedNodeGroups: - name: smo-workers instanceType: m5.4xlarge # 16 vCPU, 64GB RAM desiredCapacity: 1 minSize: 1 maxSize: 1 spot: true volumeSize: 100 volumeType: gp3 iam: withAddonPolicies: ebs: true efs: true labels: role: smo-worker environment: test ssh: allow: true publicKeyName: smo-eks-key addons: - name: vpc-cni version: latest - name: coredns version: latest - name: kube-proxy version: latest - name: aws-ebs-csi-driver version: latest cloudWatch: clusterLogging: enableTypes: []
eksctl create cluster -f eks-single-node.yaml

 

Multi-Node Cluster

Configuration:

  • Control node: 1x m5.2xlarge (8 vCPU, 32GB RAM)

  • Worker nodes: 2x m5.2xlarge (8 vCPU, 32GB RAM)

  • All Spot instances, 100GB gp3 storage each

apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: smo-test-multi region: eu-west-1 version: "1.32" availabilityZones: ["eu-west-1a", "eu-west-1b"] managedNodeGroups: - name: smo-control instanceType: m5.2xlarge # 8 vCPU, 32GB RAM desiredCapacity: 1 minSize: 1 maxSize: 1 spot: true volumeSize: 100 volumeType: gp3 labels: role: smo-control node-type: control taints: - key: smo-control value: "true" effect: NoSchedule ssh: allow: true publicKeyName: smo-eks-key iam: withAddonPolicies: ebs: true efs: true - name: smo-workers instanceType: m5.2xlarge # 8 vCPU, 32GB RAM desiredCapacity: 2 minSize: 2 maxSize: 3 spot: true volumeSize: 100 volumeType: gp3 labels: role: smo-worker node-type: worker ssh: allow: true publicKeyName: smo-eks-key iam: withAddonPolicies: ebs: true efs: true addons: - name: vpc-cni version: latest - name: coredns version: latest - name: kube-proxy version: latest - name: aws-ebs-csi-driver version: latest cloudWatch: clusterLogging: enableTypes: []
eksctl create cluster -f eks-multi-node.yaml

Cluster Verification

aws eks list-clusters kubectl get nodes aws eks update-kubeconfig --name smo-test-single # or smo-test-multi

SMO Installation

1. Clone Repository

git clone --recursive "https://gerrit.o-ran-sc.org/r/it/dep"

2. Setup Helm

./dep/smo-install/scripts/layer-0/0-setup-helm3.sh

3. Image Pre-loading (Recommended)

# Generate image list ./dep/smo-install/scripts/sub-scripts/generate-image-list.sh # SSH to each node and pull images (~5GB total) kubectl get nodes -o wide # Get node IPs ssh ec2-user@<NODE_IP> -i ~/.ssh/smo-eks-key.pem sudo ctr image pull <IMAGE_NAME> # Repeat for each image

4. Deploy SMO

Any deployment mode/flavours can be used as per the instructions here.

./dep/smo-install/scripts/layer-2/2-install-oran.sh

Installation Time: 5-7 minutes

Post-Installation

Service Manager Access

  • NodePort Security Group: Requires manual configuration for external access

  • Access Method: Via NodePort on worker nodes

More details related to this configuration are provided as part of the installation script console logs.