zyris-docker컨테이너 노드

서버가 멈추면, 에이전트가 먼저 알아챕니다

zyris-docker는 컨테이너 안에서 돌며 그 컨테이너와 주변의 Docker·Kubernetes 인프라를 Attacca에 연결하는 Zyris 노드입니다. 상태를 보고, 파일을 고치고, 명령을 실행하며, 지켜보던 대상이 멈추면 에이전트 세션을 열어 원인을 찾고 고치게 합니다.

디스플레이가 있는 컴퓨터가 아니라 서버를 위해 만들어졌습니다. 데스크탑 컴퓨터를 연결하려면 Zyris 데스크탑 앱을 사용하세요.

docker-compose.yml
services:
  zyris-docker:
    image: ghcr.io/attacca-cc/zyris-docker:latest
    restart: on-failure:3
    environment:
      - ZYRIS_NODE_TOKEN_FILE=/run/secrets/zyris_token
      - ZYRISD_WATCH_CONTAINERS=web,db
      - ZYRISD_WATCH_PROCESSES=nginx
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./secrets/zyris_token:/run/secrets/zyris_token:ro
      - ./data:/data

zyris-docker가 하는 일

상태 모니터링

시스템 스냅숏과 프로세스 목록, Docker 컨테이너 상태와 로그, Kubernetes 파드와 노드 상태를 monitor capability로 에이전트에게 보여 줍니다.

스스로 복구하는 루프

지정한 프로세스·컨테이너·클러스터를 주기적으로 확인하다가 멈춘 것이 있으면 에이전트 세션을 열어 사건을 넘깁니다. 무작정 재시작하지 않고, 판단은 에이전트가 합니다.

정해진 경로 안에서만

파일 읽기·쓰기와 명령 실행은 설정한 루트 안으로 제한되고, exec에는 시간 제한과 출력 상한이 걸려 있습니다.

Secret으로 토큰 전달

ZYRIS_NODE_TOKEN_FILE로 Kubernetes Secret이나 docker secret을 마운트하세요. 재연결할 때마다 다시 읽으므로 Secret을 교체해도 재시작이 필요 없습니다.

Docker와 Kubernetes 모두

docker.sock을 마운트하면 Docker를, kubeconfig나 클러스터 안의 서비스 계정이 있으면 Kubernetes를 봅니다.

종료 코드가 말해 줍니다

종료 코드 2는 사람이 무언가 해야 한다는 뜻입니다. 재시작 정책에 이 값을 연결해 두면 아무도 보지 않는 로그에 등록 코드만 끝없이 찍히는 일을 막을 수 있습니다.

배포

먼저 등록해서 znt_ 노드 토큰을 받은 다음, 그 토큰을 파일로 컨테이너에 마운트하세요. 토큰 없이 띄우면 컨테이너 로그에 여덟 자리 등록 코드가 찍힙니다. 이 방식을 쓸 때는 ZYRIS_CONFIG_DIR에 이름 있는 볼륨을 붙여야 재시작할 때마다 다시 등록하지 않습니다.

Docker
docker run --rm \
  -e ZYRIS_NODE_TOKEN_FILE=/run/secrets/zyris_token \
  -e ZYRISD_WATCH_CONTAINERS=web,db \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v "$PWD/secrets/zyris_token:/run/secrets/zyris_token:ro" \
  ghcr.io/attacca-cc/zyris-docker:latest

Kubernetes

ZYRISD_WATCH_K8S=1을 켜고 kubeconfig를 마운트하거나 클러스터 안의 서비스 계정을 쓰세요. 토큰은 Secret으로 마운트해 ZYRIS_NODE_TOKEN_FILE로 가리키면 되고, 컨테이너 호스트네임은 재생성 때마다 바뀌므로 ZYRIS_NODE_NAME을 고정값으로 두는 편이 좋습니다.

deployment.yaml
env:
  - name: ZYRIS_NODE_NAME
    value: prod-cluster
  - name: ZYRIS_NODE_TOKEN_FILE
    value: /run/secrets/zyris_token
  - name: ZYRISD_WATCH_K8S
    value: "1"

바이너리와 소스

파일로 받기v0.1.1
SHA256SUMS로 검증
$git clone https://github.com/attacca-cc/zyris-docker.git
$cd zyris-docker && cargo build --release

복구는 판단력 있는 에이전트에게

zyris-docker는 멈춘 서비스를 발견해도 스스로 재시작하지 않습니다. 에이전트가 이 노드의 monitor와 exec로 원인을 확인하고, 필요한 조치를 한 뒤 보고합니다. 이미지는 권한 없는 zyris 사용자로 실행되고, 파일과 명령은 설정한 루트 밖으로 나가지 않습니다.