Tìm hiểu cách thức hoạt động kiến trúc Kubernetes

 

Kubernetes, hoặc k8s là một nền tảng mã nguồn mở tự động hoá việc quản lý, scaling và triển khai ứng dụng dưới dạng container hay còn gọi là Container orchestration engine. Nó loại bỏ rất nhiều các quy trình thủ công liên quan đến việc triển khai và mở rộng các containerized applications.

Gần đây, nhiều ứng dụng đã thực hiện container hoá bằng cách sử dụng docker và sử dụng nó như là môi trường production ngày càng tăng. Trên môi trường production, việc cấu trúc hệ thống chạy bằng container chỉ sử dụng docker là rất khó khăn. Cho nên việc sử dụng một nền tảng Container orchestration engine như là k8s thì khá phổ biến hiện nay.

Kubernetes orchestration cho phép bạn xây dựng các dịch vụ ứng dụng mở rộng nhiều containers. Nó lên lịch các containers đó trên một cụm, mở rộng các containers và quản lý tình trạng của các containers theo thời gian.

Các ứng dụng production thực tế mở rộng nhiều containers. Các containers đó phải được triển khai trên nhiều server hosts. Kubernetes cung cấp khả năng phối hợp và quản lý cần thiết để triển khai các containers theo quy mô cho các workloads đó.

Kubernetes ban đầu được phát triển và thiết kế bởi các kỹ sư tại Google. Đây cũng là công nghệ đằng sau các dịch vụ đám mây của Google. Google đã và đang tạo ra hơn 2 tỷ container deployments mỗi tuần và tất cả đều được hỗ trợ bởi nền tảng nội bộ: Borg.

Nên sử dụng Kubernetes khi nào?

  • Các doanh nghiệp lớn, có nhu cầu thực sự phải scaling hệ thống nhanh chóng, và đã sử dụng container (Docker).
  • Các dự án cần chạy >= 5 container cùng loại cho 1 dịch vụ. (Ví dụ dùng >=5 máy cùng để chạy code website thegioimaychu.vn ).
  • Các startup tân tiến, chịu đầu tư vào công nghệ để dễ dàng auto scale về sau.

Kubernetes giải quyết vấn đề gì?

Bằng việc sử dụng docker, trên 1 host bạn có thể tạo ra nhiều container. Tuy nhiên nếu bạn có ý định sử dụng trên môi trường production thì phải bắt buộc phải nghĩ đến những vấn đề dưới đây:

  • Việc quản lý hàng loạt docker host
  • Container Scheduling
  • Rolling update
  • Scaling/Auto Scaling
  • Monitor vòng đời và tình trạng sống chết của container.
  • Self-hearing trong trường hợp có lỗi xãy ra. (Có khả năng phát hiện và tự correct lỗi)
  • Service discovery
  • Load balancing
  • Quản lý data, work node, log
  • Infrastructure as Code
  • Sự liên kết và mở rộng với các hệ thống khác

Bằng việc sử dụng một Container orchestration engine như K8s có thể giải quyết được nhưng vấn đề trên đây. Trong trường hợp không sử dụng k8s, Thì sẽ phải cần thiết tạo ra cơ chế tự động hoá cho những cái kể trên, như thế thì cực kỳ tốn thời gian và không khả thi.

K8s quản lý thực thi các container sử dụng YAML để viết các Manifest.

Kubernetes quản lý các docker host và cấu trúc container cluster. Ngoài ra, khi thực thi các container trên K8s, bằng cách thực hiện replicas (tạo ra nhiều container giống nhau) làm cho hệ thống có sức chịu lỗi cao và tự động thực hiện load balancing. Thông qua cơ chế load balancing, chúng ta có thể tăng giảm số lượng container replica (auto scaling).

 

