0
0
Lập trình
NM

Kubernetes trên đám mây vs bare metal: Đánh giá thực tế

Đăng vào 5 tháng trước

• 6 phút đọc

Giới thiệu

Trong thế giới phát triển phần mềm hiện đại, Kubernetes đã trở thành một công cụ không thể thiếu cho việc triển khai và quản lý container. Tuy nhiên, khi quyết định giữa việc triển khai Kubernetes trên đám mây hay trên phần cứng vật lý (bare metal), nhiều nhà phát triển gặp phải những thách thức và hiểu lầm. Bài viết này sẽ đi sâu vào những điểm khác biệt giữa hai phương pháp triển khai này và cung cấp những thực tiễn tốt nhất để bạn có thể lựa chọn phương án phù hợp nhất cho dự án của mình.

Cuộc tranh luận về LoadBalancer

Mọi chuyện bắt đầu khi tôi và một người bạn, Govind, đang gỡ lỗi thiết lập Kubernetes của mình. Anh ấy đã nói một câu khiến tôi phải suy nghĩ: "LoadBalancer của tôi được cung cấp bởi Digital Ocean, không phải là dịch vụ LoadBalancer của K8s."

Tôi đã ngạc nhiên. Thực tế, cả hai chúng tôi đều đúng và đều sai. Chúng tôi đã khám phá ra rằng khái niệm "Cloud Native" có thể là một trong những trò lừa đảo lớn nhất trong ngành công nghệ.

Chứng minh của Govind

bash Copy
$ kubectl get svc -n ingress-nginx
NAME                      TYPE           CLUSTER-IP      EXTERNAL-IP
ingress-nginx-controller  LoadBalancer   10.109.16.98   152.42.156.235

Khẳng định của tôi

"Đây là dịch vụ K8s."

Khẳng định của anh ấy

"Đây là Load Balancer của Digital Ocean."

Sự thật

Chúng tôi đang có những cuộc đối thoại khác nhau. Vấn đề của chúng tôi không chỉ đơn thuần là kỹ thuật mà còn liên quan đến cách thức mà Kubernetes tương tác với các nhà cung cấp đám mây.

Khám Phá Thực Tế

Sau một thời gian tranh luận, tôi quyết định kiểm tra bằng cách triển khai một cụm Kubernetes tương tự trên một máy chủ bare metal.

bash Copy
# Trên Digital Ocean - Cài đặt của Govind
$ kubectl apply -f ingress-service.yaml
$ kubectl get svc
NAME                      TYPE           EXTERNAL-IP
ingress-nginx-controller  LoadBalancer   152.42.156.235  ✅

# Trên máy chủ bare metal - Sự thật gây sốc
$ kubectl apply -f ingress-service.yaml  # YAML Y HỆT NHƯ NHAU
$ kubectl get svc
NAME                      TYPE           EXTERNAL-IP
ingress-nginx-controller  LoadBalancer   <pending>  ❌

Một giờ trôi qua, vẫn là <pending>. Điều này đã làm tôi nhận ra rằng LoadBalancer thực sự là một dịch vụ K8s, nhưng nó cũng cung cấp một Load Balancer từ Digital Ocean.

Kiến Trúc Lừa Dối: Kubernetes trên Đám Mây vs Bare Metal

Điều mà không ai nói với bạn về type: LoadBalancer trong Kubernetes là nó không tạo ra một Load Balancer. Nó chỉ yêu cầu ai đó tạo một cái cho bạn.

yaml Copy
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: LoadBalancer  # <- Đây chỉ là một lời cầu nguyện tới các vị thần đám mây
  ports:
    - port: 80

Trên AWS, YAML này gửi tín hiệu đến Cloud Controller Manager của AWS, gọi API AWS, từ đó tạo ra một Elastic Load Balancer. Ngược lại, trên bare metal, YAML này chỉ gửi tín hiệu vào khoảng không, không ai lắng nghe.

Cách Kubernetes Thực Sự Hoạt Động trên Đám Mây

Khi bạn triển khai Kubernetes trên AWS, GCP hay Azure, có một thành phần ẩn đang làm tất cả công việc nặng nhọc: Cloud Controller Manager. Nó giống như có một người chú giàu có đang âm thầm trả tiền cho mọi thứ trong khi bạn giả vờ độc lập.

Cách Kubernetes "Hoạt Động" trên Bare Metal

Trên bare metal, YAML đó trở thành một danh sách mong muốn mà không có ông già Noel:

bash Copy
Your YAML → K8s API → ??? → Nothing happens → <pending> → Sadness

Để làm cho nó hoạt động, bạn cần cài đặt một số công cụ mở rộng cho Kubernetes:

  • MetalLB: Giả vờ là một Load Balancer đám mây
  • Longhorn/OpenEBS: Giả vờ là lưu trữ đám mây
  • Cluster API: Giả vờ là tính toán đám mây
  • Cert-Manager: Bởi vì đám mây đã cho bạn SSL miễn phí
  • External-DNS: Bởi vì đám mây đã quản lý DNS

