Community

차량의 컨테이너용 멀티-노드 서비스 컨트롤러, hirte를 소개합니다

요즘의 제 관심 분야 중 하나는 바로 ADAS, Digital Cockpit, Infotainment 같은 차량용 소프트웨어를 컨테이너화(Containerization)하는 것입니다. 그래서인지, 이번 달(2023년 5월)에만 벌써 차량용 소프트웨어의 컨테이너화 관련 기사를 3번째 공유하네요. 😃 오늘(5월 29일) 기사는, 차량의 컨테이너를 위한 결정론적(deterministic) 멀티-노드 서비스 컨트롤러인 hirte를 소개하는 기사입니다. 관련 기사 요약 및 공유합니다. 🥇자동차에서 컨테이너를 실행하는 데 있어 당면한 과제는 다음과 같습니다. 1) 고정된(fixed) 하드웨어에 대한 높은 수준의 결정성(determinism)을 요구하는 환경에서의 비결정적(Non-deterministic)인 시스템 2) 조정된 상태 변경이 필요한 여러 노드 3) 처리 실패나 성능 저하(degrade) 모드의 차이 4) Go 언어로 작성된 매니저와 함께 K8s의 성능 오버헤드로 인해 FuSa 인증을 획득하기가 훨씬 더 어려움 즉, 위 4가지 문제들을 생각해 보면, 일반적인 컨테이너 오케스트레이션 솔루션은 자동차에 적합하지 않습니다. 🥈 Hirte는 자동차 및 기능 안전 요구 사항이 있는 타 산업과 같이 규제가 엄격한 산업을 위해 설계되었습니다. Hirte는 D-Bus API를 통해 systemd와 통합하고 다중 노드 지원을 위해 TCP를 통해 D-Bus 메시지를 릴레이하여 여러 노드에서 다양한 서비스의 상태를 관리합니다. 🥉 systemd에서 컨테이너화된 워크로드를 실행하는 것은 안정적이고 견고한 배포를 위한 간단하면서도 강력한 수단이며, 오류가 발생한 경우 서비스를 다시 시작할 수도 있습니다. 그리고 Podman 4.4에서 Quadlet 덕분에 systemd를 사용하여 컨테이너를 실행하는 것이 그 어느 때보다 쉬워졌습니다. 🍀 Hirte를 Quadlet, Podman 및 systemd와 통합하면 안전이 중요한 환경에서 서비스와 컨테이너를 관리하는 강력한 아키텍처를 구축하는 데 필요한 마법의 4중주(magical quartet)를 갖게 됩니다. [Hirte 컴포넌트] ❗️Hirte는 세 가지 구성 요소로 구성됩니다. 1️⃣ hirte 서비스: 기본 노드에서 실행되는 기본 컨트롤러 2️⃣ hirte-agent 서비스: 각 관리 노드에서 실행되며 systemd가 서비스에 따라 작동하도록 지시하기 위해 systemd와 로컬로 통신하는 에이전트입니다. 3️⃣ hirtectl 커맨드 라인: 관리자가 노드 전체에서 서비스를 테스트, 디버그 및 수동으로 관리하는 데 사용 Hirte는 원하는(desired) 시스템 상태를 알고 있는 state manager(프로그램 또는 사람)와 함께 사용하기 위한 것입니다. [Hirte 설계 원리] 1️⃣ Hirte는 원하는(desired) 시스템의 최종 상태(state)를 알지 못합니다. 하나 이상의 노드에서 서비스를 시작, 중지 또는 다시 시작하는 방법과 같은 상태 간 전환(transition) 방법만 알고 있습니다. 2️⃣ Hirte는 실행 중인 서비스의 변경 사항을 모니터링 및 보고하고 서비스가 중지되거나 노드에 대한 연결이 끊어지면 state manager에게 경고하지만 hirte 자체는 이러한 알림에 대해 작동하지 않습니다. 3️⃣ Hirte는 시스템의 초기 설정을 처리하지 않습니다. 시스템이 원하는 상태로 부팅되고 hirte가 이 상태에서 전환을 처리합니다. 4️⃣ state manager 프로그램은 D-Bus를 통해 hirte와 통합됩니다. state manager는 hirte에게 작업을 수행하거나 작업의 결과를 받도록 지시합니다. Hirte는 D-Bus를 통해 서비스와 노드를 모니터링하고 상태 변경 사항을 state manager에게 다시 보고합니다. 관리자(administrator)는 hirtectl 인터페이스를 사용하여 D-Bus를 통해 hirte와 직접 상호 작용하는 것을 피할 수 있습니다. [Hirte 아키텍쳐] 1️⃣ state manager는 시스템 D-Bus 데몬을 통해 hirte와 대화합니다. 2️⃣ 그러면 hirte는 원격 노드에 대해 TCP/IP를 통한 전용 D-Bus 연결을 사용하여 hirte-agents와 통신합니다. 3️⃣ 각 노드에서 실행되는 hirte-agent는 systemd UNIX 도메인 소켓을 통해 D-Bus를 사용하여 systemd와 통신합니다. 4️⃣ 그런 다음 Systemd는 로컬 서비스와 상호 작용하고 시스템 전체 D-Bus를 통해 에이전트에 알립니다. 5️⃣ 에이전트는 알림을 기본 노드의 hirte로 전달한 다음 상태 관리자 또는 알림을 수신하는 다른 프로그램을 위해 D-Bus 데몬에서 재생합니다. hirte 아키텍처 및 워크플로우를 시각화한 그림은 아래 링크를 참고하세요. [Link] https://www.redhat.com/rhdc/managed-files/introducing-hirte-img1.jpg [Hirte 사용하기] Hirte 사용을 위한 설치, 구성, 시작 및 테스트는 아래 링크를 참고하세요. [Link] https://www.redhat.com/en/blog/introducing-hirte-deterministic-multi-node-service-controller [결론 및 요약] Hirte는 매우 제한된 오버헤드로 여러 시스템에서 서비스를 제어합니다. 서비스는 일반 프로세스이거나 컨테이너화된 애플리케이션일 수 있습니다. 결정성(determinism)이 요구되는 환경, 워크로드가 특정 시스템에 정적으로 할당될 수 있는 환경, 실행 중인 서비스가 시간이 지남에 따라 변경될 수 있는 환경에서 hirte는 훌륭한 솔루션을 제공합니다. 원본 기사의 링크는 아래와 같습니다. 감사합니다.🍀 [Source Link] https://www.redhat.com/en/blog/introducing-hirte-deterministic-multi-node-service-controller

알림

알림이 없습니다