전통적인 방식으로 Kubernetes를 설치하는 건 복잡한 레고 장난감을 조립하는 것과 비슷합니다. 수많은 단계를 빈틈없이 따라야 하고, 입력해야 할 명령어도 많죠. 하나라도 실수하면 지우고 다시 설치해야 하는 상황도 빈번합니다. 이제 Kubernetes만을 위한 쉽고 빠른 운영 체제가 나와 이러한 번거로움을 덜 수 있는데요. 오늘 소개할 Talos Linux가 그 주인공입니다.

Talos Linux란?

출처=Talos Linux | 인포그랩 GitLab
출처=Talos Linux

Talos Linux는 경량화된 운영 체제로, Kubernetes 클러스터를 구성하는 데 필요한 최소 기능만 포함합니다. 이는 불필요한 요소가 없어 효율적으로 장비를 사용하는 데 도움이 되죠.

Talos Linux는 ‘Manifest만 같으면 동일한 결과를 볼 수 있다’는 불변성(immutability)을 운영 체제에 적용했습니다. 각 Talos 서버의 모든 구성은 YAML 파일로 관리하는데요. 관리자가 talosctl apply-config 명령을 입력하면 Kubernetes에서 kubectl apply 명령을 입력한 것처럼 운영 체제를 선언적으로 바꿀 수 있습니다. ‘모든 것을 선언적으로 관리하는' Kubernetes 장점이 여기에도 구현됐죠. Talos Linux를 사용하면 운영 체제도 GitOps로 구축할 수 있습니다.

아울러 Talos Linux는 강력한 보안 기능도 제공합니다. 이는 불필요한 패키지를 모두 제거해 공격 표면을 최소화하고, 모든 통신을 암호화해 데이터의 무결성을 보장합니다. 또 읽기 전용 파일 시스템을 사용해 시스템 파일이 변조되지 않도록 보호하죠. 이러한 장점을 토대로 Talos Linux는 안전한 Kubernetes 운영 환경을 지원합니다.

Talos Linux 장점

Talos Linux는 보안 효율성, 설치 편의성 측면에서 다음 장점이 있습니다.

최소 기능으로 최대 보안 구현

Talos Linux는 단 50MB 규모의 초경량 운영 체제입니다. 바이너리 파일은 36개로, Kubernetes를 동작하는 데 필요한 최소 파일만 있습니다. 쉘 접속이 불가능하기에 사용자가 임의 실행 파일을 설치할 수는 없는데요. 이는 휴먼 에러나 해킹 위험을 줄이는 데 도움이 됩니다. 또 YAML 파일로만 운영 체제를 조작할 수 있어 휴먼 에러가 발생해도 쉽게 검증할 수 있습니다.

배포판바이너리 파일 수
Talos Linux29
Ubuntu Server 22.042780
Amazon Linux 21382
Flatcar Container Linux2391

모든 곳에 설치 가능

Talos Linux는 클라우드, 온 프레미스를 가리지 않고 모든 환경에 설치할 수 있습니다. 이는 베어메탈 서버에 ISO 이미지로 설치할 수 있고, AWS나 GCP 같은 클라우드에서도 실행할 수 있습니다. 또 Docker, MacOS뿐만 아니라 Kubernetes 위에도 Talos Linux를 설치할 수 있습니다.

Talos Linux 첫 화면

Talos Linux를 설치하고 컴퓨터 전원을 켜면 아래 화면이 보이는데요.

Kubernetes가 모두 구성된 Talos Linux 첫 화면 | 인포그랩 GitLab
Kubernetes가 모두 구성된 Talos Linux 첫 화면

우리가 콘솔에 접속해 볼 수 있는 화면은 세 가지입니다.

  1. Summary: 노드의 요약 정보 화면
  2. Monitor: CPU, Memory, 프로세스 등 상태 화면
  3. Network Config: IP, Gateway 등 설정 화면

이 화면 외에 할 수 있는 작업은 없습니다. 운영 체제의 모든 구성은 YAML로 만든 다음 서버에 apply 해야 하죠.

K3s와 차이점

Talos Linux는 경량 Kubernetes 배포판인 K3s와 종종 비교됩니다. K3s는 엣지 컴퓨팅이나 IoT와 같이 자원이 제한된 환경에서 효과적으로 작동하도록 설계됐습니다. Talos Linux와 K3s는 크기, 역할, 설치와 설정, 아키텍처, 보안, 자원 요구 사항, 확장성, 관리와 유지보수, 커뮤니티와 지원 측면에서 차이점이 많은데요. 그 내용은 다음과 같습니다.

기능Talos LinuxK3s
크기작은 크기중간 크기
역할Kubernetes 클러스터 운영을 위한 운영 체제경량 Kubernetes 배포판
설치와 설정설정이 복잡하지만 단순화 가능설정이 간단함
아키텍처최소한의 불변 운영 체제; SSH 접근 불가, 셸 없음; API 기반 구성과 관리경량의 단일 바이너리; 컨테이너 런타임, 네트워킹과 스토리지 통합
보안불변 파일 시스템, 대화형 로그인(SSH) 없음, API 기반 상호작용으로 보안에 중점RBAC, TLS 암호화, 자동 업데이트와 같은 필수 보안 관행 준수
자원 요구 사항효과적인 Kubernetes 운영을 위한 충분한 자원 필요; 자원이 제한된 환경에 부적합낮은 자원 요구 사항; IoT, 엣지 장치와 같은 저전력 장치에 적합
확장성대규모 배포를 처리할 수 있는 프로덕션 환경에서 확장 가능한 Kubernetes 클러스터 지원클러스터링과 고가용성 지원; 일반적으로 소규모 배포에 사용
관리와 유지보수API를 통한 관리; 최소한의 수동 개입으로 자동화된 관리; 불변 인프라 때문에 낮은 빈도로 유지보수, 패치표준 Kubernetes 도구와 인터페이스로 간소화된 관리; 업데이트, 유지보수 용이; 관리 용이성을 요구하는 환경에 적합
커뮤니티와 지원보안, 프로덕션급 배포에 중점을 둔 성장하는 커뮤니티; 강력한 문서, 커뮤니티 포럼, 자원 제공Rancher Labs(현재 SUSE의 일부)가 지원하는 활발한 커뮤니티; 광범위한 문서, 커뮤니티 지원, Rancher를 통한 상업적 지원 옵션 제공

