Kubernetes là gì? Vai trò và các thuật ngữ phổ biến

GIANG
2731
15-10-2020
Kubernetes là gì? Vai trò và các thuật ngữ phổ biến

Với sự bùng nổ mạnh mẽ của các nền tảng ứng dụng nhằm đáp ứng nhu cầu người dùng tăng cao, các công nghệ phục vụ cho việc phát triển ứng dụng ở quy mô lớn với tốc độ ra mắt nhanh chóng trở nên cần thiết hơn bao giờ hết.

Kubernetes trong đó là một công nghệ mới nổi lên, hứa hẹn sẽ tạo ra những thay đổi mang tính cách mạng cho công cuộc phát triển và triển khai ứng dụng nhờ các ưu điểm: tự động hóa, co giãn linh hoạt, tiết kiệm rất nhiều giờ công sức, giảm thiểu rất nhiều sai phạm… Cùng Bizfly Cloud tìm hiểu Kubernetes là gì và ứng dụng như thế nào nhé!

Kubernetes là gì?

Kubernetes (hay k8s hay gọi ngắn gọn là "kube") là một nền tảng mã nguồn mở tự động hóa giúp triển khai vận hành hệ thống, scaling, đồng thời quản lý các Container hay còn gọi là Container Orchestration Engine. Loại bỏ được các quy trình thủ công phức tạp và mở rộng các containerized applications.

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

Lịch sử phát triển Kubernetes

Kubernetes ban đầu được các kỹ sư Google phát triển và thiết kế. Và Google là một trong những cái tên tiên phong đóng góp cho công cuộc phát triển công nghệ Linux container. Đồng thời, hãng cũng rất cởi mở trong việc công khai về cách họ triển khai công việc trong các containers. (Đây là công nghệ nền tảng cho các dịch vụ đám mây của Google). Google tạo ra hơn 2 tỷ container deployments mỗi tuần — tất cả đều được hỗ trợ bởi nền tảng nội bộ: Borg. Borg là tiền thân của Kubernetes, do đó những bài học kinh nghiệm từ việc phát triển Borg qua nhiều năm góp phần tạo nên công nghệ Kubernetes.

Kubernetes là gì? Vai trò và các thuật ngữ phổ biến - Ảnh 1.

Fun fact: Bảy chữ cái trong logo Kubernetes có liên quan và phản ánh tên gốc của dự án, "Project Seven of Nine".

Red Hat là một trong những công ty đầu tiên hợp tác với Google trong dự án Kubernetes trước khi Kubernetes được ra mắt và trở thành nhà tài trợ lớn thứ 2 cho dự án ngay từ những ngày đầu. Và Google đã tặng lại dự án Kubernetes cho Cloud Native Computing Foundation (CNCF) được thành lập vào năm 2015.

Tại sao Kubernetes lại cần thiết?

Các production apps thường trải dài trên 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 orchestration cho phép bạn xây dựng các dịch vụ ứng dụng mở rộng nhiều containers, 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.

Kubernetes là gì? Vai trò và các thuật ngữ phổ biến - Ảnh 2.

Vận hành Kubernetes từ Bizfly Cloud nhanh chóng

Kubernetes cũng cần tích hợp với networking, storage, security, telemetry và các dịch vụ khác để cung cấp một cơ sở hạ tầng container toàn diện.

Kubernetes là gì? Có vai trò quan trọng như thế nào trong việc phát triển phần mềm, ứng dụng hiện đại? - Ảnh 1.

Tất nhiên, điều này sẽ tùy thuộc vào cách bạn sử dụng các containers trong môi trường của mình. Một ứng dụng thô sơ của các Linux containers sẽ coi chúng là các máy ảo nhanh và hiệu quả. Khi bạn mở rộng quy mô này sang môi trường sản xuất và nhiều ứng dụng, rõ ràng là bạn cần nhiều containers phối hợp hoạt động cùng nhau để phân phối các dịch vụ riêng lẻ. Điều này làm tăng đáng kể số lượng container trong môi trường, do đó sự phức tạp cũng tăng lên theo.

Kubernetes có thể khắc phục rất nhiều vấn đề phổ biến liên quan tới sự gia tăng container - phân loại các containers đi cùng nhau thành một "pod". Pods thêm một lớp abstraction vào các containers được nhóm lại, giúp bạn lên lịch cho các workload và cung cấp các dịch vụ cần thiết — như kết nối mạng và lưu trữ — cho các containers đó. 

Các phần khác của Kubernetes giúp cân bằng tải trên các nhóm này và đảm bảo đúng số lượng containers đang chạy để hỗ trợ workloads.

Với việc triển khai Kubernetes đúng đắn, và có thêm sự trợ giúp từ các dự án mã nguồn mở khác như Atomic Registry, Open vSwitch, heapster, OAuth và SELinux, bạn có thể điều hành tất cả các phần trong cơ sở hạ tầng containers của mình một cách trơn tru.

Sử dụng Kubernetes khi nào?

Nếu doanh nghiệp thực sự muốn scaling hệ thống một cách nhanh chóng và đã sử dụng container (Docker).

Những dự án bắt buộc chạy >=5 container cùng 1 loại hình dịch vụ.

Những startup đang phát triển, chịu đầu tư vào công nghệ để dễ dàng auto scale về sau.  

Ưu điểm của Kubernetes

Ưu điểm chính của việc sử dụng Kubernetes, đặc biệt nếu bạn đang tối ưu app dev cho cloud, là nó cung cấp cho bạn nền tảng để lên lịch và chạy các containers trên các clusters của máy vật lý hoặc máy ảo. Nói chung, công nghệ giúp bạn triển khai và hoạt động trên cơ sở hạ tầng container-based trong môi trường sản xuất. Và bởi vì Kubernetes tự động hóa các hoạt động vận hành nên bạn có thể thực hiện nhiều tác vụ đối với containers cũng giống như những nền tảng ứng dụng khác hoặc các hệ thống quản lý khác.

Kubernetes là gì? Vai trò và các thuật ngữ phổ biến - Ảnh 4.

Tối ưu tài nguyên, phát triển ứng dụng dễ dàng mà còn miễn phí

Với Kubernetes bạn có thể:

- Điều hành, phân bổ containers trên nhiều máy chủ.

- Tận dụng phần cứng nhiều hơn để tối đa hóa tài nguyên cần thiết cho việc chạy các ứng dụng doanh nghiệp.

- Kiểm soát, tự động triển khai và cập nhật ứng dụng.

- Gắn và thêm bộ nhớ để chạy các ứng dụng stateful.

- Mở rộng các ứng dụng được chứa trong container và tài nguyên của chúng một cách nhanh chóng

- Quản lý các dịch vụ, đảm bảo các ứng dụng được triển khai luôn chạy theo cách bạn triển khai chúng.

- Health-check và self-heal các ứng dụng bằng tính năng tự động phát hiện, tự động sửa lỗi, tự động dò tìm và tự động mở rộng.

Tuy nhiên, Kubernetes dựa vào các dự án khác để cung cấp đầy đủ các dịch vụ này. Với việc bổ sung các dự án nguồn mở khác, bạn hoàn toàn có thể nhận thấy sức mạnh của Kubernetes. Những kết hợp cần thiết bao gồm:

- Registry, thông qua các dự án như Atomic Registry hoặc Docker Registry.

- Networking, thông qua các dự án như OpenvSwitch và định tuyến cạnh thông minh (intelligent edge routing).

- Telemetry, thông qua các dự án như heapster, kibana, hawkular và elastic.

- Security, thông qua các dự án như LDAP, SELinux, RBAC và OAUTH với multi-tenancy layers.

- Automation, với việc bổ sung các Playbook Ansible để cài đặt và quản lý vòng đời của cụm.

- Services, thông qua một danh mục phong phú về nội dung được xử lý trước của các mẫu ứng dụng phổ biến.

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

Khi thực sự chạy các container trong production, một người có thể tạo đến hàng chục, thậm chí hàng nghìn container theo thời gian.

Những container này cần được triển khai (trên nhiều server host), quản lý, kết nối và cập nhật; và nếu thực hiện công việc này một cách thủ công, sẽ cần cả một nhóm chỉ để dành riêng cho việc này.

Gần đây, nhiều ứng dụng đã thực hiện container hoá bằng cách sử dụng docker và triển khai trong môi trường production ngày càng nhiều. Tuy nhiên, trên môi trường production, việc quản lý hệ thống chạy bằng container chỉ sử dụng docker là rất khó khăn.

Kubernetes là gì? Vai trò và các thuật ngữ phổ biến - Ảnh 4.

Với việc sử dụng docker, ta có thể tạo ra nhiều container trên 1 host. Tuy nhiên nếu muốn sử dụng trên môi trường production thì sẽ cần phải quan tâm đến những vấn đề như:

Quản lý nhiều docker host cùng lúc

Điều phối các container

Rolling update

Scaling/Auto Scaling

Giám sát tình trạng của container (còn hoạt động hay không)

Self-healing (tự phát hiện và sửa lỗi) trong trường hợp có lỗi xảy ra

Service discovery

Load balancing

Quản lý data, work load, log

Infrastructure as Code

Liên kết và mở rộng với các hệ thống khác

Cho nên việc sử dụng một nền tảng Container orchestration engine như Kubernetes sẽ giúp khắc phục được những tồn tại này. Nếu không sử dụng Kubernetes, sẽ phải xây dựng các cơ chế tự động hóa cho các vấn đề trên từ đầu, và đây là 1 nhiệm vụ không khả thi.