Khi thực hiện phân chia container vào các Node (docker host), dựa trên các loại docker host kiểu như “Disk SSD” hay “số lượng clock của CPU cao”… Hoặc dựa trên loại Workload kiểu như “Disk I/O quá nhiều”, “Băng thông đến một container chỉ định quá nhiều” … K8s sẽ ý thức được việc affinity hay anti-affinity và thực hiện Scheduling một cách hợp lý cho chúng ta.

Trong trường hợp không được chỉ định host cụ thể, K8s sẽ thực hiện scheduling tuỳ thuộc vào tình trạng CPU, memmory của docker host có trống hay không. Vì vậy, chúng ta không cần quan tâm đến việc quản lý bố trí container vào các docker host như thế nào.

Hơn nữa, trường hợp resource không đủ, thì việc auto scheduling của K8s cluster cũng sẽ được thực hiện tự động.

Được xây dựng theo quan điểm tính chịu lỗi cao, K8s thực hiện monitor các container theo tiêu chuẩn. Trong trường hợp bất ngờ nào đó, khi một container process bị dừng, K8s sẽ thực hiện Self-hearing bằng cách scheduling một container nữa.

Self-hearing là một khái niệm cự kỳ quan trọng trong k8s, nếu trường hợp có một node nào đó trong cluster xảy ra vấn đề ví dụ có thể là bị die, hay node đó được di chuyển đi. Cơ chế self-hearing sẽ tự động phục hồi mà không ảnh hưởng đến service.

Thêm nữa, ngoài việc monitor hệ thống, k8s còn có khả năng thiết lập health check bằng HTTP/TCP script.

Trường hợp sau khi auto scaling, phát sinh một vấn đề của endpoint đến container. Trong trường hợp sử dụng máy ảo, bằng việc setting load balancing endpoint sẽ được sử dụng như một VIP.

K8s cũng có một chức năng tương tự như vậy đó là Service. Service của k8s cung cấp chức năng load balancing cho hàng loạt các container được chỉ định. Việc tự động thêm, xoá container thời điểm scale là điều hiển nhiên, khi một container xảy ra sự cố thì tự động cách ly.

Khi thực hiện rolling update container thì việc đầu tiên k8s sẽ làm là cách ly container cho chúng ta, vì vậy k8s có thể đảm nhận việc quản lý các endpoint ở mức SLA cao. Trong trường hợp cấu trúc một hệ thống sử dụng docker, nên phân tách nhỏ các chức năng trong kiến trúc Microservice.

Trong kiến trúc Microservice, để sử dụng các image container được tạo ra tương ứng với từng chức năng và deploy chúng thì chức năng Service discovery thực sự cần thiết.

K8s là một Platform nhưng có khả năng liên kết tốt với các hệ sinh thái bên ngoài, có nhiều middleware chạy trên các service của k8s, trong tương lai chắc chắn sẽ còn nhiều hơn nữa.

  • Ansible: Deploy container tới Kubernetes
  • Apache Ignite: Sử dụng Service Discovery của Kubernetes, tự động tạo và scaling k8s clkuster
  • Fluentd: gửi log của container trong Kubernetes
  • Jenkins: Deploy container đến Kubernetes
  • OpenStack:Cấu trúc k8s liên kết với Cloud
  • Prometheus: Monitor Kubernetes
  • Spark: Thực thi native job trên Kubernetes(thay thế cho YARN)
  • Spinnaker:Deploy container đến Kubernetes

Thêm nữa, K8s chuẩn bị một vài instance để có thể mở rộng, thực thi chức năng độc lập, nó có thể sử dụng platform như là một framework. Bằng cách sử dụng khả năng mở rộng, chúng ta có thể thực hiện release một ReplicaSet mà k8s cung cấp.

Quá trình hình thành Kubernetes là gì?

Khái niệm Kubernetes là gì cũng khá ngắn gọn và dễ hiểu. Nôm na thì đây một mã nguồn mở được dùng để tự động triển khai hệ thống, quản lý các container. Nó được phát triển bởi Google. Và bản thân chính Google cũng đang sử dụng Kubernetes để quản lý hàng tỉ docker container mà họ đang quản lý.

Để hiểu hơn về Kubernetes là gì chúng ta sẽ cùng nhìn lại lịch sử cách quản lý các ứng dụng trong quá khứ nhé. 

Quản lý ứng dụng theo cách truyền thống

Đầu tiên, trước khi chưa biết đến Kubernetes là gì đa phần chúng ta đều sử dụng một máy chủ vật lý và cài các ứng dụng lên đó. Nó giống như cách chúng ta sử dụng một máy tính và cùng lúc cài các phần mềm lên trên đó vậy. 

Nhược điểm lớn nhất của hình thức truyền thống này là không phân bổ đồng đều tài nguyên cho từng ứng dụng khác nhau được. Thời điểm đó, khó có thể có cách giải quyết khác ổn thoả hơn khi chúng ta gần như chưa có nhiều người biết đến khái niệm Kubernetes là gì nữa.

Giải pháp ảo hoá

Trước những bất cập của việc quản lý theo cách truyền thống, giải pháp ảo hoá máy chủ được ra đời. Hiểu một cách đơn giản thì dựa trên nền tảng một máy chủ vật lý, sau đó người ta sử dụng phần mềm ảo hoá để nhân bản ra nhiều máy chủ ảo khác nhau. Như vậy, giải pháp này giải quyết được vấn đề phân bổ tài nguyên cho từng ứng dụng cụ thể mà chưa cần phải biết đến Kubernetes là gì.

Tuy nhiên, giải pháp này cũng không phải là không có nhược điểm. Không phải lúc nào việc triển khai máy ảo cũng là một ý tưởng hay. Bạn không thể cùng lúc triển khai và quản lý hàng ngàn máy ảo khác nhau như thế được. Do đó, khái niệm container và Kubernetes là gì ra đời.

Triển khai container

Về cơ bản container cũng tương tự như các máy ảo kể trên. Nhưng có một điểm khác là chúng có tính cô lập để chia sẻ hệ điều hành giữa các ứng dụng với nhau. Bản thân container cũng có nhiều lợi ích khác nhau do đó nó ngày càng được sử dụng phổ biến hơn.

Tuy nhiên, khi mà số lượng container nhiều thì việc quản lý các container đó cũng là một vấn đề cần phải xử lý. Từ đó khái niệm Kubernetes là gì được ra đời. Kubernetes giúp quản lý các container và tự động triển khai hệ thống một cách nhanh chóng và dễ dàng nhất.

Sau khi tìm hiểu và biết được Kubernetes là gì rồi, phần tiếp theo trong bài viết này chúng ta sẽ cùng tìm hiểu kỹ hơn về những ứng dụng trong thực tế của Kubernetes là gì nhé.

Các trường hợp nên sử dụng Kubernetes là gì?

Một khi đã hiểu rõ khái niệm và đặc tính của Kubernetes là gì chúng ta có thể dễ dàng nhận thấy nó có thể được sử dụng trong một số trường hợp đặc biệt sau đây:

+ Thứ nhất, khi bạn cần phải mở rộng hệ thống một cách nhanh chóng thì Kubernetes sẽ giúp bạn giải quyết vấn đề này. Nó giúp quản lý tất cả số lượng container mà bạn có. Tuy nhiên, có một lưu ý là trước đó bạn phải biết và sử dụng container thành thạo rồi đã nhé.

+ Thứ hai, trái ngược lại với ý trên nếu bạn là một doanh nghiệp nhỏ thì bạn chỉ nên tìm hiểu Kubernetes là gì thôi. Việc sử dụng nó tại thời điểm này có thể là một sự lãng phí. Hoặc giả dụ bạn chắc chắn rằng hệ thống của mình sau này sẽ phình to hơn thì bạn có thể chủ động sử dụng nó ngay từ đầu.

Thông tin tham khảo:

Post a Comment

Mới hơn Cũ hơn