Skip to content

operations factory bc testbed

JJong-03 edited this page Jun 17, 2026 · 5 revisions

운영 — factory-b/c 테스트베드

factory-b/c VM의 local dummy generator가 hostPath outbox에 JSON을 쓰고, K3s edge-iot-publisher가 AWS IoT Core로 전송하는 운영 절차다.

데이터 경로

VM local dummy generator
  -> /var/lib/aegis/outbox/<message_id>.json
  -> K3s edge-iot-publisher
  -> aegis/{factory_id}/{source_type}
  -> IoT Rule
  -> S3 raw/{factory_id}/{source_type}/...
  -> DataProcessor
  -> DynamoDB + S3 processed

local dummy publisher systemd는 legacy 경로다. 현재 publish 주체는 K3s edge-iot-publisher 하나여야 한다.

Worker 준비

# factory-b worker
sudo mkdir -p /var/lib/aegis/outbox
sudo chown -R oosnim:oosnim /var/lib/aegis/outbox
chmod 750 /var/lib/aegis/outbox

# factory-c worker
sudo mkdir -p /var/lib/aegis/outbox
sudo chown -R aegis:aegis /var/lib/aegis/outbox
chmod 750 /var/lib/aegis/outbox

worker node에는 aegis.workload-node=true label이 있어야 한다. hostPath는 node-local이므로 generator와 publisher가 같은 worker를 사용해야 한다.

Generator는 outbox/tmp에 작성한 뒤 root로 atomic rename한다. publish 성공 파일은 삭제되고 invalid JSON은 outbox/quarantine/으로 이동한다.

Generator 제어

접속 정보는 기본적으로 scripts/ops/dummy-generators.env에서 읽는다. 별도 파일은 AEGIS_DUMMY_GENERATORS_ENV로 지정한다.

scripts/ops/manage-dummy-generators.sh start factory-b
scripts/ops/manage-dummy-generators.sh start factory-c
scripts/ops/manage-dummy-generators.sh status factory-b
scripts/ops/manage-dummy-generators.sh status factory-c

인수 없이 stop-dummy-generators.sh를 실행하면 b/c를 모두 정지하고, 설치돼 있다면 legacy local publisher도 함께 정지한다.

scripts/destroy/stop-dummy-generators.sh

Hub만 중지하고 data-pipeline과 Spoke publisher를 유지할 때는 generator를 멈출 필요가 없다. data-pipeline을 삭제하거나 publisher를 내릴 때는 outbox 누적 방지를 위해 먼저 정지한다.

Hub 재연결

HUB_ONLY_RECONNECT=true scripts/build/register-spoke-factory-b.sh
HUB_ONLY_RECONNECT=true scripts/build/register-spoke-factory-c.sh
scripts/ops/check-spoke-publisher-safety.sh factory-b factory-c

이 모드는 기존 publisher를 sync/restart하지 않는다. GitOps values/image 변경을 배포할 때만 SYNC_SPOKE_APP=true를 사용한다.

Outbox 검증

worker에서:

find /var/lib/aegis/outbox -maxdepth 2 -type f -print
systemctl status aegis-factory-b-dummy-generator.service --no-pager
systemctl status aegis-factory-c-dummy-generator.service --no-pager

정상 흐름에서는 새 JSON이 생성된 뒤 publisher가 처리해 root 파일 수가 감소한다. 파일이 계속 쌓이면 다음 순서로 확인한다.

  1. generator 시각 동기화: timedatectl, 필요 시 sudo chronyc makestep
  2. publisher Pod Ready/로그와 IoT Secret mount
  3. worker label과 publisher node placement
  4. DNS/네트워크와 IoT endpoint 연결
  5. quarantine 파일과 JSON schema

오래된 파일 자동 삭제는 데이터 손실 작업이다. scripts/ops/aegis-outbox-cleanup.sh는 기본 1,440분보다 오래된 root JSON을 삭제하므로 timer 적용 전에 보존 정책을 승인한다.

Publisher 안전 검증

scripts/ops/check-spoke-publisher-safety.sh factory-b factory-c

정상 기준:

  • factory별 publisher Deployment 1개
  • Running publisher Pod 1개 이하
  • Deployment strategy Recreate
  • legacy local publisher service 정지

두 publisher가 동시에 동작하면 중복 publish 또는 MQTT client-id churn이 발생할 수 있다.

AWS IoT Fleet Indexing의 connected 상태가 false인데 S3 raw 데이터가 들어오는 경우는 short-lived publisher image, Thing name과 다른 MQTT client ID, legacy publisher 동시 실행을 우선 확인한다. 상세 기준은 IoT Fleet 연결성을 따른다.

직접 확인:

kubectl --kubeconfig ~/.aegis/secrets/kubeconfig/factory-b.tailscale-ip.kubeconfig \
  -n ai-apps get deploy,pod -l app.kubernetes.io/component=edge-iot-publisher -o wide

kubectl --kubeconfig ~/.aegis/secrets/kubeconfig/factory-c.tailscale-ip.kubeconfig \
  -n ai-apps get deploy,pod -l app.kubernetes.io/component=edge-iot-publisher -o wide

End-to-end 검증

aws s3 ls s3://aegis-bucket-data/raw/factory-b/ --recursive --region ap-south-1
aws s3 ls s3://aegis-bucket-data/raw/factory-c/ --recursive --region ap-south-1

aws s3 ls s3://aegis-bucket-data/processed/factory-b/ --recursive --region ap-south-1
aws s3 ls s3://aegis-bucket-data/processed/factory-c/ --recursive --region ap-south-1

IoT Rule, DataProcessor 로그, DynamoDB FACTORY#factory-b/cLATEST도 함께 확인한다. raw만 있고 processed가 없으면 publisher가 아니라 data-pipeline을 조사한다.

알려진 VM 이슈

  • factory-c VirtualBox NAT 주소가 중복되면 K3s node-ipflannel-iface를 host-only NIC로 고정한다.
  • factory-b clock drift가 크면 sudo chronyc makestep 후 파일 timestamp와 S3 LastModified를 다시 비교한다.

관련 문서: Data Pipeline 운영, Hub 재구축, Dummy Generator 백테스트

Aegis-Pi Wiki

· 대표 문서 목록은 홈의 문서 탐색 표 참조

시작하기

요구사항

핵심 개념

아키텍처

컴포넌트 (Edge → Cloud → Dashboard)

Dashboard & 운영

시나리오 · 사례 · 참조

Clone this wiki locally