Các thuật ngữ phổ biến trong Kubernetes

Master Node: Máy điều khiển các Kubernetes nodes. Đây là nơi tất cả các nhiệm vụ được giao.

Node: Các máy này thực hiện các tác vụ được yêu cầu, được giao. Kubernetes master điều khiển chúng.

Pod: Một nhóm gồm một hoặc nhiều containers được triển khai cho single node. Tất cả các containers trong một pod dùng chung một IP address, IPC, hostname, và những nguồn khác. Pods tách network và storage ra khỏi container bên dưới. Điều này cho phép bạn di chuyển các containers xung quanh cluster dễ dàng hơn.

Replication controller: Replication controller điều khiển việc nên có bao nhiêu bản sao giống hệt nhau của một pod khi đang chạy ở đâu đó trên cluster.

Service: Tách các work definitions khỏi các pod. Các kubernetes service proxies tự động nhận các yêu cầu dịch vụ tới pod thích hợp — bất kể nó di chuyển đến đâu trong cụm hoặc ngay cả khi nó được thay thế.

Kubelet: Dịch vụ này chạy trên các node, đọc các tệp kê khai container và đảm bảo các container đã xác định sẽ được khởi động và chạy.

kubectl: Đây là công cụ cấu hình dòng lệnh cho Kubernetes.

Image: Là phần mềm được đóng gói lại thành một chương trình chạy dưới dạng container. Những Pod này sẽ lấy trực tiếp các Image để chạy.

Những Image này thường được quản lý từ một nơi lưu trữ tập trung. Chẳng hạn sử dụng Docker Hub để chứa các Image của nhiều ứng dụng phổ biến như nginx, mysql, wordpress..

Deployment: Với deployment sẽ giúp bạn triển khai, cập nhật và quản trị những Pod thông dụng.

Label: Chúng được dùng quản lý Pod. Giúp đánh nhãn các Pod thông qua Frontend, backend trên nền dev, qc, uat, production...

Chức năng của Kubernetes

K8s quản lý nhiều Docker host bằng cách tạo các container cluster (cụm container). Ngoài ra, khi chạy một container trên Kubernetes,  việc triển khai  replicas (tạo các bản sao giống nhau) có thể đảm bảo cân bằng tải (load balancing) tự động và tăng khả năng chịu lỗi. Đồng thời nhờ có load balancing mà cũng có thể thực hiện autoscaling - tự động tăng giảm số lượng replicas.

Kubernetes là gì? Vai trò và các thuật ngữ phổ biến - Ảnh 3.

Docker host còn gọi là Node. Khi sắp xếp các container vào các Node này, có các dạng workload như "Sử dụng Disk I/O nhiều" và "sử dụng băng thông cao", và "Disk là SSD" và "CPU xung nhịp cao cao". Tùy thuộc vào loại máy chủ Docker và loại workload, K8s có thể tự ý thức được việc affinity hay anti-affinity để lập lịch cho hợp lý.

Kubernetes là gì? Vai trò và các thuật ngữ phổ biến - Ảnh 4.

Trong các trường hợp không cụ thể khác, scheduling sẽ được thực hiện dựa trên tình trạng CPU và bộ nhớ trống, do đó người dùng không cần quản lý việc đặt container vào Docker host nào. Ngoài ra, nếu tài nguyên không đủ, k8s cũng sẽ tự động phân tỷ lệ các Kubernetes cluster. 

Kubernetes là gì? Vai trò và các thuật ngữ phổ biến - Ảnh 5.

Với khả năng chịu lỗi cao, Kubernetes thực hiện giám sát container theo tiêu chuẩn. Trong trường hợp có sự cố bất ngờ, một container nào đó bị dừng thì sẽ thực hiện self-healing bằng cách khởi động lại container đó. Self-healing là một trong những khái niệm quan trọng trong k8s giúp tự động khôi phục các service khi node xảy ra lỗi, bị die, hoặc bị di chuyển đi...

Bên cạnh việc giám sát, K8s cũng có thể thiết lập healthcheck với các tập lệnh HTTP/TCP/shell. 

Kubernetes là gì? Vai trò và các thuật ngữ phổ biến - Ảnh 6.

Khi thực hiện auto scaling, nếu xảy ra vấn đề về endpoint đến container. Trong trường hợp sử dụng máy ảo, với việc đặt load balancing, endpoint được cấp là VIP. 

K8s cũng có chức năng như vậy gọi là Service cung cấp load balancing cho một nhóm container cụ thể. Ngoài việc tự động thêm và xóa tại thời điểm scale, nó tự động ngắt kết nối trong trường hợp container bị lỗi. Việc tự động cách ly trước khi rolling updates container, cho thấy K8s có khả năng quản lý các endpoint với SLA cao. 

