使用 Bottlerocket 和 Karpenter 对 Snowflake Corporate 的 Kubernetes 基础设施进行现代化改造

作者: Sameeksha Garg, Gaurav Singodia, Jagdish Pawar, RK Sai (Ravikiran Koduri), Sayan Moitra |

Snowflake 企业 IT 云运营进入了其云基础架构演变的关键时刻。在 Amazon Elastic Kubernetes Service(Amazon EKS)上管理大规模容器化工作负载需要现代、安全和高效的操作系统。在 Amazon Linux 2 (AL2) 上运行的现有设置可以正常运行,但存在一些挑战。安全强化需要频繁更新和修补,从而增加了运营开销。事实证明,确保在大型节点群上进行一致和安全的更新很麻烦。此外,AL2 节点的启动时间较慢,导致扩展效率低下。经过全面评估,亚马逊云科技的容器优化操作系统 Bottlerocket 成为应对这些挑战的理想选择。

迁移策略

从 AL2 过渡到 Bottlerocket 不仅仅是一次技术转变;这是一项战略决策,旨在使 Snowflake 公司的 Kubernetes 基础设施经得起未来考验。考虑到工作负载的规模和复杂性,迁移旨在确保零停机时间、最小中断以及通过自动化实现无缝扩展。为了实现这一目标,Snowflake Corporate 选择了开源 Kubernetes 集群自动扩缩器 Karpenter 以及 NodePool 和 NodeClass 来促进动态节点配置。迁移是分阶段执行的,以最大限度地降低风险并确保稳定性。

迁移步骤

迁移始于集群准备。通过修改 NodePool 和 NodeClass 配置,使用 Bottlerocket 作为默认 AMI 系列,Bottlerocket AMI 集成到 EKS 环境中。根据最小权限原则,对 Amazon Identity and Access Management(IAM)策略进行了优化,以与 Bottlerocket 的安全模型保持一致。

此架构图可视化了迁移策略:

Bottlerocket EKS 架构图

Karpenter 部署取代了传统的静态配置方法,实现了即时节点配置。随后进行了工作负载验证,在生产部署之前,使用暂存环境在 Bottlerocket 节点上测试工作负载。性能监控是使用 Fluentd 和 Datadog 实施的,以跟踪实时指标,安全合规性测试确保了 Bottlerocket 的不可变基础设施与 Snowflake Corporate 的安全策略保持一致。

然后分阶段推出,从无状态应用程序开始。使用节点亲和性、Pod 反关联性和类别来确保优秀的工作负载分布。Bottlerocket 节点的逐步引入确保了工作负载与现有 AL2 实例一起顺利过渡。节点封锁和排空有助于在不中断服务的情况下停用 AL2 实例。

最后,实施了增强的监控和优化。使用 Karpenter 进行自动扩展可以动态调整集群的节点池。性能调整是根据实际工作负载进行的,可观测性的改进提供了对系统运行状况的见解,从而可以主动解决问题。

定义 NodeClass 并将其与节点池关联的示例:

apiVersion: karpenter.k8s.aws/v1alpha5
kind: NodeClass
metadata:
  name: bottlerocket-nodeclass
spec:
  amiFamily: Bottlerocket
  instanceProfile: "KarpenterNodeInstanceProfile"
  securityGroupSelector:
    aws-ids: ["sg-0123456789"]
Example of defining a NodePool:
apiVersion: karpenter.k8s.aws/v1alpha5
kind: NodePool
metadata:
  name: bottlerocket-nodepool
spec:
  template:
    spec:
      nodeClassRef:
        name: bottlerocket-nodeclass
  limits:
    resources:
      cpu: 1000
  ttlSecondsAfterEmpty: 30

Example of applying node affinity to schedule workloads on Bottlerocket nodes:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: bottlerocket-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: bottlerocket-app
  template:
    metadata:
      labels:
        app: bottlerocket-app
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: karpenter.k8s.aws/node-pool
                operator: In
                values:
                - bottlerocket-nodepool
      containers:
      - name: app
        image: my-app-image:latest
Example of using pod anti-affinity to spread workloads across different nodes:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: workload-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: critical-app
  template:
    metadata:
      labels:
        app: critical-app
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - critical-app
            topologyKey: "kubernetes.io/hostname"
      containers:
      - name: workload
        image: workload-image:latest

挑战及其应对方式