So Sánh Chi Phí Thực Tế

Kubernetes trên Đám Mây:

bash Copy
# Thời gian triển khai: 10 phút
# Chi phí hàng tháng: $500-2000
# Tâm lý: Khỏe mạnh
# Những gì bạn thực sự đang trả tiền:
- EKS/GKE/AKS Control Plane: $75/tháng
- Load Balancers: $20 mỗi cái
- NAT Gateways: $45 mỗi cái
- Chi phí dữ liệu: $0.09/GB
- Persistent Volumes: $0.10/GB/tháng

Kubernetes trên Bare Metal:

bash Copy
# Thời gian triển khai: 3 ngày đến 3 tuần
# Chi phí hàng tháng: $100-500 (phần cứng/colocation)
# Tâm lý: Không có tâm lý
# Những chi phí ẩn mà không ai đề cập:
- Thời gian của bạn: 40-80 giờ thiết lập
- Bảo trì liên tục: 10-20 giờ/tháng
- Cuộc gọi lúc 3 giờ sáng khi nút chết
- Nhà thầu bạn sẽ thuê: $150/giờ
- Thay thế bàn phím bạn đã đập trong cơn giận dữ

Giải Pháp Khó Khăn

Tùy chọn 1: Chấp Nhận Sự Ràng Buộc

bash Copy
$ kubectl apply -f application.yaml
$ aws eks update-kubeconfig --name my-cluster
$ kubectl get svc  # Mọi thứ đều có IP!

Chỉ cần sử dụng EKS/GKE/AKS và chấp nhận rằng bạn đang trả "thuế cho việc muốn ngủ ngon vào ban đêm". Với nhiều công ty, chi phí $500-2000/tháng còn rẻ hơn thời gian kỹ thuật bạn sẽ phải dành cho việc chiến đấu với bare metal.

Tùy chọn 2: Con Đường Chiến Binh Bare Metal

bash Copy
$ # Cài đặt Ubuntu
$ # Cài đặt Kubernetes
$ # Cài đặt MetalLB
$ # Cấu hình IP pools
$ # Cài đặt Longhorn
$ # Gỡ lỗi mạng trong 6 giờ
$ # Đặt câu hỏi về sự lựa chọn cuộc sống

Con đường này hợp lý nếu:

  • Bạn có đội ngũ ops dành riêng cho việc này
  • Bạn đang ở quy mô mà chi phí đám mây vượt quá lương kỹ sư
  • Bạn có yêu cầu tuân thủ cấm sử dụng đám mây

Tùy chọn 3: Giải Pháp Trung Lập Hợp Lý

Sử dụng k3s, k0s hoặc MicroK8s. Những phân phối này đi kèm với mọi thứ cần thiết:

bash Copy
$ curl -sfL https://get.k3s.io | sh -

Khi Kubernetes trên Đám Mây Thực Sự Có Ý Nghĩa

Kubernetes trên đám mây không phải lúc nào cũng xấu. Đối với nhiều trường hợp, đây là lựa chọn đúng:

Khi Đám Mây Thắng Lợi:

  • Bạn cần mở rộng từ 10 đến 10,000 pods dựa trên lưu lượng truy cập
  • Bạn có đội ngũ 5 người quản lý hạ tầng cho 500 nhà phát triển
  • Yêu cầu tuân thủ của bạn yêu cầu "tính khả dụng cao"

Khi Bare Metal Thắng Lợi:

  • Bạn đang chạy một khối lượng công việc nhất quán 24/7
  • Bạn có yêu cầu phần cứng rất cụ thể
  • Bạn đang ở quy mô lớn như Facebook/Google

Khuyến Nghị Thực Tế

Đối với Các Startup (< 10 dịch vụ)

bash Copy
$ docker-compose up -d

Đối với Các Công Ty Đang Tăng Trưởng (10-100 dịch vụ)

bash Copy
$ eksctl create cluster --name my-cluster

Đối với Các Doanh Nghiệp Lớn (100+ dịch vụ)

bash Copy
$ # Thuê một đội ngũ nền tảng

Đối với Việc Học Hỏi

bash Copy
$ kind create cluster

Kết Luận

Sau tất cả những điều này, lựa chọn giữa Kubernetes trên đám mây và bare metal không chỉ dựa vào chi phí mà còn phụ thuộc vào nhu cầu của dự án. Sử dụng Kubernetes trên đám mây nếu bạn:

  • Đánh giá cao tốc độ hơn chi phí
  • Có khối lượng công việc biến đổi
  • Muốn tập trung vào sản phẩm của bạn

Sử dụng Kubernetes trên bare metal nếu bạn:

  • Có khối lượng công việc nhất quán
  • Có đội ngũ ops dành riêng
  • Đang ở quy mô lớn

Cuối cùng, sự thật là "Cloud Native" không phải là một lời dối trá – chỉ là một cái tên không phù hợp. Đôi khi, việc trả tiền cho AWS để xử lý sự phức tạp là quyết định kinh doanh thông minh nhất mà bạn có thể thực hiện.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào