Kubernetes를 사용하여 IoTeX 클러스터 배포, 작동 및 모니터링

IoTeX
iotex_kr
8 min readNov 16, 2018

--

Kubernetes 는 컨테이너형 애플리케이션의 자동 배포, 확장 및 관리를 위한 오픈 소스 시스템입니다. 컨테이너화는 자체 운영 환경을 갖춘 컨테이너에 애플리케이션을 캡슐화하는 것을 포함하는 전체 시스템 가상화에 대한 간단한 대안입니다. 컨테이너화는 지난 몇 년간 성숙되어 왔으며 기술 산업 전반에 걸쳐 쿠베르네스의 채택 증가로 이어졌다.

Kubernetes는 사용자의 테스트 및 시뮬레이션 실행 능력을 크게 향상시킵니다. 높은 수준에서 사용자는 이를 통해 기존 한계를 벗어나 기술 리소스를 확장할 수 있습니다. 예를 들어, 사용자는 물리적 시스템 101개를 소유할 필요 없이 101-노드 블록체인 클러스터를 시뮬레이션할 수 있습니다. 이 기능은 블록체인 클러스터의 스테이징 환경을 신속하게 준비하는 데 적합합니다. 또한, 지리적으로 분산된 블록 생산/확인 노드의 한정된 양(예: 101)이 수반되는 지분 증명(PoS) 또는 위임된 지분 증명(DPoS) 합의 메커니즘으로 블록체인 네트워크를 시뮬레이션하는 데도 유용합니다.

IoTeX는 테스트넷 베타 “Epik” 릴리스로 시작을 하여Kubernetes를 사용하여 테스트넷 인프라를 구축 및 최적화했습니다. 전반적으로 볼때, Kubernetes는 운영 방식을 크게 개선했습니다. 이 블로그에서는 Kubernetes에서 직접 컨테이너형 애플리케이션과 환경을 운영하는 데 필요한 경험과 팁을 공유합니다.

Kubernetes에 IoTeX 클러스터 설정

먼저 두 가지 유형의Kubernetes 서비스를 정의합니다.

  • 부트 노드 서비스: 전체 IoTeX 클러스터를 부팅하는 데 사용됩니다. 이것은 모든 새로운 iotex 노드의 시작 지점이며 새로운 노드가 P2P 네트워크에 가입하는 데 도움이 됩니다. 모든 노드는 내부 포드의 IP 주소를 통해 서로를 식별합니다.
  • iotex 서비스: 모든 iotex 노드에서 JRPC API를 제공합니다. JRPC 인터페이스는 IoTeX Explorer와 작업 주입 도구에 사용됩니다.

모든 노드 구성은 genesis블록을 포함하여 Kubernetes ConfigMap을 통해 배포됩니다. 따라서 새 도커 이미지가 작성되기를 기다리지 않고 새 클러스터를 다시 배포할 수 있습니다.

Kubernetes Pods에서 실행 중인 애플리케이션은 기본적으로 비저장 상태입니다. 즉, 재구현 후 모든 애플리케이션에서 저장된 데이터를 사용할 수 없게 됩니다. 이에 대응하기 위해 다음 설정 프로세스를 사용합니다. 이 시나리오에서는 각 IoTeX 노드가 동일한 데이터 복사본(즉, 분산된 원장)을 사용하므로 모든 노드의 데이터를 유지할 필요가 없습니다. 따라서, 우리는 Kubernetes Persistent Volume에 오직iotex 노드 하나만을 장착합니다. 이 경우에는 부팅 노드에 장착했습니다. 또한 S3 및 Digital Ocean과 같은 객체 스토리지 공간에 지속적인 데이터를 백업합니다. 부팅 노드를 제외한 모든 노드는 다시 배포한 후 데이터를 저장하지 않으므로 시작하기 전에 먼저 백업을 다운로드해야 합니다. 우리는 이것을 이루기 위해 이니셜 용기를 사용한다. 이 프로세스를 통해 이전 데이터 손실에 대한 걱정 없이 장애가 발생한 상태에서 클러스터를 다시 시작할 수 있습니다.

클러스터 모니터링

21개 노드의 상태를 추적하는 것도 사소한 일이 아니며, 더 많은 수의 노드가 있으면 더욱 복잡해집니다. IoTeX 클러스터 내부에서 더 잘 관찰하기 위해 로깅 스택, 메트릭 스택 및 경고 관리자로 구성된 Kubernetes에 모니터링 기능을 설정합니다.

