Các phương pháp hay nhất của Kubernetes để nâng cao hiệu quả cho cluster

cloudFun

500_F_379064437_4MOxeZlSYCuSREoa0W044Yow5to4fhkZ.jpg
Với việc container hóa nhanh chóng thay đổi các mô hình kiến trúc của app development, nền tảng Kubernetes tiếp tục là lá cờ đầu của quá tình này. Dựa trên Khảo sát về việc chấp nhận sử dụng container năm 2020 của Forrester , khoảng 65% doanh nghiệp được khảo sát đã sử dụng hoặc đang có kế hoạch sử dụng container orchestration tool như một phần trong kế hoạch chuyển đổi CNTT của họ. Trong bất kỳ trường hợp nào, sự phổ biến của Kubernetes sẽ luôn phát triển.     

Mặc dù  Kubernetes mở rộng giải pháp future-proof container để cải thiện năng suất, nhưng các trường hợp sử dụng cũng chỉ ra rằng việc chỉ dựa vào các dịch vụ Kubernetes có sẵn để chứa các bản dựng ứng dụng có thể không phải lúc nào cũng là cách tiếp cận tốt nhất. Để tận dụng tối đa K8s, hãy thực hiện các phương pháp hay nhất và tuân theo mô hình được định cấu hình tùy chỉnh để đảm bảo nền tảng tối ưu mà ứng dụng của người dùng yêu cầu.  Bài viết này sẽ đi sâu vào 11 phương pháp hay nhất để nhận ra mô hình cluster Kubernetes có khả năng mở rộng, bảo mật và tối ưu hóa cao.
Kubernetes-Best-Practices.png
1. Tải xuống phiên bản mới nhất
Với các bản cập nhật phiên bản thường xuyên, Kubernetes phá thành các tính năng mới, sửa lỗi và nâng cấp nền tảng. Theo nguyên tắc chung, người dùng phải luôn sử dụng phiên bản Kubernetes mới nhất trên cluster của mình. Điều này đảm bảo rằng phiên bản của người dùng có:
  • Tất cả các tínhnăng được cập nhật, vì vậy người dùng không bỏ lỡ hỗ trợ từcác phiên bản cũ hơn, không được hỗ trợ.
  • Cập nhật các bản vá bảo mật giúp trì hoãn các vectơ tấn công tiềm ẩn trong khi sửa các lỗ hổng được báo cáo . 
Mặc dù các tính năng cập nhật làtốt, nhưng bảo mật được cập nhật là rất quan trọng.

2. Sử dụng
Việc áp dụng Kubernetes trong các doanh nghiệp lớn hơn với nhiềunhóm truy cập vào cùng một cluster yêu cầu một cách tiếp cận tùy chỉnh để sử dụng tài nguyên. Việc cung cấp khả năng truy cập không đúng thường dẫn đến xung đột giữa cácnhóm trong việc sử dụng tài nguyên.
Để giải quyết vấn đề này, hãy sử dụng namespace để đạt được sự cô lập ở cấp độ nhóm cho các nhóm đang cố gắng truy cập đồng thời vào cùng một tài nguyên cluster. Sử dụng hiệu quả Namespace giúp tạo nhiều phân vùng cluster hợp lý, do đó phân bổ tài nguyên ảo riêng biệt giữa các nhóm.

3. Duy trì container image nhỏ
Hầu hết các nhà phát triển mắc sai lầm khi sử dụng base image quá thừa thãi, có thể có tới 80% gói và thư viện mà họ không cần.
Luôn sử dụng container image nhỏ hơn vì nó giúp tạo các bản dựng nhanh hơn. Cách tốt nhất, người dùng nên:
  • Tìm kiếm Image Alpine, vì chúng nhỏ hơn 10 lần so với base image
  • Thêm các thư viện và gói cần thiết theo yêu cầu cho ứng dụng của người dùng.
Image nhỏ hơn cũng ít bị ảnh hưởng bởi các vectơ tấn công do bề mặt tấn công giảm.

4. Đặt yêu cầu và giới hạn tài nguyên
Để tránh trường hợp một nhómhoặc ứng dụng tiêu hết tài nguyên cluster, hãy đặt yêu cầu và giới hạn cho tài nguyên cluster, cụ thể là CPU và Bộ nhớ. Làm như vậy sẽ hạn chế việc sử dụng tài nguyên không cân đối của các ứng dụng và dịch vụ, do đó tránh thời gian ngừng hoạt động của dung lượng.
Để đặt các yêu cầu và giới hạn trên một container, người dùng có thể sử dụng thông số container sau làm tham chiếu:
Capture.PNG

Thông số kỹ thuật container trên về cơ bản phân bổ các yêu cầu tài nguyên 256 MiB bộ nhớ và 300mCPU, đồng thời giới hạn tối đa 900mCPU và 1024 MiB cho container  darwin .  

5. Sử dụng readinessProbe & livenessProbe

Tận dụng  Kubernetescheck probe để chủ động tránh các lỗi nhóm:  
  • Với  readinessProbe  cho ứng dụng sản xuất, Kubernetes kiểm tra xem ứng dụng đã sẵn sàng để bắt đầu phân phối lưu lượng hay chưa trước khi cho phép lưu lượng truy cập vào nhóm. Điều này về cơ bản cho biết liệu một nhóm có sẵn sàng chấp nhận lưu lượng truy cập và phản hồi các yêu cầu hay không.  
  • Thông qua  livenessProbe , Kubernetes thực hiện kiểm tra tình trạng để đảm bảo ứng dụng đáp ứng và chạy như dự kiến.  Trong trường hợp  livenessProbe  không thành công,  chính sách mặc định  kubelet  sẽ khởi động lại container để sao lưu nó.     
6. Triển khai RBAC để bảo vệ
Kiểm soát truy cập dựa trên vai trò(RBAC) giúp quản lý các chính sách truy cập để xác định ai có thể làm những gì trên Kubernetescluster. Để đặt quyền RBAC trên tài nguyên Kubernetes, Kubernetes cung cấp các tham số sau:
  • Vai trò đối với tài nguyên namespace 
  • ClusterRole cho tài nguyên không có container tên 
Đây là một ví dụ trong đó ClusterRole được sử dụng để quản lý quyền truy cập đọc vào các dịch vụ trên tất cả các namespace: 
Capture.1PNG.PNG
7. Tỷ lệ tự động
Chúng tôi đặc biệt khuyên người dùng nên tận dụng các lợi ích từ cơ chế tự động phân tỷ lệ của Kubernetes để tự động mở rộng quy mô các dịch vụ cluster với mức tiêu thụ tài nguyên tăng đột biến.Với Trình tự động phân loại  theo chiều ngang  và Trình  tự động điều chỉnh theo  cluster , khối lượng nút và nhóm được điều chỉnh động trong thời gian thực, do đó duy trì tải ở mức tối ưu và tránh thời gian ngừng hoạt động.   

8. Giám sát các plane component
Đừng mắc phải sai lầm phổ biến này: quên theo dõi bộ não của cluster Kubernetes — plane component. Plane component bao gồm:
  • Dịch vụ API Kubernetes
  • kubelet
  • người điềukhiển-quản lý
  • vvd
  • kube-proxy
  • kube-dns
Giám sát mặt phẳng điều khiển giúp xác định các vấn đề / mối đe dọa trong cluster và tăng độ trễ của nó. Người dùng cũng nên sử dụng các công cụ giám sát tự động( Dynatrace , Datadog , Sysdig, v.v.)hơn là quản lý các cảnh báo theocách thủ công. Theo dõi các thành phần mặt phẳng điều khiển Kubernetes của người dùng về cơ bản giám sát khối lượng công việc và mức tiêu thụ tài nguyên để giúp giảm thiểu các vấn đề với tình trạng cluster của người dùng.

9. Áp dụng quy trình làmviệc dựa trên Git
Sử dụng GitOps, quy trình làm việc dựa trên Git, làm mô hình ưa thích để sử dụng Git làm nguồn chân lý duy nhất cho tất cả tự động hóa, bao gồm cả CI / CD pipeline. Việc áp dụng GitOps framework giúp cải thiện năng suất bằng cách:
  • Giảm thời gian triển khai
  • Tăng cường khả năng theo dõi lỗi
  • Tự động hóa quy trình làm việc CI / CD
Tận dụng GitOps trên một cluster Kubernetes giúp người dùng đạt được sự quản lý thống nhất của cluster cũng như tăng tốc phát triển ứng dụng.

10. Để ý mức sử dụng đĩa cao
Sử dụng disk cao là một vấn đề phổbiến ảnh hưởng đến hiệu suất của cluster. Như một thói quen thường xuyên, người dùng nên theo dõi:
  • Hệ thống tệp gốc
  • Tất cả các ổ đĩađược liên kết vớicluster
Thông thường, người dùng cũng sẽ gặp cảnh báo sử dụng đĩa cao mà không rõ lý do;  những trường hợp như vậy thường có xu hướng khó sửa chữa do bản chất khó hiểu về nguyên nhân gốc rễ của chúng. Theo dõi cảnh báo luôn sẵn sàng giúp thực hiện các hành động khắc phục bằng cách mở rộng quy mô hoặc giải phóng dung lượng đĩa vào đúng thời điểm.

11. Thường xuyên kiểm tra nhật ký chính sách
Được đánh giá là phương pháp hay nhất, tất cả nhật ký được lưu trữ tại /var/log/audit.log phải được kiểm tra thường xuyên để:  
  • Xác định các mối đe dọa
  • Giám sát mức tiêu thụ tài nguyên
  • Ghi lại nhịp tim sự kiện chính của cluster Kubernetes
Các chính sách mặc định của cluste rKubernetes được xác định trong tệp  /etc/kubernetes/audit-policy.yaml  và có thể được tùy chỉnh cho các yêu cầu cụ thể. Ngoài ra, người dùng cũng có thể sử dụng Fluentd như một công cụ mã nguồn mở để duy trì lớp ghi nhật ký tập trung cho các container của người dùng.   

Cách tiếp cận tùy chỉnh cho K8s

Nếu người dùng đã sử dụng Kubernetes hoặc chuẩn bị sản xuất, một cách tiếp cận tùy chỉnh để định cấu hình cluster của người dùng sẽ đi một chặng đường dài.  Những phương pháp hay nhất này đã được đề xuất nhiều lần bởi các chuyên gia, những người đã trải qua quá trình học tập khó khăn.
Người dùng cũng có thể thường nhận ra một số thực tiễn có thể phù hợp với kiến trúc cluster của người dùng, vì mọi bản dựng ứng dụng sẽ yêu cầu một cách tiếp cận hoàn toàn khác để tinh chỉnh hiệu quả. Chìa khóa thành công sẽ dựa vào việc tối ưu hóa containerized framework chứa đựng của người dùng như thế nào.

Nguồn: https://www.bmc.com/blogs/kubernetes-best-practices/
 
Top