일반

Bottlerocket이란 무엇입니까?

Bottlerocket은 컨테이너를 실행하기 위해 특별히 설계된 새로운 Linux 기반 오픈 소스 OS입니다. Bottlerocket을 사용하면 컨테이너 인프라에 대한 업데이트를 자동화하여 컨테이너식 배포의 가용성을 개선하고 운영 비용을 줄일 수 있습니다. Bottlerocket은 컨테이너를 실행하기 위한 핵심 소프트웨어만 포함하므로, 리소스 사용을 개선하고 보안 공격 경로를 줄이며 관리 부담을 줄여줍니다. 또한, Amazon EKS 및 Amazon ECS와 같은 컨테이너 오케스트레이터와 통합되어 추가적으로 관리 및 운영 부담을 줄이면서 클러스터에서 컨테이너 호스트를 업데이트할 수 있습니다. 

Bottlerocket을 사용하면 어떤 이점이 있습니까?

a) 운영 비용 및 관리 복잡성은 줄어들고 가동 시간은 늘어남: 컨테이너를 실행하는 데 필요한 구성 요소만 포함하는 Bottlerocket은 범용 OS에 비해 리소스 풋프린트, 부팅 시간 및 보안 공격 경로가 적습니다. 스토리지, 컴퓨팅 및 네트워킹 리소스의 사용이 줄어들어 더 작아진 풋프린트로 비용을 줄이는 데 도움이 됩니다. 소프트웨어를 실행하는 데 패키지 관리자가 아닌 컨테이너 기본 요소를 사용하므로 관리 부담이 줄어듭니다.

b) 자동 OS 업데이트로 개선된 보안: Bottlerocket에 대한 업데이트는 단일 단위로 적용되며, 필요한 경우 롤백이 가능하므로 시스템을 사용할 수 없는 상태로 만드는 ‘잘못된’ 업데이트의 위험이 없어집니다. 패키지 단위 업데이트 중에 복구할 수 없는 실패로 인해 범용 OS에서 업데이트 실패는 매우 흔합니다. Bottlerocket에서 보안 업데이트는 최소한의 중단으로 제공되는 즉시 자동으로 적용되며 장애가 발생할 경우 롤백됩니다.

c) 오픈 소스 및 범용 가용성: 오픈 개발 모델을 통해 고객, 파트너 및 모든 이해 관계자가 Bottlerocket에 대한 코드를 작성하고 설계를 변경할 수 있습니다.

d) Premium Support: AWS에서 제공하는 Amazon EC2 기반 Bottlerocket 빌드는 Amazon EC2, Amazon EKS, Amazon ECR 등 AWS 서비스도 포괄하는 동일한 AWS Support 플랜에서 지원합니다.

Bottlerocket은 Amazon Linux와 어떻게 다릅니까?

Amazon Linux는 RPM 패키지 관리자 또는 컨테이너로 패키징된 다양한 애플리케이션을 실행하기 위한 범용 OS입니다. Amazon Linux는 yum, ssh, tcpdump, netconf 등과 같은 기존 도구를 사용하여 워크로드에 필요한 만큼, 각 인스턴스를 구성하는 기능을 제공하도록 최적화되었습니다. 반면, Bottlerocket은 컨테이너 실행을 위해 특별히 구축되었고, 자동화를 통해 많은 컨테이너 호스트를 관리할 수 있습니다. 특히, Bottlerocket은 다음과 같은 점에서 Amazon Linux와 다릅니다.

  • Bottlerocket에는 패키지 관리자가 없으며 소프트웨어는 컨테이너로만 실행할 수 있습니다. Bottlerocket에 대한 업데이트는 하나의 원자 단계로 적용 및 롤백되며, 이를 통해 업데이트 오류를 줄여줍니다.
  • Bottlerocket 호스트를 관리하는 기본 메커니즘은 Amazon EKS와 같은 컨테이너 오케스트레이터에 기반합니다. Amazon Linux와 달리, 고급 디버깅 및 문제 해결을 위해 개별 Bottlerocket 인스턴스에는 자주 로그인하지 않아도 됩니다.

Amazon Linux 2에 기반한 EKS 및 ECS에 최적화된 AMI는 계속해서 지원됩니까?

Amazon Linux에 기반한 최신 EKS에 최적화된 AMI가 지원될 예정이며, 계속해서 보안 업데이트를 수신할 수 있습니다. 지원 수명에 대한 자세한 내용은 EKS에 최적화된 Amazon Linux 2 AMIECS에 최적화된 AMI를 참조하세요.  

