Hiện đại hóa cơ sở hạ tầng Kubernetes của Snowflake Corporate với Bottlerocket và Karpenter

bởi Sameeksha Garg, Gaurav Singodia, Jagdish Pawar, RK Sai (Ravikiran Koduri), and Sayan Moitra vào ngày 18 tháng 4 năm 2025 trong các mục Amazon Elastic Kubernetes Service, Customer Solutions, Open Source Permalink 

Bộ phận Cloud Operations của Snowflake Corporate IT đã đứng trước một bước ngoặt quan trọng trong quá trình phát triển cơ sở hạ tầng cloud. Việc quản lý các workload được container hóa quy mô lớn trên Amazon Elastic Kubernetes Service (Amazon EKS) đòi hỏi một hệ điều hành hiện đại, bảo mật và hiệu quả. Thiết lập hiện tại đang chạy trên Amazon Linux 2 (AL2), hoạt động ổn định nhưng gặp phải một số thách thức. Việc tăng cường bảo mật yêu cầu cập nhật và vá lỗi thường xuyên, làm tăng chi phí vận hành. Việc đảm bảo các bản cập nhật nhất quán và an toàn trên toàn bộ các node quy mô lớn trở nên phức tạp. Ngoài ra, thời gian khởi động cho các node AL2 chậm hơn, dẫn đến sự kém hiệu quả trong việc mở rộng quy mô. Sau khi đánh giá kỹ lưỡng, Bottlerocket, hệ điều hành được tối ưu hóa cho container của AWS, đã nổi lên như lựa chọn lý tưởng để giải quyết những thách thức này.

Chiến lược Migration

Việc chuyển đổi từ AL2 sang Bottlerocket không chỉ là một thay đổi kỹ thuật; đây là một quyết định chiến lược nhằm chuẩn bị cho tương lai của cơ sở hạ tầng Kubernetes của Snowflake Corporate. Với quy mô và độ phức tạp của các workload, việc migration được thiết kế để đảm bảo zero downtime, tối thiểu hóa gián đoạn và mở rộng quy mô liền mạch thông qua tự động hóa. Để đạt được điều này, Snowflake Corporate đã chọn Karpenter, một open source Kubernetes cluster autoscaler, cùng với NodePoolNodeClass, để để tự động hóa việc cấp phát node. Việc migration được thực hiện theo từng giai đoạn để giảm thiểu rủi ro và đảm bảo tính ổn định.

Các Bước Migration

Việc migration bắt đầu với việc chuẩn bị cluster. Các  Bottlerocket AMIs được tích hợp vào môi trường EKS bằng cách sửa đổi cấu hình NodePool và NodeClass để sử dụng Bottlerocket làm AMI family mặc định. Các chính sách AWS Identity and Access Management (IAM) được tối ưu hóa để phù hợp với mô hình bảo mật của Bottlerocket, tuân theo nguyên tắc đặc quyền tối thiểu.

Sơ đồ kiến trúc này trực quan hóa chiến lược migration:

Việc triển khai Karpenter đã thay thế phương pháp cấp phát tĩnh truyền thống, cho phép cung cấp node đúng lúc (just-in-time). Tiếp theo là quá trình xác thực workload, với môi trường staging được sử dụng để kiểm tra các workload trên node Bottlerocket trước khi triển khai production. Giám sát hiệu suất được triển khai bằng FluentdDatadog để theo dõi các chỉ số thời gian thực, và các bài kiểm tra tuân thủ bảo mật đảm bảo rằng cơ sở hạ tầng bất biến của Bottlerocket phù hợp với các chính sách bảo mật của Snowflake Corporate.

Việc rollout sau đó được thực hiện theo từng giai đoạn, bắt đầu với các ứng dụng stateless. Node affinity, pod anti-affinity và categories được sử dụng để đảm bảo phân phối workload tối ưu. Việc giới thiệu từ từ các node Bottlerocket đảm bảo các workload chuyển đổi mượt mà cùng với các instance AL2 hiện có. Node cordoning và draining giúp ngừng hoạt động các instance AL2 mà không gây gián đoạn dịch vụ.

