AWS Cloud
AWS Cloud 환경에 Edge Conductor 설치할 수 있습니다. 쿠버네티스 객체 사용화 도구인 Helm을 사용하여 설치합니다.
아래는 EKS내부에서 수행되는 컨포넌트들 입니다.
Deploy Server 준비
aws cli 설치 및 구성하기
aws cli 설치
AWS Command Line Interface(AWS CLI)는 명령줄 셸의 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 오픈 소스 도구입니다.
$ 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
aws cli 설치에 대한 자세한 사항은 아래 링크를 참조하세요. https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
aws configure 구성
## aws configure 설정
$ 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
## 설정 확인
$ cat .aws/credentials
[default]
aws_access_key_id = {{access-key}}
aws_secret_access_key = {{secret-key}}
## IAM user에 대한 구성 확인
$ aws sts get-caller-identity
{
"UserId": "userid",
"Account": "account",
"Arn": "arn:aws:iam::account:user/username"
}
access-key
: Edge Conductor 설치 AWS Cloud EKS 제어권한을 가진 역할 Access Keysecret-key
: Edge Conductor 설치 AWS Cloud EKS 제어권한을 가진 역할 Access Key
kubeconfig 설정
Edge Conductor 설치할 AWS Cloud EKS 클러스터를 제어하기위해 kubectl을 설정합니다.
## kubeconfig 설정
$ aws eks update-kubeconfig --region ap-northeast-2 --name {{eks-cluster-name}}
## kubeconfig 설정 확인
$ 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
: Edge Conductor를 설치할 AWS Cloud EKS Cluster의 이름
Amazon EKS install-kubectl 에서 좀 더 상세한 정보를 참고할 수 있습니다.
helm 설치
Helm Community는 다양한 package manager를 통해 설치를 할수있는 방법을 제공합니다. 다른 방식(script, apt 등)으로의 설치방법은 official installation helm page을 참조하세요.
snap으로 설치
sudo snap install helm --classic
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
helm 설치 확인
$ 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:
...
Edge Conductor 설치하기
Deploy Server 설정 및 helm client 설 치 이후, Helm repo(Chartmuseum)을 추가하여 Edge Conductor를 설치합니다.
Helm repo 추가하기
helm repo add mellerikat-edge-conductor https://mellerikat.github.io/Edge-Conductor/
Helm repo 목록 확인하기
helm repo ls
Helm repo 정보 갱신하기
사용 가능한 차트의 정보를 차트 저장소로부터 업데이트하려면 다음 명령어를 실행하세요
helm repo update
Helm chart 검색
helm search repo mellerikat-edge-conductor [ --versions {{chart-version}} ]
Chart 정보 출력하기
helm show chart mellerikat-edge-conductor/edge-conductor [ --version {{chart-version}} ]
아래는 Helm repo 추가 후 repo 및 chart정보를 확인한 예시입니다.
$ 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 설치 Cloud 환경에 따라서, 인프라 자원 이름, 권한 그밖의 설정값들이 다른 경우를 지원합니다.
다운받은 Base charts 파일에는 위 설정들이 기본값들로 저장되어 있으며, 설치자가 필요한 경우 값을 수정할 수 있습니다.
수정값들을 YAML 파일(예. project-values.yaml)에 저장하고, helm install 혹은 upgrade 할 때 사용하도록 합니다.
일부항목은 EKS에서 설정되어 있는 리소스의 이름 및 설정 값들을 따라야합니다.
Value 상세한 설명은 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}}
아래는 명령어 수행의 예시이며, Install 혹은 Upgrade 상황에 맞는 명령어를 수행하면 됩니다.
$ 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}} -n {{namespace}}
필요한 경우 사용자는 서비스를 종료할 수 있으며 아래는 현재 helm 수행 중인 리스트 확인 및 종료하는 예시입니다.
$ helm list -n edge-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 -n edge-conductor
About Project Value
참고로 아래는 1.0.0 차트 버전에 포함되어 있는 기본값들 확인 예제 입니다. 하나의 예제이며 차트 버전에 따라 env Value 값의 추가 삭제는 있을 수 있습니다.
Global parameters
Name | Description | Cloud 인프라 의존 값 | EKS Cluster내 유일값 | 예제 |
---|---|---|---|---|
serviceAccount.name | Edge Conductor 실행될 K8s Service Account Name | O | O | edge-conductor |
nodeSelector.nodegroup | Edge Conductor 실행될 Cloud에서 생성된 NodeGroup 정보 | O | X | nodegroup: ng-an2-edgecond-mellerikat |
backend parameters
Name | Description | Cloud 인프라 의존 값 | EKS Cluster내 유일값 | 예제 |
---|---|---|---|---|
backend.service.nodePort | backend Service 포트정보 | O | O | 31020 |
backend.replicaCount | Deployment안에서 수행될 pod relicaset | X | X | 2 |
backend.flower.replicaCount | flower Deployment안에서 수행될 pod relicaset | X | X | 2 |
frontend parameters
Name | Description | Cloud 인프라 의존 값 | EKS Cluster내 유일값 | 예제 |
---|---|---|---|---|
frontend.service.nodePort | frontend Service 포트정보 | O | O | 31010 |
frontend.replicaCount | Deployment안에서 수행될 pod relicaset | X | X | 1 |
common parameters
Name | Description | Cloud 인프라 의존 값 | EKS Cluster내 유일값 | 예제 |
---|---|---|---|---|
pv.storageClassName | PersistentVolume에서 사용할 StorageClass 이름 | X | X | efs-sc-edgecond |
pv.csi.vloumeHandle | pv storageClass에서 사용할 efs id | O | O | fs-00000000000000000 |
redis.url | aws에 설치된 elasticcache(redis) 주소 | O | O | rediss://master.redis.xxxxx.apn2.cache.amazonaws.com:6379 |
secret.objects.name | AWS sceretmanager 정보 | O | X | /parameter/ap-northeast-2/mellerikat/dev/rds |
configMap.data.BACKEND_CORS_ORIGINS | Route53에 정의된 Edge Conductor Domain정보 | O | X | '["https://edgecond.meerkat-dev.com"]' |
configMap.data.BACKEND_ENDPOINT | Route53에 정의된 Edge Conductor Domain정보 | O | X | https://edgecond.meerkat-dev.com |
configMap.data.MYSQL_NAME | rds mysql에서 사용할 database schema | O | X | edge_conductor |
configMap.data.SERVER_IP | Route53 정의된 edge conductor domain | O | X | edgecond.meerkat-dev.com |
configMap.data.WORKSPACE | 서머리서버에서 사용될 설치된 Edge Conductor고유이름 | X | X | edge_conductor_meerkat_dev |
configMap.data.LDAP_HOST | ldap 정보 (미지원인 경우 "") | X | X | * |
configMap.data.UPDATE_CENTER_URL | Update Center URL 정보 | 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: ""
#