Offcanvas

가상화 / 서버 / 애플리케이션 / 클라우드

리뷰 | 컨테이너·쿠버네티스와 찰떡궁합 ‘코어OS’

2017.10.25 Steven Nunez  |  InfoWorld
코어OS 컨테이너 리눅스(CoreOS Container Linux)는 쿠버네티스(Kubernetis)를 지원하기 위해 개발된 오픈소스 컨테이너 운영체제다.



로켓(Rocket) 혹은 도커(Docker) 컨테이너 엔진을 기반으로 서비스 발견 및 구성에는 Etcd, 네트워킹에는 플라넬(Flannel), 컨테이너 관리에는 쿠버네티스를 사용한다. 코어OS는 ‘이론적으로' 실행 중인 애플리케이션에 영향을 끼치지 않는 연속적인 자동화된 업데이트 스트림을 제공한다. 따라서 이들은 컨테이너 내에서만 구동한다.

컨테이너 리눅스는 모든 것이 컨테이너에 있는 대규모 오케스트레이션 시스템이다. 패키지 관리자나 전통적인 리눅스 관리 도구가 없다. 생산성에 초점을 맞춘 시스템으로, 컨테이너 호스트 클러스터를 위한 안정된 기초를 제공하는 데 초점을 둔다.

설치와 구성
코어 OS 컨테이너 리눅스를 설치하는 과정은 쉽지 않다. 디스크 구성을 처리하고 Systemd 초기화 시스템의 여러 유닛을 구동하는 이그니션(Ignition)이라는 사용자 정의 프로비저닝(Provisioning) 엔진을 이용해야 한다. 이 기능은 JSON 구성을 통해 제공된다.

이 JSON 파일은 직접 편집하지 않는 것이 좋다. 대신 YAML에서 Container Linux Config 파일을 생성한 후 따로 다운로드한 “트랜스파일러(transpiler)”를 통해 이 파일을 구동한다. 트랜스파일러는 JSON 형식으로 이그니션 파일을 생성한다.

이런 '이상한' 프로세스를 거쳐야 하는 이유는 최대한 오류를 줄이고 구성 시간을 줄이기 위해서다. 더 간소하게 설치 하기 위해 cloud-config 시스템을 사용하는 방법도 있지만, 코어OS가 앞으로는 지원이나 유지 관리를 제공하지 않을 예정이니 주의해야 한다.

시스템 관리
코어OS 컨테이너 리눅스는 Systemd-Journald 시스템이다. 센트OS 7과 데비안(Debian) 8 그리고 최신 레드햇(Red Hat)과 우분투(Ubuntu)를 쓰고 있다면 이미 Systmd-Journald에 익숙할 것이다. Systemd는 리눅스의 새로운 실질적인 표준 init 프로세스이며, 컨테이너 리눅스에서 프로세스와 컨테이너 관리를 담당한다.

예전에는 플릿(Fleet)이라는 코어OS 도구를 사용해 Systemd와 Etcd를 분산형 init 시스템으로 통합하고 이를 이용해 Systemd 유닛과 컨테이너를 예약, 관리했다. 그러나 이 프로젝트는 최근에 쿠버네티스(또는 코어OS의 쿠버네티스 유료 구독 에디션인 테크토닉(Tectonic))로 인해 중단됐다. 코어OS는 2018년 2월 1일에 컨테이너 리눅스에서 플릿을 제거하겠다고 이미 발표했다.

코어OS는 Systemd를 도입하면서 Syslog의 유닉스(Unix)를 위한 표준 로깅 솔루션을 Journald라는 시스템으로 대체했다. Journald는 로그를 바이너리(Binary) 형식으로 저장하도록 지원하므로 로그 파일을 신속하게 grep할 수 없다. 그래서 이런 파일을 쿼리(Query) 처리하는 명령줄 툴이 journalctl이다. 이 툴을 통해 grep으로 이관할 수 있다.

컨테이너 리눅스에는 패키지 관리자가 포함되지 않은 대신 컨테이너를 통해 서비스를 설치해야 한다. 개념상으로는 문제가 없지만 관리자가 퍼펫(Puppet), 쉐프(Chef), 솔트(Salt) 등의 일반적인 구성 툴로 클러스터를 관리할 수 없다. 이 때문에 계획 관리가 더 중요해졌다. 마지막으로 컨테이너 리눅스에는 기본적으로 스왑(Swap) 파티션이 포함돼 있지 않다. 대신 Systemd로 생성할 수 있다. 코어OS는 최근에 Btrfs에서 Ext4로 전환했는데, 스왑은 Ext4에서만 허용된다. 기본적으로 스왑이 생성되지 않는 것도 이 때문이다.


저장과 네트워킹
컨테이너 리눅스의 가장 큰 특징은 크로미움 OS(Chromium OS)에서 영감을 얻은 디스크 파티셔닝이다. 이를 이용하면 업데이트가 실패할 경우 시스템을 롤백(Rollback)할 수 있다. 관리자가 이런 파티션으로 직접 작업하지는 않지만 이런 파티션의 기능과 자동화된 업그레이드 프로세스에 대해서는 알아둘 필요가 있다.