Bottlerocket의 핵심 구성 요소는 무엇입니까?

Bottlerocket의 기본 구성 요소로 다음이 포함됩니다.

  • 컨테이너 런타임으로 Linux 커널(5.4), 시스템 소프트웨어 및 컨테이너를 포함하는 최소한의 OS.
  • 하나의 단계로 OS 업데이트를 적용 및 롤백하는 원자 업데이트 메커니즘. 
  • 업데이트를 관리 및 오케스트레이션하기 위한 Amazon EKS와 같은 컨테이너 오케스트레이터와의 통합.
  • 고급 문제 해결 및 디버깅을 위해 선택적으로 실행 가능한 ‘관리 컨테이너.’

Bottlerocket에 대한 업데이트를 적용하려면 어떻게 해야 합니까?

Bottlerocket 업데이트는 사용 가능할 경우 사전 구성된 AWS 리포지토리에서 자동으로 다운로드됩니다. 업데이트를 적용하려면 Bottlerocket을 재부팅해야 하며, Amazon EKS와 같은 오케스트레이터에서 수동으로 시작하거나 관리할 수 있습니다. 재부팅에 대한 애플리케이션의 허용 범위와 운영 요구 사항에 따라 재부팅을 처리할 적절한 메커니즘을 선택해야 합니다. 애플리케이션이 무상태이고 재부팅에 탄력적인 경우 업데이트가 다운로드된 후 재부팅이 즉시 수행될 수 있습니다. 재부팅에 탄력적이지 않은 컨테이너에서 기존의 상태 유지 워크로드(예: 데이터베이스, 장기 실행 LOB 앱 등)를 실행하는 경우 재부팅 전에 상태가 유지되도록 해야 합니다.

Bottlerocket 재부팅은 중단을 줄이기 위해 클러스터에서 업데이트 롤링을 지원하도록 호스트에서 컨테이너를 드레이닝하고 다시 시작하여 Amazon EKS와 같은 오케스트레이터에서 관리할 수 있습니다. Bottlerocket에 대한 업데이트는 실패할 경우 지원되는 오케스트레이터 또는 수동 작업을 통해 안전하게 롤백할 수도 있습니다.

Kubernetes를 사용하여 Bottlerocket을 배포하고 운영하는 단계는 무엇입니까?

다음 단계를 사용하여 Bottlerocket을 배포하고 지원할 수 있습니다.

1단계: 가상 머신에서 다른 OS와 동일한 방식으로 Bottlerocket을 배포할 수 있습니다. AWS에서 콘솔, API, CLI에서 Bottlerocket을 EC2 인스턴스에 배포할 수 있습니다. Amazon EKS 클러스터에 등록하려면 각 Bottlerocket 인스턴스에 대한 사용자 데이터를 통해 구성 세부 정보를 제공해야 합니다.

2단계: 오케스트레이터로 Bottlerocket을 운영하려면 클러스터에 통합 구성 요소를 배포해야 합니다. 통합 구성 요소를 통해 오케스트레이터는 롤링 업데이트를 위해 가동 중단을 최소화하는 방식으로 재부팅을 시작하고 업데이트를 롤백하며 컨테이너를 대체할 수 있습니다.

Amazon EKS 클러스터에서 ‘Bottlerocket 업데이트 운영자’를 배포하고 사용하는 단계는 Bottlerocket 설명서를 참조하세요.

컨테이너 오케스트레이터를 사용하지 않고 Bottlerocket을 사용할 수 있습니까?

예. 배포 및 테스트 사용 사례를 위해 랩톱 또는 서버에서 오케스트레이터 없이 독립형 OS로서 Bottlerocket을 실행할 수 있습니다. ‘관리 컨테이너’에서 유틸리티를 사용하여 Bottlerocket을 관리하고 업데이트할 수 있습니다.  

Bottlerocket에서 지원하는 컴퓨팅 플랫폼 및 EC2 인스턴스 유형은 무엇입니까?

AWS의 Bottlerocket 빌드는 HVM 및 EC2 베어 메탈 인스턴스 패밀리에서 지원됩니다(단, P, G, F 및 INF 인스턴스 유형 제외). Bottlerocket에는 최소한 1개의 vCPU와 512MB의 RAM이 필요합니다. Bottlerocket은 PV 인스턴스 유형을 지원하지 않습니다.