Với kiến trúc microservices, để triển khai và sử dụng container image tạo ra tương ứng cho mỗi chức năng sẽ cần đến Service discovery. 

Kubernetes là gì? Vai trò và các thuật ngữ phổ biến - Ảnh 7.

Như vậy, để sử dụng Docker trong môi trường production mà không sử dụng công cụ điều phối như Kubernetes, người dùng sẽ cần phải tự tạo các chức năng được đề cập phía trên. Nhưng với Kubernetes, chúng ta có thể tận dụng cơ chế tự động hóa của công cụ này. 

Kubernetes phù hợp với cơ sở hạ tầng của bạn ra sao?

Kubernetes là gì? Có vai trò quan trọng như thế nào trong việc phát triển phần mềm, ứng dụng hiện đại? - Ảnh 3.

Kubernetes chạy trên một hệ điều hành và tương tác với các pod của container chạy trên các node. Kubernetes master nhận các lệnh từ một administrator (hoặc nhóm DevOps) và chuyển các lệnh đó tới các nodes phụ thuộc. Việc phân phối này hoạt động trên vô số các dịch vụ để tự động quyết định node nào phù hợp nhất với nhiệm vụ. Sau đó, nó phân bổ tài nguyên và gán các nhóm trong node đó để hoàn thành công việc được yêu cầu.

Vì vậy, từ quan điểm cơ sở hạ tầng, có rất ít thay đổi về cách bạn quản lý containers. Sự kiểm soát của bạn đối với những containers đó xảy ra ở cấp độ cao hơn, giúp bạn kiểm soát tốt hơn mà không cần phải can thiệp từng containers hoặc node riêng biệt.

Cài đặt Kubernetes với Bizfly Kubernetes Engine

- Nhà cung cấp dịch vụ Kubernetes có máy chủ đặt tại Việt Nam, giúp người dùng tại Việt Nam truy cập ứng dụng nhanh hơn, ít bị ảnh hưởng mỗi khi có sự cố network quốc tế.

- Là đơn vị tiên phong trong cung cấp dịch vụ tại Việt Nam, BizFly Cloud có nhiều ưu thế giúp hỗ trợ khách hàng tốt nhất về: hệ ngôn ngữ tiếng Việt, hỗ trợ 24/7...

- Tích hợp đầy đủ với các dịch vụ khác trong bộ giải pháp 20+ dịch vụ của BizFly Cloud (Load Balancer, Cloud Server, Autoscaling, Cloud Watcher, Firewall, Container Registry,…), giúp đơn giản mô hình, tối ưu về tốc độ và tính bảo mật cho hệ thống của người dùng.

Kubernetes là gì? Vai trò và các thuật ngữ phổ biến - Ảnh 12.

Cài đặt Kubernetes Engine dễ dàng chỉ với vài cú click

- Chi phí tính theo tài nguyên sử dụng theo thời gian thực. Tính tiền theo tháng hoặc theo giờ. Có chính sách hoàn tiền khi xóa tài nguyên.

- Cung cấp Dashboard và API giúp khách hàng có nhiều phương thức truy cập để quản lý hệ thống.

- Hệ thống vật lý với cấu hình phần cứng mạnh mẽ: Các máy chủ sử dụng CPU Intel E5 v4 và Intel Xeon Gold, RAM lên tới 512 GB , ổ cứng SSD, băng thông hỗ trợ lên tới 10Gbps.

Với những tính năng ưu việt và vượt trội, tích hợp Kubernetes Engine có thể mang lại những tác động tích cực đến các Dev team/DevOps cũng như toàn bộ doanh nghiệp. Nếu bạn đang muốn bắt đầu với Kubernetes, truy cập: https://bizflycloud.vn/kubernetes-engine để trải nghiệm miễn phí ngay hôm nay.

Tài liệu tham khảo:

  https://medium.com/containermind/a-beginners-guide-to-kubernetes-7e8ca56420b6

  https://thinkit.co.jp/article/13289  

  https://thenewstack.io/kubernetes-an-overview/  

Theo BizFly Cloud tìm hiểu

BizFly Kubernetes Engine là giải pháp triển khai Kubernetes hoàn toàn tự động, xây dựng hạ tầng container cho ứng dụng chỉ với vài click chuột. Người dùng chỉ việc sử dụng cho các mục tiêu phát triển của mình mà không cần bận tâm tới việc vận hành, mở rộng hạ tầng hệ thống. BizFly Kubernetes Engine thuộc hệ giải pháp BizFly Cloud hiện đang vận hành cho nhiều hệ thống lớn: VTV, Vingroup, Thu Cúc, Sapo, Sohagame, SSI…

Đăng ký dùng thử miễn phí tại đây!

TAGS: kubernetes
SHARE
Hỗ trợ kỹ thuật
Kinh doanh, CSKH