尽管 Bottlerocket 具有优势,但迁移过程仍面临挑战。一些工作负载最初遇到了与 Bottlerocket 的不可变文件系统不兼容的情况。通过修改应用程序映像使其完全兼容容器并在适用的情况下利用只读配置,解决了这个问题。Bottlerocket 需要重新配置 IAM 角色以使其与其安全模型保持一致,这个问题是通过实施细粒度的访问控制和利用 Karpenter 的 IAM 集成来解决的。为了降低风险,工作负载以增量方式迁移,确保在完全停用 AL2 节点之前应用程序性能保持稳定。

主要好处

迁移极大地提高了安全性、性能和运营效率。不可变节点可防止未经授权的更改并消除配置偏差,从而增强了安全性。由于删除了包管理器、shell 访问和 SSH,攻击面减少了,漏洞也减少了。自动的原子更新确保了节点在不停机的情况下保持安全补丁。

通过优化节点启动实现了更快的节点启动时间,减少了新节点加入集群所需的时间,提高了自动扩展效率,确保了快速重新安排工作负载。Karpenter 通过动态扩展提高了运营效率,确保仅在需要时配置资源,避免了过度配置。通过 Bottlerocket 的轻量级操作系统和 Karpenter 的智能配置实现了成本节约。

性能提升:Bottlerocket 与 AL2

Bottlerocket 一直表现出更快的节点准备就绪速度。初步基准测试显示,与 AL2 相比,Bottlerocket 将节点准备时间缩短了约 5 秒。原生容器镜像缓存使新节点上的每个 pod 缩短了大约 36 秒,与 AL2 相比,不可调度的 pod 快了大约 40 秒。

Bottlerocket 与 AL2 的表现图表

安全增强:AL2 与 Bottlerocket

对安全改进的直接比较凸显了为什么 Bottlerocket 是更好的选择:

功能对比图

吸取的教训

迁移吸取了宝贵的经验教训。安全性和效率齐头并进,Bottlerocket 的不可改变的设计强化了 Snowflake Corporate 的安全态势。自动化简化了复杂性,因为 Karpenter 的实时扩展消除了手动干预。增量迁移将风险降至最低,分阶段部署允许在不影响生产的情况下微调配置。

结论:对大规模运行 EKS 的企业的更广泛影响

Snowflake Corporate 的 Kubernetes 基础架构成功迁移到 Bottlerocket 和 Karpenter 为该行业开创了新的模式。增强安全性、更快的配置和运营效率的好处可以在其他大规模管理 Kubernetes 的企业中复制。未来的增强功能可能包括人工智能驱动的工作负载调度、与可观测性工具的深度集成,以及使用 Bottlerocket 探索无服务器 Kubernetes。通过采用 Bottlerocket 和 Karpenter,Snowflake Corporate 不仅增强了其安全状况,而且还通过动态扩展实现了性能改进,这突显了现代云原生解决方案在实现高性能、弹性 Kubernetes 环境方面的力量。



Sameeksha Garg

Sameeksha Garg

Sameeksha 是亚马逊云科技的技术客户经理,致力于加速亚马逊云科技全球企业客户的云之旅。她在云安全、云运营、云基础设施管理和客户宣传方面拥有 7 年以上的行业经验。她对云安全技术充满热情,致力于帮助客户保护其云端工作负载。

Gaurav Singodia

Gaurav Singodia

Gaurav Singodia 是 Snowflake 的高科技工程领导者,在通过创业思维推动创新和增长方面有着良好的记录。他目前领导着一个多元化的全球组织,包括 SRE、系统工程师、软件工程师、数据基础架构、身份平台、人工智能/机器学习和分析,专注于保持高质量和实现所有领域的可扩展性。

贾格迪什·帕瓦尔

Jagdish Pawar

Jagdish Pawar 在科技初创公司、成长阶段公司和上市公司拥有超过 18 年的领导经验。他的专业知识包括建立和领导跨职能团队、产品管理、工程设计以及管理可靠、安全和可大规模扩展的云运营。

RK Sai(拉维基兰·科杜里)

RK Sai (Ravikiran Koduri)

RK Sai(拉维基兰·科杜里)是亚马逊云科技的企业支持主管。作为技术顾问,他帮助独立软件供应商 (ISV) 大规模运营工作负载。RK Sai 是亚马逊云科技 Deep Racer、人工智能和云财务管理服务的推广者。在空闲时间,他努力将抽象的成就感具体化。

Sayan Moitra

Sayan Moitra

Sayan Moitra 是一名高级开发运营工程师,专门研究云工程、DevOps 和 SRE,专门部署基础设施和应用程序。他拥有多项亚马逊云科技认证和 CKAD,在无服务器计算方面拥有公认的专业知识。他热衷于持续学习和解决复杂问题。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。