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
AWS Account with IAM user having
`AdministratorAccess`,`PowerUserAccess`CLI Tools: AWS CLI, kubectl, eksctl
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.pemEKS 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.yamlCluster Verification
aws eks list-clusters
kubectl get nodes
aws eks update-kubeconfig --name smo-test-single # or smo-test-multiSMO 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.sh3. 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 image4. Deploy SMO
Any deployment mode/flavours can be used as per the instructions here.
./dep/smo-install/scripts/layer-2/2-install-oran.shInstallation 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.