컨테이너 리눅스에는 읽기전용 사용자(/usr) 파일 시스템이 있다. 하나는 실시간 시스템을 위한 것이고 다른 하나는 백업용이다. 루트(root) 파일 시스템(/)은 읽기 및 쓰기를 지원하며 네트워크 연결 상태를 추적할 수 있는 정보가 있고 /var이 포함된다. 연속 업데이트 시스템을 이용하면 부트로더(Bootloader) config를 개선한 /usr 파티션을 마운트(Mount)할 수 있지만 /를 위해 파티션을 수정하지는 않는다.

애플리케이션이 모든 데이터를 루트 파티션에 작성하면 이내 공간이 부족해질 것이다. 이때는 표준 Systemd 방법을 사용해 시스템에 저장 공간을 추가할 수 있다. systemd.mount 유닛 구성은 Container Linux Config 파일을 사용해 실행 시간 또는 구성에서 파일 시스템 마운트 포인트에 디스크를 추가할 수 있다. 초기 구성 후에는 컨테이너 리눅스 자체에서 /var/www 또는 /var/lib/docker 등 여러 디렉터리를 관리하는 지원을 제공하지 않는다. 따라서 코어OS 테크토닉을 사용하는 것이 아니라면 구성 관리 및 모니터링 시스템을 고려해야 한다.

시스템의 나머지 부분과 마찬가지로 네트워킹은 Config 트랜스파일러인 ct 명령을 통해 처리하는 Container Linux Config 파일을 통해 부팅 시 수동으로 Systemd를 통해 구성되거나 주입된다. 필자는 여러 다양한 경로, DHCP, 정적 IP, 인터페이스를 시험하면서 문제가 없었다. 컨테이너 리눅스 내부의 네트워킹은 필자가 시험한 컨테이너 운영체제 중 가장 덜 생소했다.

업그레이드와 다운그레이드
코너OS 컨테이너 리눅스는 지속적인 자동 업그레이드를 지원하도록 개발됐으며 이것은 컨테이너 리눅스의 주된 특징 중 하나이기도 하다. 이론적으로 모든 애플리케이션이 컨테이너로 분리되므로 OS 업그레이드를 독립적으로 수행할 수 있다. 고장 시 /usr 파티션의 이전 버전을 사용해 OS를 부팅한다.

코어OS는 관리자에게 컨테이너 리눅스 업데이트에 대한 상당한 통제권을 제공했다. 머신이 받는 업데이트는 팔로우하는 릴리즈 채널에 좌우된다. 채널의 수는 3개이다. 소스 코드 트리에서 “헤드(head)”를 긴밀하게 추적하는 알파(Alpha)에는 모든 구성 요소의 최신 버전이 포함되어 있다. 베타 버전에는 알파에서 승급된 몇 가지 구성 요소가 포함되어 있으며 코어OS는 설치 별 버그를 없애기 위해 몇 개의 베타 머신을 클러스터에 혼합하도록 권장하고 있다. 제3의 채널은 스테이블(Stable)로써 베타 채널에서 승급된 구성 요소로 구성된다.

수동 롤백도 가능하지만 권장하지 않는다. 이는 크로미움 확장 기능으로 GPT 디스크 파티션을 조정하는 cgpt 명령으로 수행한다. 임의의 버전 번호로 다운그레이드하는 방법은 없다. 다운그레이드를 시작하려면 /usr이 있는 파티션을 확인한다.



이제 현재 사용 중인 것을 파악한다.



즉, 백업 파티션은 /dev/sda4여야 한다.



필자는 다운그레이드 시 문제가 없었지만 디스크의 부트 파티션 테이블을 수정할 때는 주의해야 한다. 만약 오류가 발생하면 그 대가는 꽤 클 것이다.

저장 공간 관리 도구와 마찬가지로 컨테이너 리눅스의 업그레이드/다운그레이드 도구가 중요하다. 실제로 클러스터를 관리하는 데 사용하기 보다는 코어OS의 유료 제공물인 코어업데이트(CoreUpdate) 도구를 지원하기 위해 개발된 것으로 보인다. 이런 도구는 개선의 여지가 있으며 컨테이너 리눅스 시스템의 관리자는 거기에 시간을 투자하거나 유료 구독을 선택할 것이다.

초기 컨테이너 개척자인 코어OS 컨테이너 리눅스는 쿠버네티스와 코어SO 제품군을 지원하기 위해 개발되며 쿠버네티스나 테크토닉 배치 외에는 적용 가능성이 희박하다. 설치와 업그레이드/다운그레이드 부분이 다소 과도하게 복잡하지만, 일부 단점에도 불구하고 실제 사용환경에서 컨테이너 호스트를 안정적으로 구동하는 용도로는 훌륭하게 작동한다. ciokr@idg.co.kr 
CIO Korea 뉴스레터 및 IT 트랜드 보고서 무료 구독하기
추천 테크라이브러리

회사명:한국IDG 제호: CIO Korea 주소 : 서울시 중구 세종대로 23, 4층 우)04512
등록번호 : 서울 아01641 등록발행일자 : 2011년 05월 27일

발행인 : 박형미 편집인 : 천신응 청소년보호책임자 : 한정규
사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.