Kubernetes hay còn gọi là K8s là gì? Chức năng là cách hoạt động của k8s có gì đặc biệt? Bài này hôm nay sẽ mang đến cho bạn đọc các thông tin giá trị về Kubernetes bằng việc giải đáp các thắc mắc trên. Chúng ta hãy cùng tìm hiểu về Kubernetes qua bài viết này nhé.
1. Kubernetes (K8s) là gì?
Trích theo lời dẫn của trang chủ kubernetes.io, k8s được mô tả như sau:
Kubernetes là một nền tảng nguồn mở, khả chuyển, có thể mở rộng để quản lý các ứng dụng được đóng gói và các service, giúp thuận lợi trong việc cấu hình và tự động hóa việc triển khai ứng dụng. Kubernetes là một hệ sinh thái lớn và phát triển nhanh chóng. Các dịch vụ, sự hỗ trợ và công cụ có sẵn rộng rãi.
Tên gọi Kubernetes có nguồn gốc từ tiếng Hy Lạp, có ý nghĩa là người lái tàu hoặc hoa tiêu. Google mở mã nguồn Kubernetes từ năm 2014. Kubernetes xây dựng dựa trên một thập kỷ rưỡi kinh nghiệm mà Google có được với việc vận hành một khối lượng lớn workload trong thực tế, kết hợp với các ý tưởng và thực tiễn tốt nhất từ cộng đồng.
>>> Xem thêm: Monitoring trên K8s cluster với Prometheus và Grafana
2. Chức năng chính của Kubernetes
Service discovery và cân bằng tải: Kubernetes có thể expose một container sử dụng DNS hoặc địa chỉ IP của riêng nó. Nếu lượng traffic truy cập đến một container cao, Kubernetes có thể cân bằng tải và phân phối lưu lượng mạng (network traffic) để việc triển khai được ổn định.
Điều phối bộ nhớ: Kubernetes cho phép bạn tự động mount một hệ thống lưu trữ mà bạn chọn, như local storages, public cloud providers, v.v.
Tự động rollouts và rollbacks: Bạn có thể mô tả trạng thái mong muốn cho các container được triển khai dùng Kubernetes và nó có thể thay đổi trạng thái thực tế sang trạng thái mong muốn với tần suất được kiểm soát. Ví dụ, bạn có thể tự động hoá Kubernetes để tạo mới các container cho việc triển khai của bạn, xoá các container hiện có và áp dụng tất cả các resource của chúng vào container mới.
Đóng gói tự động: Bạn cung cấp cho Kubernetes một cluster gồm các node mà nó có thể sử dụng để chạy các tác vụ được đóng gói (containerized task). Bạn cho Kubernetes biết mỗi container cần bao nhiêu CPU và bộ nhớ (RAM). Kubernetes có thể điều phối các container đến các node để tận dụng tốt nhất các resource của bạn.
Tự phục hồi: Kubernetes khởi động lại các containers bị lỗi, thay thế các container, xoá các container không phản hồi lại cấu hình health check do người dùng xác định và không cho các client biết đến chúng cho đến khi chúng sẵn sàng hoạt động.
Quản lý cấu hình và bảo mật: Kubernetes cho phép bạn lưu trữ và quản lý các thông tin nhạy cảm như: password, OAuth token và SSH key. Bạn có thể triển khai và cập nhật lại secret và cấu hình ứng dụng mà không cần build lại các container image và không để lộ secret trong cấu hình stack của bạn.
3. Một vài khái niệm cơ bản liên quan đến Kubernetes
K8s sử dụng rất nhiều khái niệm chuyên ngành. Vì vậy để hiểu rõ Kubernetes là gì vì việc nắm rõ các khái niệm cơ bản là điều căn bản. Vậy chúng ta sẽ đặt câu hỏi các khái niệm cơ bản nào thường được sử dụng và cần phải nắm thì đây là câu trả lời cho bạn.
3.1. Master Node
Master Node trong Kubernetes là gì? Master Node trong Kubernetes được hiểu là server điều khiển các máy Worker chạy ứng dụng. Theo như thông tin cập nhật được thì Master Node trong K8S được phân chia thành 4 phần chính như sau:
Kubernetes API Server: Đây là một trong những thành phần chính vô cùng quan trọng của Master Node. Thành phần này có nhiệm vụ giúp các thành phần khác liên lạc, nói chuyện với nhau. Các lập trình viên khi triển khai các ứng dụng sẽ gọi API Kubernetes API Server này. Vậy nên Kubernetes API Server mới được đánh giá là thành phần quan trọng của Master Node.
Scheduler: Đây là thành phần lập lịch. Có nghĩa là thành phần này sẽ tiến hành lập lịch trình triển khai cho các ứng dụng. Các ứng dụng được đặt vào Worker nào để chạy,…thì thành phần Scheduler phải lên lịch cụ thể.
Controller Manager: Thành phần này trong Master Node có nhiệm vụ quản lý các Worker. Đồng thời thành phần này cũng sẽ là thành phần chính thực hiện việc kiểm tra các Worker sống hay chết và đảm nhận luôn việc nhân bản ứng dụng.
Etcd: Đây là thành phần cuối cùng cấu thành Master Node. Thành phần này là cơ sở dữ liệu của Kubernetes. Tất cả các thông tin của Kubernetes đều sẽ được lưu trữ cố định vào Etcd.
3.2. Worker node
Ta đã biết master node trong K8s là một server điều khiển các máy Worker ứng dụng, và ngược lại điều này có nghĩa là worker node chính là các server chạy ứng dụng trên đó. Dưới đây là 3 thành phần quan trọng của một Worker node:
Container Runtime: Đây là một trong những thành phần có vai trò giúp chạy các ứng dụng trong Kubernetes chạy dưới dạng Container. Thông thường người ta sẽ sử dụng Docker.
Kubelet: Thành phần Kubelet là thành phần giao tiếp với Kubernetes API Server. Đồng thời Kubelet cũng là thành phần chính chịu trách nhiệm quản lý các Container trong Kubernetes.
Kubernetes Service Proxy: Thành phần này có nhiệm vụ chính là đảm nhiệm công việc phân tải giữa các ứng dụng.
3.3. Kubectl
Kubectl là một trong những công cụ cấu hình dòng lệnh cho Kubernetes. Tool quản trị K8S, được cài đặt trên các máy trạm. Kubectl cho phép các lập trình viên đẩy các ứng dụng mô tả triển khai vào cụm Kubernetes. Đồng thời Kubectl cũng cho phép các quản trị viên có thể quản trị được các cụm Kubernetes.
3.4. Pod
Pod là thành phần quan trọng nhất trong một hệ thống Kubernetes. Bản thân 1 pod có thể chứa 1 hoặc nhiều container khác nhau, pod có thể được coi là nơi các ứng dụng thực sự được chạy. Không chỉ vậy, bản thân pod cũng là các tiến trình chạy trên Worker node. Bản thân Pod đã có tài nguyên riêng như một máy ảo.
3.5. Image
Khái niệm Image trong Kubernetes là gì? Image trong Kubernetes là phần mềm chạy ứng dụng đã được gọi lại thành một chương trình để có thể chạy duwois dạng Container. Các Pod trong Kubernetes sẽ tiến hành sử dụng các Image để chạy.
Thông thường các Image trong Kubernetes sẽ được quản lý ở một nơi lưu trữ tập trung. Ví dụ như bạn có Docker Hub là nơi chứa Image của nhiều ứng dụng phổ biến như: nginx, mysql, haproxy, ...
3.6. Deployment
Deployment là khái niệm về cách thức giúp triển khai, cập nhật, quản trị các Pod trong Kubernetes. Với sự hiện diện của Deployment sẽ giúp người dùng triển khai, cập nhật và quản trịnh những Pod thông dụng trở nên dễ dàng, thuận tiện hơn.
3.7. Replication Controller
Replication Controller trong K8S có nhiệm vụ điều khiến việc nên có bao nhiêu bản sao giống nhau của một Pod khi chạy ở đâu đó trên Cluster. Nói một cách dễ hiểu hơn thì Replication Controller là thành phần quản trị bản sao của Pod. Thành phần này sẽ giúp nhân bản hay giảm số lượng Pod trong quá trình hoạt động.
3.8. Service
Service là phần mạng của Kubernetes. Service trong Kubernetes giúp cho các Pod gọi nhau ổn định hơn. Hoặc giúp quá trình Load Balancing giữa nhiều bản sao của Pod. Các Kubernetes Service Proxies sẽ 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ế thì quá trình vẫn không bị gián đoạn. Từ đó giúp người dùng có thể dễ dàng sử dụng được ứng dụng.
3.9. Label
Label có nhiệm vụ chính là để phân loại và quản lý các pod.
Xem thêm bài viết:
- Hướng dẫn cài đặt Web server Apache trên CentOS 7
- Cài đặt cấu hình cân bằng tải với HaProxy và Docker
- Tìm hiểu về ràng buộc (Constraint) trong SQL
4. Khi nào nên sử dụng Kubernetes
K8s là một nền tảng mã nguồn mở do đó việc tiếp cận nó là rất dễ dàng, tuy nhiên sử dụng làm sao để có thể tối ưu được nhu cầu sử dụng của chúng ta cũng là một vấn đề đáng lưu tâm. Việc sử dụng Kubernetes đúng lúc đúng chỗ sẽ mang lại cho chúng ta nhièu lợi ích tuyệt vời. Với những kiến thức mà chúng tôi muốn mang đến cho các bạn, dưới đây là các trường hợp chính xác nhất cần sử dụng dụng K8s mới khả dụng:
Trường hợp đầu tiên cần sử dụng Kubernetes chính là khi các doanh nghiệp lớn có nhu cầu thực sự cần phải Scaling hệ thống nhanh chóng. Trong khi đó quá trình thực hiện đã sử dụng Container (Docker). Trường hợp này nếu không sử dụng chính Kubernetes sẽ không thể nào đạt được kết quả như mong muốn.
Trường hợp tiếp theo cần sử dụng Kubernetes là khi các dự án cần chạy lượng máy lớn. Các dự án chỉ cần chạy >= 5 Container cùng 1 loại cho 1 dịch vụ thì bắt buộc phải cần sự hỗ trợ của một nền tảng mã nguồn mở hiện đại như Kubernetes.
Kubernetes còn thực sự cần thiết sử dụng khi các Startup tân tiến, chịu đầu tư vào công nghệ để dễ dàng auto Scale về sau.
5. Ưu điểm nổi bật của K8s
Trên thực tế, K8s là một nền tảng mã nguồn mở mang trong mình nhiều ưu điểm vượt trội hơn các nền tảng khác. Điều này được thể hiện rõ ràng trong xu thế chuyển dịch các phần mềm hiện nay khi K8s ngày càng được sử dụng rộng rãi và thay thế cho các nền tảng cũ như Docker Swarm. Vì vậy đề cập về ưu điểm của Kubernetes thì chúng ta không thể bỏ qua các ưu điểm nổi bật sau đây:
5.1. Cung cấp nền tảng để lên lịch và chạy các Containers
Một trong những ưu điểm chính của việc sử dụng K8S chính là mang đến 1 nền tảng vững chắc để lên lịch và chạy các Containers. Đặc biệt Kubernetes cực kỳ cần thiết nếu bạn đang tối ưu App Dev cho Clous. Bởi vì nên tảng này sẽ cho phép người dù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.
Công nghệ Kubernetes sẽ giúp người dùng dễ dàng 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. Việc Kubernetes có khả năng tự động hóa các hoạt động vận hành sẽ giúp người dùng có thể thực hiện nhiều tác vụ đối với Container. Ưu điểm này không chỉ hỗ trợ người dùng hoạt động hữu ích đối với Container mà còn có thể làm việc trên nhiều nền tảng ứng dụng khác hoắc các hệ quản lý khác. Vì vậy với Kubernetes bạn hoàn toàn có thể thực hiện các nhiệm vụ sau:
Điều hành, phân bố Container trên nhiều máy chủ
Tận dụng phần cứ 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 ứng dụng
Cập nhật ứng dụng
Gắn, bổ sung thêm bộ nhớ để chạy mượt các ứng dụng Stateful
Mở rộng các ứng dụng chứa trong các Container
Mở rộng tài nguyên của Container một cách nhanh chóng
Health – Check và Self – Heal các ứng dụng bằng tính năng tự động phát hiện, sửa lỗi, dò tìm và mở rộng
5.2. Cung cấp không gian lưu trữ quy mô lớn
Kubernetes được đánh giá cao ưu thế này vì Kubernetes được thiết kế xây dựng mang đến nhiều không gian lưu trữ khác nhau. Người dùng khi sử dụng sẽ có nhiều tùy chọn lưu trữ để lựa chọn. Chẳng hạn như các tùy chọn lưu trữ SAN cục bộ hay lưu trữ vào không gian đám mây công cộng,…
5.3. Không bao giờ cạn
Kubernetes cho dù thử nghiệm tại địa phương hay điều hành tại một doanh nghiệp toàn cầu thì tính linh hoạt của hệ thống sẽ phát triển tùy theo yêu cầu của người dùng. Kubernetes cung cấp nguồn tài nguyên vô tận để các ứng dụng của bạn có thể hoạt động một cách nhất quán và dễ dàng cho du nhu cầu của bạn có phức tạp đến đâu.
5.4. Vận hành mọi nơi
Kubernetes – Hệ thống mã nguồn mở sở hữu ưu điểm là cho phép người dùng tự do tận dụng cơ sở hạ tầng tại chỗ, lai. Ngoài ra, người dùng cũng có thể lựa chọn cơ sở hạ tầng điện toán đám mây để di chuyển khối lượng lớn công việc của mình đến những nơi quan trọng mà bạn mong muốn.
Kết
Như vậy, trong bài viết này chúng ta đã cùng nhau tìm hiểu về K8s. Với những thông tin chia sẻ trên chắc chắc các bạn đều đã tìm thấy được cho mình thông tin giải đáp chính xác cho những thắc mắc gặp phải. Nếu trong quá trình tìm hiểu bài viết, các bạn còn chưa hiểu nội dung nào hay muốn tìm hiểu thêm kiến thức về K8s thì có thể tham dự buổi webinar sắp tới vào cuối tháng 8 cùng Stringee để học hỏi và trao đổi thêm về Kubernetes nhé.
Stringee Communication APIs là giải pháp cung cấp các tính năng giao tiếp như gọi thoại, gọi video, tin nhắn chat, SMS hay tổng đài CSKH cho phép tích hợp trực tiếp vào ứng dụng/website của doanh nghiệp nhanh chóng. Nhờ đó giúp tiết kiệm đến 80% thời gian và chi phí cho doanh nghiệp bởi thông thường nếu tự phát triển các tính năng này có thể mất từ 1 - 3 năm.
Bộ API giao tiếp của Stringee hiện đang được tin dùng bởi các doanh nghiệp ở mọi quy mô, lĩnh vực ngành nghề như TPBank, VOVBacsi24, VNDirect, Shinhan Finance, Ahamove, Logivan, Homedy, Adavigo, bTaskee…
Quý bạn đọc quan tâm xin mời đăng ký NHẬN TƯ VẤN TẠI ĐÂY: