AWS Cloud
You can install Edge Conductor in an AWS Cloud environment. The installation is done using Helm, a Kubernetes object customization tool.
Below are the components running inside EKS.
Prepare Deploy Server
aws cli installation and setup
Install aws cli
AWS Command Line Interface(AWS CLI) is an open source tool that enables you to interact with AWS services using commands in your command-line shell.
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install
$ aws --version
aws-cli/2.12.7 Python/3.11.4 Linux/5.4.0-196-generic exe/x86_64.ubuntu.20 prompt/off
For more information about installing aws cli, please refer to the link below. https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
aws configure setup
## aws configure setup
$ aws configure
AWS Access Key ID [None]: {{access-key}}
AWS Secret Access Key [None]: {{secret-key}}
Default region name [None]: ap-northeast-2
Default output format [None]: json
## check aws configure
$ cat .aws/credentials
[default]
aws_access_key_id = {{access-key}}
aws_secret_access_key = {{secret-key}}
## Returns details about the IAM user
$ aws sts get-caller-identity
{
"UserId": "userid",
"Account": "account",
"Arn": "arn:aws:iam::account:user/username"
}
access-key
: Access Key for role with control permissions over the AWS Cloud EKSsecret-key
: Secret Key for role with control permissions over the AWS Cloud EKS
kubeconfig setup
Configure kubectl to control the AWS Cloud EKS cluster in installed Edge Conductor.
## aws configure setup
$ aws eks update-kubeconfig --region ap-northeast-2 --name {{eks-cluster-name}}
## Check kubeconfig settings
$ kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* arn:aws:eks:ap-northeast-2:000000000000:cluster/eks-cluster-name arn:aws:eks:ap-northeast-2:000000000000:cluster/eks-cluster-name arn:aws:eks:ap-northeast-2:000000000000:cluster/eks-cluster-name
eks-cluster-name
: Name of the AWS Cloud EKS Cluster
For more detailed information, refer to the following Amazon EKS install-kubectl
Install helm
The Helm community provides methods to install Helm through different package managers. For installation methods using other methods (script, apt, etc.), please refer to the official installation helm page.
From snap
sudo snap install helm --classic
From apt
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
sudo apt-get install apt-transport-https --yes
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm
Check helm installation
$ helm version
version.BuildInfo{Version:"v3.16.4", GitCommit:"7877b45b63f95635153b29a42c0c2f4273ec45ca", GitTreeState:"clean", GoVersion:"go1.22.7"}
$ helm
The Kubernetes package manager
Common actions for Helm:
- helm search: search for charts
- helm pull: download a chart to your local directory to view
- helm install: upload the chart to Kubernetes
- helm list: list releases of charts
Environment variables:
...
Deploy Edge Conductor
After you set up the Deployment Server and install the helm client, add the Helm repo(Chartmuseum) to install the Edge Conductor.
Add Helm repository
helm repo add mellerikat-edge-conductor https://mellerikat.github.io/Edge-Conductor/
List chart repository
helm repo ls
Update information of Helm repo
To update information of available charts locally from chart repositories
helm repo update
Search Helm chart
helm search repo mellerikat-edge-conductor [ --versions {{chart-version}} ]
Display information of chart
helm show chart mellerikat-edge-conductor/edge-conductor [ --version {{chart-version}} ]
Below is an example of checking the repo and chartmuseum after adding the Helm repo.
$ helm repo add mellerikat-edge-conductor https://mellerikat.github.io/Edge-Conductor/
"mellerikat-edge-conductor" has been added to your repositories
$ helm repo list
NAME URL
mellerikat-edge-conductor https://mellerikat.github.io/Edge-Conductor/
$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "mellerikat-edge-conductor" chart repository
Update Complete. ⎈Happy Helming!⎈
$ helm search repo edge-conductor --versions
NAME CHART VERSION APP VERSION DESCRIPTION
mellerikat-edge-conductor/edge-conductor 1.1.3 2.3.1-beta1 A Helm chart for Edge Conductor
mellerikat-edge-conductor/edge-conductor 1.1.0 2.3.1 A Helm chart for Edge Conductor
$ helm show chart mellerikat-edge-conductor/edge-conductor --version 1.1.3
apiVersion: v2
appVersion: 2.3.1-beta1
dependencies:
- condition: backend.enabled
name: backend
repository: ""
- condition: frontend.enabled
name: frontend
repository: ""
description: A Helm chart for Edge Conductor
home: https://github.com/mellerikat/Edge-Conductor
maintainers:
- email: youngjun.jeon@lge.com
name: youngjun.jeon
name: edge-conductor
sources:
- https://github.com/mellerikat/Edge-Conductor
type: application
version: 1.1.3
Create Project Value
helm show values mellerikat-edge-conductor/edge-conductor [ --version {{chart-version}} ] | tee project-values.yaml
Edge Conductor installation supports different infrastructure resource names, permissions, and other settings depending on the Cloud environment.
The downloaded Base charts file contains these settings as default values, which can be modified by the installer if needed.
The modified values should be saved in a YAML file (e.g., project-values.yaml) and used during helm install or upgrade.
Some values must follow the resource names and settings configured in EKS.
For detailed explanation of Value, refer to About Project Value
Install
helm install {{release-name}} --values {{project-value}} --namespace {{namespace}} {{chart-name}} --version {{chart-version}}
Upgrade
helm upgrade --install {{release-name}} --values {{project-value}} --namespace {{namespace}} {{chart-name}} --version {{chart-version}}
Below is an example of executing the commands. Run the appropriate command depending on whether you are installing or upgrading.
$ helm install edge-conductor --values ./project-vaules.yaml --namespace edge-conductor mellerikat-edge-conductor/edge-conductor --version 1.0.0
$ helm upgrade --install edge-conductor --values ./project-values.yaml --namespace edge-conductor mellerikat-edge-conductor/edge-conductor --version 1.0.0
Delete
helm delete {{release_name}} --namespace {{namespace}}
If necessary, the user can stop the service. Below is an example of checking and stopping the currently running helm processes.
$ helm list -nedge-conductor
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
edge-conductor edge-conductor 1 2024-07-16 07:53:36.231641998 +0000 UTC deployed edge-conductor-0.1.7 v2.2.1
$ helm delete edge-conductor --namespace edge-conductor
About Project Value
For reference, the following is an example, and the addition or deletion of env Value values may vary depending on the chart version.
Global parameters
Name | Description | Dependent on Cloud Infra | Unique within EKS Cluster | Example |
---|---|---|---|---|
serviceAccount.name | K8s Service Account Name for running Edge Conductor | O | O | edge-conductor |
nodeSelector.nodegroup | NodeGroup information created in the Cloud for Edge Conductor | O | X | nodegroup: ng-an2-edgecond-mellerikat |
backend parameters
Name | Description | Dependent on Cloud Infra | Unique within EKS Cluster | Example |
---|---|---|---|---|
backend.service.nodePort | Port information for the backend service | O | O | 31020 |
backend.replicaCount | Number of pod replicas for deployment | X | X | 2 |
backend.flower.replicaCount | Number of pod replicas for flower deployment | X | X | 2 |
frontend parameters
Name | Description | Dependent on Cloud Infra | Unique within EKS Cluster | Example |
---|---|---|---|---|
frontend.service.nodePort | Port information for the frontend service | O | O | 31010 |
frontend.replicaCount | Number of pod replicas for deployment | X | X | 1 |
common parameters
Name | Description | Dependent on Cloud Infra | Unique within EKS Cluster | Example |
---|---|---|---|---|
pv.storageClassName | Name of the StorageClass used in PersistentVolume | X | X | efs-sc-edgecond |
pv.csi.vloumeHandle | EFS ID used in the PV StorageClass | O | O | fs-00000000000000000 |
redis.url | Address of the ElasticCache (Redis) in AWS | O | O | rediss://master.redis.xxxxx.apn2.cache.amazonaws.com:6379 |
secret.objects.name | AWS Secret Manager information | O | X | /parameter/ap-northeast-2/mellerikat/dev/rds |
configMap.data.BACKEND_CORS_ORIGINS | Edge Conductor domain information defined in Route53 | O | X | '["https://edgecond.meerkat-dev.com"]' |
configMap.data.BACKEND_ENDPOINT | Edge Conductor domain information defined in Route53 | O | X | https://edgecond.meerkat-dev.com |
configMap.data.MYSQL_NAME | Database schema name for RDS MySQL | O | X | edge_conductor |
configMap.data.SERVER_IP | Edge Conductor domain information defined in Route53 | O | X | edgecond.meerkat-dev.com |
configMap.data.WORKSPACE | Unique name of the installed Edge Conductor for the summary server | X | X | edge_conductor_meerkat_dev |
configMap.data.LDAP_HOST | LDAP information (leave empty if unsupported) | X | X | * |
configMap.data.UPDATE_CENTER_URL | Update Center URL information | X | X | https://xxxxxxxx.execute-api.ap-northeast-2.amazonaws.com/v1 |
The following is the values file in edge-conductor chart version 1.1.0
values.yaml
$ helm show values edge-conductor-1.1.0.tgz | tree values.yaml
# Default values for edge-conductor.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
## Global values are values that can be used from templetes or subchart(backend/frontend)
##
global:
## Set the deployed serviceAccount name
serviceAccount:
name: "edge-conductor"
## Set the nodeSelector
nodeSelector:
nodegroup: ng-an2-edgecond-mellerikat
## If not set, backend/frontend image tag will be "appVersion" in Chart.yaml.
# tag: "2.2.1"
backend:
## Deploy backend
enabled: true
celery:
enabled: true
replicaCount: 1
flower:
enabled: false
replicaCount: 1
service:
nodePort: 31070
image:
repository: "edge-conductor/backend"
pullPolicy: IfNotPresent
## If not set, backend image tag will be .Values.global.tag.
# tag: "2.2.1"
replicaCount: 1
service:
nodePort: 31020
internal:
enabled: true
frontend:
## Deploy frontend
enabled: true
image:
repository: "edge-conductor/frontend"
pullPolicy: IfNotPresent
## If not set, backend image tag will be .Values.global.tag.
# tag: "2.2.1"
replicaCount: 1
service:
nodePort: 31010
pv:
## Use 'pv-{{ include "edge-conductor.fullname" . }}' by default
nameOverride: ""
csi:
volumeHandle: fs-00000000000000000
storageClassName: efs-sc-edgecond
storage: 30Gi
## Use 'pvc-{{ include "edge-conductor.fullname" . }}' by default
pvc:
nameOverride: ""
redis:
url: rediss://master.redis-an2-meerkat-dev-private.xxxxxx.apn2.cache.amazonaws.com:6379
secret:
## If you need additional secret data
#
data: []
# - key: "MYSQL_USER"
# objectName: "dbusername"
objects:
name: "/parameter/ap-northeast-2/mellerikat/dev/rds"
## If you need additional objects data
#
additionalObjects: []
# - objectName: "/parameter/ap-northeast-2/mellerikat/dev/rds"
# objectType: "secretsmanager"
# jmesPath:
# - path: "username"
# objectAlias: "dbusername"
## Use '{{ include "edge-conductor.fullname" . }}-secretprovider' by default
secretProvider:
nameOverride: ""
configMap:
## Use config-{release-name} by default
nameOverride: ""
additionalConfig: {}
data:
BACKEND_CORS_ORIGINS: '["https://edgecond.meerkat-dev.com"]'
BACKEND_ENDPOINT: https://edgecond.meerkat-dev.com
MYSQL_NAME: edgecond_db
SERVER_IP: edgecond.meerkat-dev.com
WORKSPACE: edgecond.meerkat-dev
## The key below is given a default value, please modify it out if you want to change it.
# CONTAINER_NAME: "edgecond" # sh-script에서 사용 -> 삭제
# DAILY_SUMMARY_SERVER_URL: "http://0.0.0.0:46599"
# HOSTGID: HOSTGID "1175"
# HOSTUID: HOSTUID "1175"
# JWT_SECRET: "edgecond@lge"
# LDAP_HOST: ""
# LOGGING_COUNT: "90"
# LOGGING_LEVEL: "INFO"
# LOGGING_ROTATE: "0:00"
# MYSQL_NAME: "edgecond_db" # config에서 사용
# PROJECT_NAME: "Mellerikat Edge Conductor"
# SQLALCHEMY_POOL_MAX_OVERFLOW: "10"
# SQLALCHEMY_POOL_SIZE: "5"
# UPDATE_CENTER_URL: ""
# VAULT_CATOZ: ""
# VAULT_NAMESPACE: ""
# VAULT_TOKEN: ""
# WEBHOOK_TEAMS: ""
#