Talos Linux 구성 방식

앞서 설명했듯 Talos Linux는 YAML 파일로 관리됩니다. YAML 파일은 ‘머신(단일 서버) 구성’과 ‘클러스터 구성’으로 나뉘는데요.

머신 구성은 운영 체제, 네트워크, Docker Registry와 같이 서버 한 대에만 적용되는 설정입니다. 서버 사이 설정이 다르면 YAML 파일도 다르게 관리해야 하는데요. 특히 Controlplane과 Worker 노드는 다른 type을 가져야 하기에 YAML 파일도 각각 따로 만듭니다.

여기에 install이라는 옵션이 있는데요. 이 옵션을 수정하면 Talos Linux 운영 체제의 버전을 바로 바꿀 수 있습니다. 보통 Windows나 Ubuntu를 업그레이드하려면 USB를 굽고 이를 본체에 꽂아 설치합니다. 이와 달리 Talos Linux는 YAML 파일에서 버전만 바꾸고 apply-config를 실행하면 알아서 운영체제를 다운로드 받아 재부팅합니다. 설치가 완료되면 자동으로 클러스터에 붙어 원래 기능을 수행하죠.

클러스터 구성은 서버와 상관없이 같은 클러스터라면 모두 동일한 YAML 설정을 공유합니다. 이는 클러스터의 엔드포인트부터 클러스터의 CIDR, API 서버의 컨테이너 이미지 버전 등을 포함하죠. Init 컨테이너와 etcd의 구성도 이곳에서 정의합니다.

인포그랩과 Talos로 Kubernetes 쉽게 구성하기

사용자는 Terraform 하나로 Talos Linux를 구성하고 Kubernetes도 설치할 수 있습니다. Talos Linux는 공식적으로 Terraform Provider를 지원하죠. 인포그랩은 Terraform Provider를 사용해 누구나 쉽게 Talos Linux로 Kubernetes를 구성하도록 프로젝트를 만들었는데요. 인포그랩의 Talos 프로젝트를 클론 받은 다음, 서버 정보만 변수로 넣고 terraform apply를 실행하면 곧바로 모든 구성을 완료할 수 있습니다. 사용자는 Talos Linux가 설치된 서버만 미리 준비하면 됩니다.

Jeff가 생각하는 Talos Linux 가치

저는 기존에 온 프레미스 Kubernetes를 설치하는 방식을 고려해 볼 때, Talos Linux 가치가 더 두드러진다고 생각합니다. 우리가 온 프레미스 Kubernetes를 설치할 때 일반적으로 따르는 과정은 다음과 같은데요.

  1. Ubuntu, RHEL 같은 기본 운영 체제 설치, 보안
  2. Containerd, Kubeadm 등 Kubernetes 설치 위한 도구 설치
  3. Kubernetes 배포

이러한 접근 방식에는 여러 단점이 있습니다. 가장 큰 단점은 도구별로 버전 관리를 해야 한다는 거죠. Terraform, Ansible이나 bash로 자동화 스크립트를 만들어도 결국 레거시가 되고요. 유지보수 담당자는 스크립트를 계속 관리해야 합니다. 사람이 스크립트를 모두 숙지해야 하기에 도구를 신속히 업데이트하거나 버그 패치하기가 어렵죠.

컨테이너 이미지를 만드는 모범 관행은 ‘목적에 맞는 최소한의 이미지를 사용’하는 겁니다. alpine이나 distroless 등을 사용해 가볍고 안전한 이미지를 만드는 거죠. 대부분 엔지니어는 이 원칙을 충실히 따르며 컨테이너 이미지를 만듭니다.

그러나 운영 체제를 구축할 때는 이런 방식으로 접근하지 않는데요. 왜 Kubernetes를 사용하는 데 불필요한 기능이 많은, Ubuntu와 같은 운영 체제를 사용하나 싶습니다. 저는 Talos Linux가 이러한 비효율을 줄이고, 생산성을 향상하기에 의미가 크다고 생각합니다.

맺음말

Terraform과 Talos, GitOps를 확장하면 어떤 큰 그림을 그릴 수 있을까요? 베어메탈을 사용하든, 클라우드 서비스를 사용하든 인프라부터 운영체제, 애플리케이션에 이르기까지 모든 것을 선언적으로 관리하고 GitOps로 배포하는 거죠.

이렇듯 Talos Linux는 Kubernetes를 구성하는 새로운 패러다임을 제시해 인프라 관리의 복잡성을 크게 줄이는데요. 이로써 운영 효율성을 높이고, 보안을 강화하며, 자동화로 개발자와 운영자의 부담을 덜 수 있습니다. 이제 Talos Linux로 더 안전하고 효율적인 Kubernetes 환경을 구축하세요.

참고 자료

  1. Talos Linux 공식 홈페이지
  2. K3s vs. Talos Linux: What’s the difference
  3. SIDEROLABS Sales Deck
  4. K3s vs Talos Linux

지금 이 기술이 더 궁금하세요? DevOps 액셀러레이터 인포그랩에 문의하세요.