AWS에서 Bottlerocket을 사용하기 시작하려면 어떻게 해야 합니까?

AWS는 AWS 콘솔, CLI 및 SDK를 통해 지원되는 EC2 인스턴스 유형에서 실행하는 데 사용할 수 있는 Bottlerocket용 Amazon Machine Image(AMI)를 제공합니다. AWS는 EKS 및 ECS에서 사용하도록 사전 구성된 Bottlerocket 빌드를 제공합니다. EKS를 사용하여 각 OS 인스턴스에 로그인하지 않고도 최소한의 가동 중단으로 OS를 업데이트하고 관리할 수 있습니다. Kubernetes용 Bottlerocket 운영자를 통해 최소한의 가동 중단으로 업데이트 롤백 및 재부팅 시작과 같은 활동을 포함하는 OS 관리 작업을 수행할 수 있습니다.

Bottlerocket에서 소프트웨어를 실행하려면 어떻게 해야 합니까?

컨테이너 오케스트레이터를 사용하여 실행되는 Bottlerocket 인스턴스에서 서드 파티 ISV 소프트웨어를 포함하는 컨테이너식 애플리케이션을 실행할 수 있습니다. 또한, 이미지 사용자 지정 중에 Bottlerocket에 소프트웨어 및 시작 스크립트를 포함하고 사용할 수도 있습니다. 자세한 내용은 Bottlerocket 설명서를 참조하세요.

Bottlerocket 요금은 어떻게 됩니까?

AWS에서 제공하는 Bottlerocket 빌드는 지원되는 모든 플랫폼에서 추가 비용 없이 사용할 수 있습니다. Amazon EC2 인스턴스 실행을 위한 표준 Amazon EC2가 적용됩니다.

퍼블릭 로드맵이 있습니까?

예, 있습니다!

버전 관리

Bottlerocket 릴리스는 버전이 관리됩니까?

AWS에서 제공하는 Bottlerocket 빌드는 ‘major.minor.patch’ 시맨틱 버전 관리 체계를 따릅니다. Bottlerocket의 마이너 버전은 1년에 여러 번 출시됩니다(예: 새로운 EC2 플랫폼에 대한 지원, 새 오케스트레이터 에이전트에 대한 지원, 오픈 소스 구성 요소에 대한 업데이트). 버전 구성표에는 업데이트에 중단되는 변경 사항이 포함되어 있는지 여부가 표시됩니다.

지원

Bottlerocket에 대해 AWS는 어떤 종류의 지원을 제공합니까?

AWS에서 제공하는 Bottlerocket 빌드는 보안 업데이트, 버그 수정 사항을 수신하며, AWS Support 플랜에서 지원합니다. 지정된 빌드의 지원 기간은 사용하는 컨테이너 오케스트레이터 버전에 따라 달라집니다. 대응하는 오케스트레이터 버전이 더 이상 사용되지 않으면 Bottlerocket 빌드는 더 이상 사용되지 않습니다. 예를 들어, aws-k8s-1.15는 더 이상 지원되지 않으며, 이는 Kubernetes 1.15에 대한 Bottlerocket 빌드입니다. 이는 업스트림에서 더 이상 지원을 받지 못하는 Kubernetes 1.15와 일치합니다. 따라서 고객에게 aws-k8s-1.15 노드를 클러스터에서 지원하는 최신 빌드로 교체할 것을 권장하고 있습니다.

또한, Bottlerocket에 대한 커뮤니티 지원은 GitHub에서 이용 가능합니다. 여기에서는 질문을 올리고 기능을 요청하며 버그를 신고할 수 있습니다. CVE에 대한 수정 사항 및 릴리스에 대한 세부 정보는 Bottlerocket changelog에 게시됩니다.

업데이트

Bottlerocket에서 사용 가능한 업데이트 종류는 무엇입니까?

AWS는 단일 단계로 적용되는 Bottlerocket에 대한 사전 테스트된 업데이트를 제공합니다. 이 업데이트는 단일 단계를 통해 알려진 양호한 상태로 롤백할 수도 있습니다. 결과적으로 일관되지 않은 상태로 인해 시스템을 사용할 수 없게 만드는 ‘잘못된’ 업데이트는 수동 수리가 필요하지만, Bottlerocket에서는 발생하지 않습니다. 단일 단계 원자 업데이트를 사용하면 복잡성이 줄어들고 업데이트 실패도 줄어듭니다.

Bottlerocket에 대한 업데이트를 적용하려면 어떻게 해야 합니까?

AWS에서 제공하는 Bottlerocket 빌드에 대한 업데이트는 사용 가능하면 사전 구성된 AWS 리포지토리에서 자동으로 다운로드됩니다. 업데이트를 적용하려면 Bottlerocket을 재부팅해야 하며, Amazon EKS와 같은 오케스트레이터에서 수동으로 시작하거나 관리할 수 있습니다. 재부팅에 대한 애플리케이션의 허용 범위와 운영 요구 사항에 따라 재부팅을 처리할 적절한 메커니즘을 선택해야 합니다. 애플리케이션이 무상태이고 재부팅에 탄력적인 경우 업데이트가 다운로드된 후 재부팅이 즉시 수행될 수 있습니다. 재부팅에 탄력적이지 않은 컨테이너에서 기존의 상태 유지 워크로드(예: 데이터베이스, 장기 실행 LOB 앱 등)를 실행하는 경우 재부팅 전에 상태가 유지되도록 해야 합니다.

Bottlerocket 재부팅은 중단을 줄이기 위해 클러스터에서 업데이트 롤링을 지원하도록 호스트에서 컨테이너를 드레이닝하고 다시 시작하여 Amazon EKS와 같은 오케스트레이터에서 관리 가능합니다. 기본적으로 Bottlerocket은 부팅 시 최신 보안 버전으로 자동 업데이트됩니다. Bottlerocket에 대한 업데이트는 실패할 경우 지원되는 오케스트레이터 또는 수동 작업을 통해 안전하게 롤백할 수도 있습니다.

업데이트가 최소한의 가동 중단을 보장하도록 Bottlerocket에서 어떻게 지원할 수 있습니까?

Amazon EKS와 같은 오케스트레이터와의 통합을 통해 Bottlerocket에 대한 업데이트는 가동 중단을 최소화합니다. 업데이트 프로세스 중에 오케스트레이터는 업데이트하는 호스트에서 컨테이너를 드레이닝하고 클러스터에서 다른 빈 호스트에 배치합니다. 또한, 업데이트에 실패하면 오케스트레이터는 Bottlerocket의 이전 버전으로 호스트를 롤백합니다.

호환성 및 마이그레이션

Bottlerocket의 컨테이너에서 어떤 컨테이너 이미지를 실행할 수 있습니까?

Bottlerocket은 OCI 이미지 형식 사양 및 Docker 이미지를 충족하는 모든 컨테이너 이미지를 실행할 수 있습니다.

Amazon Linux 2에서 실행하는 컨테이너를 Bottlerocket으로 이동할 수 있습니까?

예. 수정하지 않고 Amazon Linux 2 및 Bottlerocket에서 컨테이너를 이동할 수 있습니다.

Bottlerocket을 사용하지 않아야 하는 경우가 있습니까?

컨테이너를 실행하는 운영 워크플로가 yum을 사용하여 호스트 OS에서 소프트웨어 설치, 직접 인스턴스에 ssh로 연결, 개별적으로 각 인스턴스 사용자 지정 또는 컨테이너식이 아닌 서드 파티 ISV 소프트웨어 실행(예: 로깅 및 모니터링을 위한 에이전트)을 포함하는 경우 Amazon Linux 2가 더 적합할 수 있습니다. Bottlerocket은 컨테이너식 대규모 배포를 실행하고 관리하는 데 최적화되었으며, 위와 같은 많은 활동은 쉽게 허용되지 않습니다.

문제 해결 및 보안

Bottlerocket에서 문제를 디버깅하려면 어떻게 해야 합니까?

사용자 데이터 또는 AWS Systems Manager를 통해 호출되는 Bottlerocket의 API를 사용하여 ‘관리 컨테이너’를 실행하고 승격된 권한으로 고급 디버깅 및 문제 해결을 위해 SSH로 로그인할 수 있습니다. AWS는 sosreport, traceroute, strace, tcpdump와 같은 디버깅 도구를 설치 및 사용할 수 있도록 지원하는 관리 컨테이너를 제공합니다. 고급 디버깅 및 문제 해결을 위해 개별 Bottlerocket 인스턴스에는 자주 로그인하지 않아도 되도록 설계되었습니다.

관리 컨테이너란 무엇입니까?

관리 컨테이너는 Bottlerocket 문제 해결 및 디버깅을 위한 Amazon Linux 컨테이너 이미지 포함 유틸리티이며, 승격된 권한으로 실행됩니다. 도구 컨테이너 실행은 사용자 데이터 또는 Bottlerocket API를 통해 시작할 수 있습니다.

Bottlerocket에서 제공하는 컨테이너 격리와 보안 기능은 무엇입니까?

Bottlerocket은 자동 보안 업데이트를 지원하며, 컨테이너 호스팅을 위한 핵심 소프트웨어만 포함하므로 보안 공격에 대한 노출 위험을 줄입니다. Bottlerocket은 컨테이너 간 격리를 위해 컨테이너 제어 그룹(cgroups) 및 커널 네임스페이스를 사용합니다. 또한, 시행 모드 및 seccomp에서 Security-Enhanced Linux(SELinux)도 제공합니다. 커널의 eBPF는 I/O, 파일 시스템 작업, CPU 사용, 침임 탐지 및 문제 해결을 추적하기 위해 오버헤드가 적은 추적 프레임워크를 제공하여 많은 하위 수준의 시스템 작업을 위해 커널 모듈의 필요성을 줄여줍니다. Bottlerocket은 device-mapper-verity(dm-verity)를 함께 사용합니다. 이는 Linux 커널 기능으로, 루트 권한을 보유하고 있을수 있는 루트킷을 방지할 수 있도록 무결성 검사를 제공합니다.

오픈 소스 및 상표

Bottlerocket의 오픈 소스 라이선스란 무엇입니까?

Bottlerocket 코드는 Apache 2.0 OR MIT에서 라이선스가 부여되었습니다. Amazon은 Rust에서 해당 Bottlerocket을 작성했습니다. 그래서 커뮤니티에 적합한 라이선스를 선택했습니다. Linux 커널과 같은 기본 서드 파티 코드는 원래 라이선스에 따릅니다.

Bottlerocket에 대한 소스 코드 변경 사항을 보고 이를 적용하려면 어떻게 해야 합니까?

Bottlerocket은 GitHub에 호스팅된 오픈 소스 프로젝트로 출시되었습니다. 설계 문서, 코드, 빌드 도구, 테스트 및 문서는 GitHub에 호스팅됩니다. 프로젝트 관리를 위해 GitHub의 버그 및 기능 추적 시스템을 사용합니다. 표준 GitHub 워크플로를 사용하여 Bottlerocket 소스 코드를 보고 적용할 수 있습니다.

내 변경 사항을 포함하는 Bottlerocket의 사용자 지정 빌드를 생성하려면 어떻게 해야 합니까?

GitHub 리포지토리를 분기하고 변경 사항을 생성한 후 구축 가이드의 지침을 따를 수 있습니다.

Bottlerocket의 자체 빌드를 생성하고 재배포할 수 있습니까?

예. 수정되지 않은 소스에서 Bottlerocket을 빌드하고 결과를 재배포하는 경우 사용자 배포 이름 및 빌드와 연결된 콘텐츠 모두에서 배포가 정식 빌드가 아닌 Amazon Bottlerocket의 사용자 빌드임을 명확히 알리는 경우에만 ‘Bottlerocket’을 사용할 수 있으며, 커밋 날짜를 포함하여 구축된 커밋을 식별해야 합니다.

서로 다른 컨테이너 오케스트레이터를 위해 조정한 Amazon Bottlerocket의 자체 버전을 참조하도록 Bottlerocket 상표를 사용하려면 어떻게 해야 합니까?

다른 컨테이너 오케스트레이터와 함께 사용하도록 Amazon Bottlerocket을 수정한 경우 정책 지침에 따라 ‘Bottlerocket Remix’를 사용하여 사용자 버전을 참조할 수 있습니다. 이러한 방식으로 해당 컨테이너 오케스트레이터의 상표를 사용할 권한이 있는 경우 해당 컨테이너 오케스트레이터 이름을 ‘Bottlerocket Remix’에 추가할 수 있습니다.

이 정책을 준수하기 위해 Bottlerocket의 수정된 버전에서 수정해야 하는 OS 변경 사항은 무엇입니까?

‘Bottlerocket Remix’ 이름을 사용하거나 Bottlerocket 상표를 제거하려면 os-release 파일을 수정해야 합니다. 이는 packages/release/release.spec and tools/rpm2img 모두를 수정하여 수행할 수 있습니다. 이 정책을 준수하기 위해 시스템 루트 이름(/x86_64-bottlerocket-linux-gnu/sys-root), 파티션 레이블, 디렉터리 경로 및 서비스 파일 설명은 변경하지 않아도 됩니다.