- ๋ฆฌํฌ์งํฐ๋ฆฌ ๊ตฌ์กฐ
- ํ๊ฒฝ ์ค์ ๋ฐ ๋ฒ์
- ์ปดํฌ๋ํธ ์ญํ
- ์ค์ผ์คํธ๋ ์ด์ ๊ตฌ์ฑ
- ์ปดํฌ๋ํธ ์ค์น
- ๋ก๊ทธ ํ์ธ
- ๊ธฐํ ์ปค๋งจ๋ ๋ ํผ๋ฐ์ค
- ๋ฏธ์ ๊ตฌ์ฑ
- ์ฐธ๊ณ ์๋ฃ
SDI-Orchestration/
โโโ MALE-Advisor/ # MALE ๊ธฐ๋ฐ Advisor ํ์ผ
โ โโโ MALE-Advisor-deploy.yaml # Policy Engine Deployemnt
โโโ MALE-Profiler/ # MALE ๊ธฐ๋ฐ Profiler ํ์ผ
โ โโโ MALE-Profiler-deploy.yaml # Analysis Engine Deployemnt
โโโ Metric-Collector/ # ๋ฉํธ๋ฆญ ์์ง ยท ์ ์ฌ ์คํ ๋งค๋ํ์คํธ
โ โโโ Metric-Collector-deploy.yaml # ๋ฉํธ๋ฆญ์ฝ๋ ํฐ ํ์ ๋ชจ๋ ๋ฐ ยท InfluxDB ํฌํจ
โโโ Mission/ # ๋ฏธ์
yaml
โ โโโ fastapi_image_server.yaml # show yolo image server
โ โโโ yolo-backbone-move.yaml # yolo backbnone-layer Deployment
โ โโโ yolo-neck-head.yaml # yolo neck&head layer Deploymen
โโโ SDI-Scheduler/ # SDI์ค์ผ์ค๋ฌ ๋ฐฐํฌ ํ์ผ
โ โโโ SDI-Scheduler-deploy.yaml # SDIโScheduler Deployment ยท RBAC
โ โโโ test-SDI-Scheduler.yaml # ์ค์ผ์ค๋ฌ ๋์ ๊ฒ์ฆ์ฉ ์ํฌ๋ก๋
โโโ README.md # ํ์ฌ ๋ฌธ์
| ๊ฒฝ๋ก | ์ค๋ช |
|---|---|
| MALE-Advisor/MALE-Advisor-deploy.yaml | policyโengine Deployment ๋ฅผ ์ ์ํ๋ค. |
| MALE-Profiler/MALE Profiler-deploy.yaml | analysisโengine Deployment ๋ฅผ ์ ์ํ๋ค. |
| Metric-Collector/Metric-Collector-deploy.yaml | metric-collectorย +ย InfluxDBย +ย metricsโingesterโฏDeployment ๋ฐ ๊ด๋ จย SecretยทService ๋ฅผ ์ผ๊ด ์ ์ํ๋ค. |
| SDI-Scheduler/sdiโschedulerโdeploy.yaml | ServiceAccountยทClusterRoleยทBindingย +ย Deployment ๋ก ๊ตฌ์ฑ๋ SDIย Scheduler ๋งค๋ํ์คํธ๋ค. ํฐํ๋ด ๋ฐฐํฐ๋ฆฌ ๋ฐ ์์น์ ๋ณด๋ฅผ ๊ธฐ๋ฐํ์ฌ ์ค์ผ์ค๋ง์ ์งํํ๋ค. |
| SDI-Scheduler/test-SDI-Scheduler.yaml | schedulerName: SDI-Scheduler ์ค์ผ์ค๋ฌ ๋์ ์ฌ๋ถ๋ฅผ ์ฆ์ ํ์ธํ ์ ์๋ ๊ฐ๋จํ ์ํฌ๋ก๋ ์ด๋ค. |
Control-plane(ํฐํ๋ด ์๊ฒฉ PC) ์ ์ฃผ์ ์ํํธ์จ์ด ๋ฐ ๋ฒ์ ์ ๋ณด Control-plane์ด ํฐํ๋ด ์๊ฒฉ PC ๊ฐ ์๋๊ฒฝ์ฐ, ROS๋ ๊ด๋ จ ์๋ ์ ์ฐธ๊ณ ๋ฐ๋๋๋ค.
| ํญ๋ชฉ | ๋ฒ์ / ์ธ๋ถ ์ ๋ณด |
|---|---|
| ROS 2 | ros2-jazzy |
| Kernel | Linux 6.11.0-26-generic |
| Architecture | x86-64 |
| Operating System | Ubuntu 24.04.2 LTS |
| k3s | v1.32.5+k3s1 |
| Container Runtime | containerd://2.0.5-k3s1.32 |
| ๋ชจ๋ | ์ค๋ช |
|---|---|
| ๐๏ธ IaC Provider | IaC ๊ธฐ๋ฐ ์ํฌ๋ก๋ YAML ์๋ ์์ฑ ๋ฐ ์๋ ๋ฐฐํฌ ๋ชจ๋ |
| ๐ฅ๏ธ API Server | ์ํฌ๋ก๋ ๊ด๋ฆฌ ๋ฐ ์ํฌ๋ก๋ ์ํ ๊ฒฐ์ ๋ชจ๋ |
| ๐ง Resource Controller | ์ํฌ๋ก๋ CR(CustomResource) ์ธ์คํด์ค ๊ด๋ฆฌ ๋ชจ๋ |
| ๐ Metric Collector | TurtleBot ๋ฐ ์์คํ ๋ฉํธ๋ฆญ ์์ง ๋ชจ๋ |
| ๐ MALE Profiler | ์์ง๋ ๋ฉํธ๋ฆญ ๊ธฐ๋ฐ ์ํฌ๋ก๋ ํ๋กํ์ผ๋ง ๋ชจ๋ |
| ๐๏ธ SDI Scheduler | ํผํฉ ์ค์๋ ๊ธฐ๋ฐ ์ํฌ๋ก๋ ์ค์ผ์ค๋ง ์ํ ๋ชจ๋ |
| ๐งญ MALE Advisor | AโLโE Score ๊ธฐ๋ฐ MALE ์ ์ฑ ๊ฒฐ์ ๋ชจ๋ |
| ๐ SDx Manager | SDx ์ํฌ๋ก๋ ์คํ ์ค์ผ์ผ๋ง ๋ฐ ๋ง์ด๊ทธ๋ ์ด์ ๊ด๋ฆฌ ๋ชจ๋ |
# ControlโPlane์์ ์คํ
curl -sfL https://get.k3s.io | sh -
sudo cat /var/lib/rancher/k3s/server/node-token # ํ ํฐ ๋ณต์ฌ
# Worker(Node/TurtleBot)์์ ์คํ, CONTROL-PLANE_IP, CONTROL-PLANE_TOKEN ๊ฐ ๋ช
๋ น์ด์ ๋ฃ๊ธฐ
curl -sfL https://get.k3s.io | K3S_URL=https://<CONTROLโPLANE_IP>:6443 K3S_TOKEN=<CONTROLโPLANE_TOKEN> sh -ํ๋๋ค์ ์ ๋ณด๋ฅผ ์์ฝ๊ฒ ํ์ธํ๊ธฐ ์ํด KETI์์๋ ์ค์นํ์ต๋๋ค. ํ์๊ฐ ์๋ ์ ํ์ ๋๋ค.
mkdir k9s && cd k9s
wget https://github.com/derailed/k9s/releases/download/v0.26.7/k9s_Linux_x86_64.tar.gz
tar zxvf k9s_Linux_x86_64.tar.gz
sudo mv k9s /usr/local/bin/
cp /etc/rancher/k3s/k3s.yaml ~/.kube/config # k9s์์ k3s ํด๋ฌ์คํฐ ์กฐํ ๊ฐ๋ฅk9s ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํด UI๊ฐ ์คํ๋๋ฉด ์ ์ ์ค์น๋ ๊ฒ์
๋๋ค.
git clone https://github.com/sungmin306/SDI-Orchestration.git
cd SDI-Orchestration/Metric-Collector/
# ์ฃผ์ โ์ง์ ์ค์ โ ์ ํ ๋ถ๋ถ(12ยท13ยท21ยท22ํ) id,pw ์ค์
vi Metric-Collector-deploy.yamlkubectl apply -f Metric-Collector-deploy.yaml์ปดํฌ๋ํธ ์ํ๋ ๋ค์๊ณผ ๊ฐ์ด ํ์ธํ ์ ์์ต๋๋ค.
kubectl get pods -n tbot-monitoring # ๋๋ k9s
- ServiceAccount/RBACย :
kube-system๋ด๋ถ์์ PodBinding ๊ถํ๋ง ์ต์ ๋ถ์ฌ. - Deploymentย : ENV ๋ก Influxย Endpointย /ย Token ์ฃผ์
ํ๋ฉฐ
schedulerName: sdi-scheduler๋ก ํธ์ถ.
๋ธ๋ผ์ฐ์ ์์ http://<CONTROLโPLANE_IP>:32086 ์ ์ ์ดํ ์๋ ์ด๋ฏธ์ง ๋๋ก ๋ฐ๋ผ๊ฐ์๋ฉด ๋ฉ๋๋ค.
cd ../SDI-Scheduler
vi SDI-Scheduler-deploy.yaml # 43ํ ์ฃผ์์โ์ง์ ์ค์ โ ์ ํ์๋ ๋ถ๋ถ์ ๋ณต์ฌํ ํ ํฐ ๊ฐ ๋ฃ๊ธฐkubectl apply -f SDI-Scheduler-deploy.yaml์ํ ํ์ธ:
kubectl get pod -n kube-system # ๋๋ k9s
์ค์ผ์ค๋ง์ ๋ก๊ทธ(๋ก๊ทธ ํ์ธ ๋ฐฉ๋ฒ ํ๋จ ๊ธฐ์ )
test-SDI-Scheduler.yaml ํ์ผ 6๋ฒ์งธ์ค ์ฒ๋ผ schedulerName: schedulerName: sdi-scheduler๋ฅผ ์ ๊ณ ์ฌ์ฉํ๋ฉด๋ฉ๋๋ค.(์ฃผ์ ํ์ธ)
kubectl apply -f test-SDI-Scheduler.yaml # sdi-scheduler ํ์ธanalysis-engine์ด ํฌํจ๋์ด์์ผ๋ฉฐ, ์ค์ผ์ค๋ง ํ ์ํฌ๋ก๋ ๋ถ์ ๊ธฐ๋ฐ ์ํฌ๋ก๋-๋
ธ๋ ๋ฐฐ์น ๊ฒฐ์ ํ๋ ๋ชจ๋์ด๋ค.
policy-engine์ด์ด ํฌํจ๋์ด์์ผ๋ฉฐ, MALE ๊ธฐ๋ฐ ์ ์ฑ
์ค์ ํ๋ ๋ชจ๋์ด๋ค.
cd ../MALE-Advisor # MALE-Advisor ๋ฐฐํฌ
kubectl apply -f MALE-Advisor-deploy.yaml
cd ../MALE-Profiler # MALE-profiler ๋ฐฐํฌ
kubectl apply -f MALE Profiler-deploy.yaml
์ํ ํ์ธ:
kubectl get pod -n orchestration-engines # ๋๋ k9s
analysis-engine๋ก๊ทธ(๋ก๊ทธ ํ์ธ ๋ฐฉ๋ฒ ํ๋จ ๊ธฐ์ )
policy-engine๋ก๊ทธ(๋ก๊ทธ ํ์ธ ๋ฐฉ๋ฒ ํ๋จ ๊ธฐ์ )
Tip ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ Deployment ํํ๋ก ์คํ๋๋ฏ๋ก ์๋ ์์ฑ๋ ํ๋ ์ด๋ฆ ์ถ์ ํ ์ ์์ด ๋ก๊ทธ ํ์ธ ๋ฐฉ๋ฒ์ ์ถ๊ฐ๋ก ์์ฑํฉ๋๋ค.
| ๋ฐฉ๋ฒ | ๋ช ๋ น |
|---|---|
| kubectl | kubectl logs -f <ํ๋์ด๋ฆ> -n <๋ค์์คํ์ด์ค> |
| k9s | ํ๋ ์ ํ ํ Space โ L |
| ๋ชฉ์ | ๋ช ๋ น | ๋น๊ณ | |
|---|---|---|---|
| ๋ฆฌ์์ค ์ ์ฉ | kubectl apply -f <file> |
์ ์ธ์ ๊ด๋ฆฌ | |
| ๋ฆฌ์์ค ์ญ์ | kubectl delete -f <file> |
โ | |
| ๋ค์์คํ์ด์ค ์ ํ | kubectl config set-context --current --namespace=<ns> |
ํธ์ ์ค์ | |
| ์ค์ผ์ค๋ฌ ๊ฒ์ฆ | `kubectl describe pod <ํ๋์ด๋ฆ> | grep Scheduler:` | sdi-scheduler ํ์ธ |
- ์ญํ : TurtleBot์์ ์ด๋ฏธ์ง๋ฅผ ์ถ์ถํ์ฌ Backbone ๋ชจ๋ธ(์ด๊ธฐ ์ปจ๋ณผ๋ฃจ์ ๋ ์ด์ด)์ ์คํํฉ๋๋ค. ์ถ์ถ๋ ํน์ง ๋งต(feature map)์ Neck-Head ์๋น์ค๋ก ์ ์กํฉ๋๋ค.
- ๊ตฌ์ฑ ํ์ผ:
yolo-backbone-move.yaml - ์ฃผ์ ํ๊ฒฝ ๋ณ์:
TURTLEBOT_IMAGE_SOURCE_URL: TurtleBot ์ด๋ฏธ์ง ์คํธ๋ฆผ URLPROCESS_URL: Neck-Head ์๋น์ค์ ์ ๋ ฅ URL (์:http://yolo-neck-head-service.default.svc.cluster.local:8080/process_feature)UPDATE_PERIOD_SEC: ์ด๋ฏธ์ง ์ถ์ถ ๋ฐ ์ฒ๋ฆฌ ์ฃผ๊ธฐ(์ด)
- ์ํคํ ์ฒ ์ ์ฝ: ์ด ํ๋๋ ARM64 ํ๊ฒฝ์์๋ง ๋์ํ๋๋ก ์ค์ ๋์ด ์์ต๋๋ค.
- ๋์ ๋ฐฉ์:
UPDATE_PERIOD_SEC์ฃผ๊ธฐ์ ๋ฐ๋ผ TurtleBot์์ ์ด๋ฏธ์ง GET- Backbone ๋ชจ๋ธ๋ก ํน์ง ๋งต(feature map) ์ถ์ถ
- ์ถ์ถ๋ ํน์ง ๋งต์ JSON์ผ๋ก ์ง๋ ฌํํ์ฌ Neck-Head ์๋น์ค์ POST
- ์ฒ๋ฆฌ ๋ก๊ทธ๋ฅผ stdout์ผ๋ก ์ถ๋ ฅ(์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์๋ ์์ง)
- ์ญํ : Backbone ์๋น์ค์์ ์ ์ก๋ ํน์ง ๋งต์ ๋ฐ์ Neck ๋ ์ด์ด์ Head ๋ ์ด์ด๋ฅผ ์์ฐจ์ ์ผ๋ก ์คํํ ๋ค, ์ต์ข ์์ธก ๊ฒฐ๊ณผ(๋ฐ์ด๋ฉ ๋ฐ์ค๊ฐ ๊ทธ๋ ค์ง ์ด๋ฏธ์ง ๋๋ JSON)๋ฅผ FastAPI ์๋ฒ๋ก ์ ๋ฌํ์ฌ ์ฌ์ฉ์์๊ฒ ์ด๋ฏธ์ง๋ก ํ์ํฉ๋๋ค.
- ๊ตฌ์ฑ ํ์ผ:
yolo-neck-head.yaml - ์ฃผ์ ํ๊ฒฝ ๋ณ์:
BACKBONE_SERVICE_URL: Backbone ์๋น์ค์ ์ฒ๋ฆฌ URL (์:http://yolo-backbone-service.default.svc.cluster.local:8080/process_feature)FASTAPI_SERVER_URL: ๊ฒฐ๊ณผ ์ด๋ฏธ์ง๋ฅผ ํ์ํ FastAPI ์๋ฒ URL (์:http://fastapi-service.default.svc.cluster.local:8000/display)SEND_INTERVAL_SEC: ์ฒ๋ฆฌ ์ฃผ๊ธฐ(์ด)
- ๋์ ๋ฐฉ์:
- Backbone ์๋น์ค๋ก๋ถํฐ ํน์ง ๋งต JSON GET
- Neck ๋ชจ๋ธ์ ํตํด ๋ ์ด์ด ๊ฐ ์ค์ผ์ผ ์กฐ์ ๋ฐ ํฉ์ฑ
- Head ๋ชจ๋ธ์ ํตํด ๊ฐ์ฒด ๊ฐ์ง ์คํ(๋ฐ์ด๋ฉ ๋ฐ์ค ์์ฑ)
- ๊ฒฐ๊ณผ ์ด๋ฏธ์ง๋ฅผ FastAPI ์๋ฒ์ POSTํ์ฌ ์น UI์ ํ์
๋ชจ๋ธ ๋ถํ ์๋ด: ์ ์ฒด YOLO ๋ชจ๋ธ์ Backbone(์ด๊ธฐ ํน์ง ์ถ์ถ)๊ณผ Neck-Head(ํ์ฒ๋ฆฌ ๋ฐ ๊ฐ์ฒด ์์ธก) ๋ ์ด์ด๋ก ๋ถํ ํจ์ผ๋ก์จ ์ฃ์ง ๋๋ฐ์ด์ค(TurtleBot)์ ํด๋ฌ์คํฐ ํ๊ฒฝ ๊ฐ์ ์ฐ์ฐ ๋ถํ๋ฅผ ๋ถ์ฐ์ํต๋๋ค.
๊ฐ ์ํฌ๋ก๋๋ณ YAML ํ์ผ์ ์ฐธ๊ณ ํ์ฌ ์๋ ๋ช ๋ น์ผ๋ก ๋ฐฐํฌํฉ๋๋ค:
# Mission ๋๋ ํ ๋ฆฌ ์ด๋
cd ../Mission
kubectl apply -f fastapi_image_server.yaml
kubectl apply -f yolo-neck-head.yaml
kubectl apply -f yolo-backbone-move.yaml- Kubernetes ๊ณต์: https://kubernetes.io/docs/
- InfluxDB v2 Docs: https://docs.influxdata.com/influxdb/v2/
- Scheduler Framework: https://kubernetes.io/docs/concepts/scheduling-eviction/scheduling-framework/
- ํฐํ๋ด ํ์ ํ๋ก์ธ์ค ์ค์น: https://github.com/KopenSDI/SDI-Turtlebot-Setting