78 lines
3.4 KiB
Markdown
78 lines
3.4 KiB
Markdown
---
|
||
title: "Bottlerocket"
|
||
type: entity
|
||
tags:
|
||
- AWS
|
||
- Container OS
|
||
- Linux
|
||
- EKS
|
||
sources:
|
||
- public-cloud-learning-sessions-eks-optimization-part-2-of-3-running-containers-w
|
||
- public-cloud-learning-sessions-eks-optimization-part-3-of-3-introduction-to-eks
|
||
last_updated: 2026-04-24
|
||
---
|
||
|
||
# Bottlerocket
|
||
|
||
AWS 主导维护的容器专用开源 Linux 操作系统,Bottlerocket OS 的命名灵感来自装满蝌蚪的瓶子(tadpole-containing bottle),旨在为容器工作负载提供最小化、安全加固的运行时环境。
|
||
|
||
## 核心设计理念
|
||
|
||
### 最小化(Minimalism)
|
||
- 去除所有非必要组件:无包管理器、无默认 Shell 解释器、无默认 SSH 访问
|
||
- 仅打包必要内核组件到 OS 镜像,攻击面降至最低
|
||
- Bottlerocket 可运行于笔记本电脑、工作站和数据中心环境
|
||
|
||
### Variant 机制
|
||
Variant 是 Bottlerocket 的核心定制机制——在构建时组合以下维度:
|
||
- **平台**(platform):AWS(用于 EC2)、Bare Metal 等
|
||
- **处理器架构**:x86_64、ARM64 (Graviton)
|
||
- **工作负载组件**:Kubernetes 节点、NVIDIA GPU 支持、自定义包
|
||
|
||
Variant 允许按需定制(如 Bottlerocket with Kubernetes + NVIDIA GPU),避免通用 OS 的臃肿。
|
||
|
||
### 安全更新(Safe Updates)
|
||
- **分区镜像更新(Partition Updates)**:A/B 双分区机制,在线下载新版本镜像到非活动分区,重启后切换,确保更新原子性
|
||
- **Data Volume**:独立数据卷缓存容器镜像,支持快照预填充
|
||
- **in-place 更新**:无需替换节点即可完成 OS 升级
|
||
|
||
### 安全加固(Security Hardening)
|
||
- **dm-verity**:对根文件系统进行加密哈希验证,检测任何未授权篡改
|
||
- **只读根文件系统**:默认只读,运行时无法修改根目录内容
|
||
- **SE Linux enforcing**:默认启用 enforcing 模式,基于标签的强制访问控制(MAC)
|
||
- **Secure Boot**:启动时验证引导加载程序和内核签名
|
||
- **CIS Benchmark**:Bottlerocket 提供专用 CIS benchmark 安全加固指南
|
||
|
||
## 与 EKS 的集成
|
||
|
||
Bottlerocket 支持与 Amazon EKS 的三种集成方式:
|
||
|
||
| 集成方式 | 说明 |
|
||
|---------|------|
|
||
| Bottlerocket for EKS AMI | 自管理节点组(Self-Managed Node Groups),通过 eksctl 或 launch template 指定 |
|
||
| 托管节点组(Managed Node Groups) | EKS 自动管理的节点组,可指定 Bottlerocket AMI |
|
||
| Carpenter 节点池 | EKS Auto Mode 的节点池,Carpenter Controller 自动管理,Bottlerocket 为默认 OS |
|
||
|
||
## 配置方式
|
||
|
||
- **API 接口**:通过 Bottlerocket API 远程配置节点
|
||
- **TOML 用户数据**:在实例启动时通过 userdata 传递 TOML 格式配置
|
||
- **EKS 工具集成**:eksctl、Carpenter 等工具原生支持 Bottlerocket
|
||
|
||
## 最佳实践
|
||
|
||
- **锁定 AMI 版本**:生产环境应将 Bottlerocket AMI 锁定到特定版本,避免自动升级导致意外中断
|
||
- **通过 Bottlerocket API 配置**:而非手动 SSH 登录修改配置(默认禁用了交互式 Shell)
|
||
- **监控更新状态**:通过 API 检查当前活动的分区版本和待切换版本
|
||
|
||
## 相关资源
|
||
|
||
- GitHub:https://github.com/bottlerocket-os/bottlerocket
|
||
- 文档:https://bottlerocket.dev/
|
||
- AWS Bottlerocket AMI:AWS Marketplace 和 SSM 参数提供
|
||
|
||
## Aliases
|
||
- Bottlerocket OS
|
||
- 火箭瓶(中文社区昵称)
|
||
- Bottlerocket for EKS
|