Kubernetes là gì? Thuật ngữ này không còn xa lạ với những developer có kinh nghiệm lâu năm, tuy nhiên với những coder còn mới thì đó là thuật ngữ khá mới. Nếu bạn muốn tìm hiểu kỹ hơn về Kubernetes thì hãy xem bài viết dưới đây nhé!
Kubernetes (K8s) là gì?
Theo wikipedia định nghĩa
Kubernetes is an open-source container orchestration system for automating software deployment, scaling, and management. Originally designed by Google, the project is now maintained by the Cloud Native Computing Foundation.
Dịch nôm na có nghĩa Kubernetes viết tắt K8s là một hệ thống điều phối container mã nguồn mở (open sources container orchestration tool) được phát triển bởi Google.
K8s là thuật ngữ được rút gọn từ Kubernetes. "K" là chữ cái đầu tiên, "s" là chữ cái cuối và số "8" là chỉ 8 chữ cái nằm giữa "K" và "s".
Lấy cảm hứng từ hệ thống cluster management của Google, Borg , Kubernetes giúp mọi việc liên quan đến deploy và quản lý ứng dụng của bạn diễn ra dễ dàng hơn.
Bạn có thể xem ví dụ đơn giản dưới đây để hiểu rõ hơn về Kubernetes.
Trong một dàn nhạc sẽ có một nhạc trưởng và rất nhiều nhạc công. Nhạc trưởng sẽ có nhiệm vụ chỉ huy dàn nhạc, giúp các nhạc công giữ lửa và truyền cảm xúc cho họ. Tất nhiên các bản nhạc thì được biên soạn, sáng tác bởi các nhà soạn nhạc.
Tương tự như trên, Kubernetes sẽ là nhạc trưởng, Container hoặc Services sẽ là những nhạc công. Để có thể hoạt động trơn tru cần có file config có đuôi yaml, yml và chúng đóng vai trò là nhà soạn nhạc.
Nên dùng Kubernetes khi nào?
Kubernetes (k8s) được sử dụng khi bạn cần quản lý và triển khai một hệ thống phức tạp với nhiều container hoặc microservices. K8s là một lựa chọn tốt cho các dự án có nhu cầu:
- Scalability: K8s cho phép bạn tăng hoặc giảm số lượng các container trong hệ thống một cách dễ dàng và linh hoạt.
- Availability: K8s cung cấp các tính năng như replication, self-healing, rollbacks tự động và horizontal scaling để đảm bảo rằng hệ thống luôn hoạt động mạnh mẽ và không bị gián đoạn.
- Continuous Deployment/Delivery: K8s cho phép bạn triển khai và cập nhật mã nguồn một cách nhanh chóng và dễ dàng.
- Portability: K8s giúp deloy và manage ứng dụng một cách nhất quán và đáng tin cậy. Nó hỗ trợ việc chuyển đổi giữa các cloud provider hoặc môi trường on-premise dễ dàng.
Tóm lại, nếu bạn đang xây dựng một hệ thống phức tạp với nhiều container hoặc microservices, sử dụng k8s có thể giúp bạn quản lý và triển khai hệ thống một cách dễ dàng hơn.
Một số hạn chế của Kubernetes
Kubernetes (k8s) là một công cụ quản lý container và triển khai microservices rất mạnh mẽ, nhưng cũng có một số hạn chế và nhược điểm sau:
- Complexity: K8s cung cấp rất nhiều tính năng và các tùy chọn cho việc triển khai và quản lý hệ thống nhưng chúng lại rất phức tạp để thiết lập và vận hành, đòi hỏi bạn phải có trình độ chuyên môn và nguồn lực cao để thiết lập và quản lý K8s.
- Resource Requirements: K8s yêu cầu rất nhiều tài nguyên máy chủ để hoạt động, đặc biệt là khi bạn quản lý nhiều nodes.
- Networking Challenges: K8s cung cấp rất nhiều tính năng cho việc quản lý mạng, nhưng việc cấu hình và sử dụng các tính năng này cũng có thể khiến việc triển khai trở nên phức tạp.
- Cost (chi phí): K8s có thể tăng chi phí cho máy chủ và tài nguyên mạng, đặc biệt khi bạn sử dụng nhiều nodes hoặc các dịch vụ cloud như Amazon EKS, GKE trên Google Cloud và AKS trên Azure.
- Security: K8s cung cấp rất nhiều tính năng bảo mật, nhưng việc cấu hình và sử dụng các tính năng này cũng có thể khiến việc bảo mật trở nên phức tạp.
Kubernetes Architecture
Một số khái niệm cần biết trong Kubernetes Architecture
K8s cluster
K8s cluster là một machine được gọi là nodes được sử dụng để chạy các ứng dụng containerized.
Có 2 thành phần cốt lõi trong K8s cluster là control plane và worker nodes.
Control plane
Control plane chịu trách nhiệm quản lý trạng thái của cluster. Trong môi trường sản xuất, control plane thường chạy trên nhiều nodes và trải rộng trên một số vùng trung tâm dữ liệu (data).
Control plane sẽ bao gồm một số thành phần cốt lõi như:
- API Server hỗ trợ update, scaling và lifecycle orchestration bằng cách cung cấp các loại ứng dụng khác nhau. API server là một trong những thành phần quan trọng nhất trong control plane vì nó cung cấp API RESTful dùng để quản lý và điều khiển các đối tượng trong K8s như pod, deployment và service.
- etcd là một hệ thống quản lý key-value distribued được sử dụng trong control plane. Nó là nơi lưu trữ trạng thái của cluster bao gồm cấu hình, trạng thái của các đối tượng K8s và tình trạng của các node trong cluster.
- Scheduler là một component trong control plane chịu trách nhiệm phân bổ (scheduling) các pod trên các node trong cluster. Scheduler dùng thông tin về trạng thái của cluster như tài nguyên, sức chứa và các ràng buộc từ các yêu cầu của pod để quyết định node nào sẽ chứa pod.
- Controller manager là một component trong control plane chịu trách nhiệm điều khiển (controller) các đối tượng k8s như Replication Controller, Deployments và StatefulSets. Controller manager sử dụng thông tin về trạng thái của các đối tượng k8s được lưu trữ trong etcd để theo dõi và điều chỉnh trạng thái của các đối tượng k8s để đạt đến mục tiêu của chúng.
- Pod là đơn vị triển khai nhỏ nhất mà bạn có thể tạo và quản lý trong Kubernetes, nó đại diện cho một hoặc nhiều container chạy trên một node cục bộ trong cluster. Pod là một đơn vị quản lý đồng nhất cho các container trong cluster giúp cho việc quản lý và triển khai các container trở nên dễ dàng hơn.
Worker nodes
Các thành phần cốt lõi của K8s chạy trên worker nodes bao gồm Kubelet, Container runtime và Kube proxy.
- Kubelet là một daemon chạy trên mỗi worker nodes, chúng có nhiệm vụ liên lạc giao tiếp với control plane. Chúng nhận hướng dẫn từ control plane về việc pod nào sẽ chạy trên node và đảm bảo trạng thái của các pod được duy trì.
- Container runtime là một phần của node và có nhiệm vụ chính là chạy các container được gửi tới bởi Kubelet. Các ví dụ của container runtime bao gồm Docker, CRI-O và containerd.
- Kube proxy chạy trên mỗi node trong cluster và có nhiệm vụ chính là thực hiện chuyển tiếp (forward) các yêu cầu mạng giữa các Pod và các Service trong cluster. Kube proxy hoạt động như một load balancer tự động cho các Service, chuyển tiếp các yêu cầu từ một địa chỉ IP cục bộ hoặc địa chỉ IP của Service đến một hoặc nhiều Pod phù hợp với yêu cầu.
Kubernetes và Docker
Kubernetes và Docker thường bị hiểu nhầm là đối thủ cạnh tranh trực tiếp nhưng điều đó không đúng vì Kubernetes và Docker là những công nghệ khác nhau chúng bổ sung cho nhau để chạy các ứng dụng container.
Bạn có thể tham khảo thêm bài viết này để hiểu rõ hơn về Docker.
- Kubernetes có thể sử dụng hoặc không sử dụng Docker
- Kubernetes sử dụng Docker để deploy, manage và scale các ứng dụng được chứa trong container
- Docker không phải là giải pháp thay thế Kubernetes mà đó là việc sử dụng Kubernetes với Docker để chạy ứng dụng với container trên scale
Lời kết
Hy vọng bài viết trên của 200Lab sẽ giúp bạn hiểu hơn về Kubernetes giúp bạn đưa ra được những quyết định đúng đắn khi sử dụng Kubernetes.
Nếu bạn có định hướng trở thành DevOps chuyên nghiệp thì bạn có thể tham khảo khoá học DevOps for Backend Developer tại đây.
Bài viết liên quan:
- Docker Compose là gì? Các lệnh cơ bản trong Docker Compose
- Docker: Deploy Nginx, Let's Encrypt web service có SSL đơn giản nhất
Pum
Life is short. Smile while you still have teeth :)
Bài viết liên quan
Grafana Loki là gì? So sánh Loki và Elasticsearch
Nov 16, 2024 • 6 min read
Webhook là gì? So sánh Webhook và API
Nov 15, 2024 • 8 min read
Two-Factor Authentication (2FA) là gì? Vì sao chỉ Mật khẩu thôi là chưa đủ?
Nov 13, 2024 • 7 min read
ELK là gì? So sánh hiệu suất giữa ELK và PLG
Nov 06, 2024 • 9 min read
Docker Best Practices: Tối ưu Dung lượng Docker Image
Oct 30, 2024 • 8 min read
SQL Injection là gì? Những cách phòng ngừa SQL Injection
Oct 25, 2024 • 10 min read