로깅 스택에는 Fluentd + Elastic Search + Kibana + Elastic Search Curator를 사용합니다. Fluentd는 각 노드의 로그를Elastic Search클라이언트로 보내고 Elastic Search 마스터 서버는 Kibana를 통해 문의할 수 있는 로그를 인덱싱합니다. 마지막으로, Elastic Search큐레이터를 사용하여 오래된 로그를 정리합니다.

network

메트릭 스택의 경우 Prometheus + Prometheus Operator + Grafana를 사용합니다. CoreOS Prometheus 연산자는 Kubernetes클러스터에서 실행되는 Prometheus를 쉽게 구성할 수 있는 방법을 제공합니다. 메트릭스 서비스를 노출하기만 하면 IoTeX 노드의 Prometheus 클라이언트를 Prometheus서버와 연결할 수 있습니다.

또한 Prometheus Alert 매니저와 알람을 설정하여 비정상 메트릭스가 생긴 경우 통화 중인 엔지니어에게 경고를 보내기 위한 경고 설정을 진행 중입니다.

Helm을 사용하여 여러 구성 관리

Yaml 구성을 사용하여 Kubernetes에 다양한 유형의 애플리케이션을 단일 환경에 배포하는 것은 매우 간단합니다. 그러나 여러 환경(예: 테스트, 스테이징, 프로덕션)과 서로 다른 노드 트위스트/구성(예: 21 대 101 후보)이 있는 경우 사용자는 동일한 애플리케이션의 다양한 Kubernetes yaml구성을 관리하기 위해 높은 오버헤드와 이중화에 직면합니다. 이 문제를 해결하기 위해 우리는 Helm을 사용합니다.

Helm는 Kubernetes 응용 프로그램 패키지 매니저입니다. 이를 통해 IoTeX 클러스터를 버전 및 기본값이 포함된 차트 패키지로 생성할 수 있습니다. Helm을 사용하여 더는 중복 Kubernetes yaml 파일을 관리할 필요가 없습니다. 대신 서로 다른 환경 및 기본값을 덮어쓰는 트위스트에 대한 구성의 작은 부분 집합만 관리하면 됩니다. 또한 새로운 IoTeX 클러스터를 단일 명령으로 시작하는 데 필요한 명령을 단순화합니다.

Helm은 또한 우리가 차트를 쉽게 출판할 수 있게 해줍니다. 향후에는 IoTeX Helm 차트를 커뮤니티에 게시하여 몇 분 내에 IoTeX 클러스터를 설정할 수 있습니다.

계속 지켜봐주세요!

IoTeX의 개발 팀은 쿠베르넷과 기타 운영 툴의 강력한 기능을 통해 클러스터 운영에 소요되는 시간을 절약할 뿐 아니라 문제를 더 빠르게 파악하고 이전보다 더 빠르게 반복할 수 있습니다. 저희는 향후 더 많은 기술적 관점을 공유할 수 있기를 기대합니다. 문의 사항이 있으면 언제든지 support@iotex.io에 문의해 주십시오.

IoTeX

IoTeX는 자율적으로 확장가능한 개인보호 보호 중심의 IoT 전용 블록체인 입니다. IoTeX의 글로벌 팀은 암호학, 분산형 시스템, 머신 러닝 분야의 Ph.D, 최고 수준의 엔지니어, 경험 많은 에코시스템 설계자들로 구성되어 있습니다. IoTeX는 이종 기기간 컴퓨팅을 위한 블록체인 안의 블록체인 아키텍쳐, 빠른 Roll-DPoS 합의 메커니즘, 가벼운 개인정보 보호 기술 등 IoTeX만의 혁신을 통해 블록체인 3.0의 선두에서 혁신을 만들어나가고자 합니다. IoTeX는 한 블록 한 블록씩 세상을 연결시켜가며, 자율적 기기조작의 대중화를 이끌어가겠습니다.

웹싸이트: https://iotex.io/

트위터: https://twitter.com/iotex_io

텔레그램 새소식 채널: https://t.me/iotexchannelko

한국텔레그램 그룹: https://t.me/IoTeXGroupKO

미디엄: https://medium.com/@iotex

레딧: https://www.reddit.com/r/IoTeX/

Facebook: https://www.facebook.com/IoTeXKorea

--

--