Cuối cùng, việc giám sát và tối ưu hóa nâng cao được triển khai. Tự động scaling với Karpenter điều chỉnh động node pool của cluster. Tinh chỉnh hiệu suất được thực hiện dựa trên các workload thực tế, và cải thiện khả năng quan sát cung cấp thông tin chi tiết về sức khỏe hệ thống, cho phép giải quyết các vấn đề một cách chủ động.

Ví dụ về việc định nghĩa NodeClass và liên kết với NodePool:

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

Các thách thức & cách giải quyết

Mặc dù Bottlerocket có nhiều ưu điểm, quá trình migration vẫn gặp phải những thách thức. Một số workload ban đầu gặp phải sự không tương thích với filesystem bất biến của Bottlerocket. Vấn đề này được giải quyết bằng cách sửa đổi các application image để hoàn toàn tuân thủ container và tận dụng các cấu hình chỉ đọc khi có thể. Bottlerocket yêu cầu cấu hình lại các IAM role để phù hợp với mô hình bảo mật của nó, điều này được giải quyết bằng cách triển khai kiểm soát truy cập chi tiết và tận dụng tích hợp IAM của Karpenter. Để giảm thiểu rủi ro, các workload được migration từng bước, đảm bảo hiệu suất ứng dụng duy trì ổn định trước khi hoàn toàn ngừng hoạt động các node AL2.

Lợi ích chính

Việc migration mang lại những cải thiện đáng kể về bảo mật, hiệu suất và hiệu quả vận hành. Bảo mật được tăng cường với các node bất biến ngăn chặn thay đổi trái phép và loại bỏ configuration drift. Việc hạn chế các điểm có thể bị tấn công, do loại bỏ package manager, shell access và SSH, đã giảm các lỗ hổng bảo mật.Các bản cập nhật tự động, đảm bảo tính toàn vẹn đảm bảo các node luôn được vá lỗi an toàn mà không có downtime.

Thời gian khởi động node nhanh hơn được đạt được với việc tối ưu hóa startup node, giảm thời gian cần thiết để node mới tham gia cluster, và cải thiện hiệu quả autoscaling đảm bảo các workload được lên lịch lại nhanh chóng. Hiệu quả vận hành được cải thiện với dynamic scaling bởi Karpenter, đảm bảo tài nguyên chỉ được cung cấp khi cần thiết, tránh over-provisioning. Tiết kiệm chi phí được thực hiện thông qua OS nhẹ của Bottlerocket và intelligent provisioning của Karpenter.

Cải thiện hiệu suất: Bottlerocket so với AL2

Bottlerocket liên tục chứng minh khả năng node readiness nhanh hơn. Các benchmark sơ bộ cho thấy Bottlerocket giảm thời gian node readiness khoảng 5 giây so với AL2. Việc native container image caching tiết kiệm khoảng 36 giây mỗi pod trên node mới, làm cho các unschedulable pod nhanh hơn khoảng 40 giây so với AL2.

Cải tiến bảo mật: AL2 so với Bottlerocket

Một so sánh trực tiếp về các cải tiến bảo mật cho thấy tại sao Bottlerocket là lựa chọn vượt trội:

Bài học kinh nghiệm

Quá trình di chuyển đã mang lại những bài học quý giá. Bảo mật và hiệu quả đi đôi với nhau, với thiết kế bất biến của Bottlerocket giúp củng cố security posture bảo mật của Snowflake Corporate. Tự động hóa đã đơn giản hóa sự phức tạp, vì khả năng mở rộng theo thời gian thực của Karpenter đã loại bỏ các can thiệp thủ công. Di chuyển từng bước đã giảm thiểu rủi ro, và việc triển khai theo giai đoạn cho phép tinh chỉnh cấu hình mà không ảnh hưởng đến sản xuất.

Kết luận: Tác động rộng lớn đối với các doanh nghiệp chạy EKS ở quy mô lớn

Việc di chuyển thành công hạ tầng Kubernetes của Snowflake Corporate sang Bottlerocket và Karpenter đã tạo ra một mô hình mới để ngành công nghiệp tham khảo. Những lợi ích về bảo mật nâng cao, cung cấp nhanh hơn và hiệu quả vận hành có thể được nhân rộng trên các doanh nghiệp khác quản lý Kubernetes ở quy mô lớn. Các cải tiến trong tương lai có thể bao gồm lập lịch workload được điều khiển bởi AI, tích hợp sâu hơn với các công cụ quan sát, và khám phá Kubernetes serverless với Bottlerocket. Bằng cách áp dụng BottlerocketKarpenter, Snowflake Corporate không chỉ nâng cao security posture mà còn đạt được những cải tiến về hiệu suất thông qua mở rộng động, nhấn mạnh sức mạnh của các giải pháp cloud-native hiện đại trong việc tạo ra các môi trường Kubernetes hiệu suất cao và có khả năng phục hồi.

Sameeksha Garg

Sameeksha là Trưởng nhóm Quản lý Tài khoản Kỹ thuật tại AWS, cam kết đẩy nhanh hành trình cloud cho các khách hàng Doanh nghiệp Toàn cầu của AWS. Cô có hơn 7 năm kinh nghiệm trong ngành về bảo mật cloud, vận hành cloud, quản lý hạ tầng cloud và vận động khách hàng. Cô đam mê công nghệ bảo mật cloud và nỗ lực giúp khách hàng bảo mật workload của họ trên cloud.

Gaurav Singodia

Gaurav Singodia là một lãnh đạo kỹ thuật công nghệ cao tại Snowflake với thành tích đã được chứng minh trong việc thúc đẩy đổi mới và tăng trưởng thông qua tư duy kinh doanh. Hiện tại anh lãnh đạo một tổ chức toàn cầu đa dạng bao gồm SRE, Kỹ sư Hệ thống, Kỹ sư Phần mềm, Hạ tầng Dữ liệu, Nền tảng Nhận dạng, AI/ML và Phân tích, với trọng tâm mạnh mẽ vào việc duy trì chất lượng cao và đạt được khả năng mở rộng trên tất cả các lĩnh vực.

Jagdish Pawar

Jagdish Pawar có hơn 18 năm kinh nghiệm lãnh đạo trên các startup công nghệ, công ty giai đoạn tăng trưởng và tập đoàn đại chúng. Chuyên môn của anh bao gồm xây dựng và lãnh đạo các nhóm liên chức năng, quản lý sản phẩm, kỹ thuật và quản lý các hoạt động cloud đáng tin cậy, an toàn và có thể mở rộng quy mô lớn.

RK Sai (Ravikiran Koduri)

RK Sai (Ravikiran Koduri) là Trưởng nhóm Hỗ trợ Doanh nghiệp tại AWS. Với vai trò cố vấn kỹ thuật, anh giúp các Nhà cung cấp Phần mềm Độc lập (ISV) vận hành workload ở quy mô lớn. RK Sai là người truyền bá cho AWS Deep Racer, AI và các dịch vụ Quản lý Tài chính Cloud. Trong thời gian rảnh, anh nỗ lực cụ thể hóa cảm giác hoàn thành trừu tượng.

Sayan Moitra

Sayan Moitra là một kỹ sư DevOps cấp cao chuyên về kỹ thuật cloud, DevOps và SRE, chuyên triển khai hạ tầng và ứng dụng. Anh sở hữu nhiều chứng chỉ AWS và CKAD, với chuyên môn được công nhận trong điện toán serverless. Anh đam mê học tập liên tục và giải quyết các vấn đề phức tạp.