- vừa được xem lúc

Tìm hiểu về Kubernetes (k8s)

0 0 1

Người đăng: Bùi Huy Hoàng

Theo Viblo Asia

Mở đầu

Xin chào mọi người như tiêu đề bài viết thì hôm nay mình sẽ cùng tìm hiểu về Kubernetes (K8s) xem nó là gì, mục đích sử dụng nó, cùng tìm hiểu về kiến trúc và các thành phần của Kubernetes. Cùng bắt đầu luôn nhé 😄

Kubernetes (K8s) là gì ?

Kubernetes là một dự án Open Source đươc phát triển bởi Google. Kubernetes giúp quá trình phát triển, vận hành và Scale Application được tự động hoá, bỏ qua được các quá trình quản lý manual như trước đây gây mất nhiều thời gian trong việc quản lý và khó để có thể maintain

Mục đích sử dụng Kubernetes

  • Quản lý nhiều môi trường như Dev, Staging, Production trên K8s.
  • Kubernetes có thể Scale, ví dụ như mở rộng thêm nhiều môi trường khác để phục vụ những mục địch khác nhau.
  • Kubernetes cũng hỗ trợ các công cụ để hỗ trợ trong việc Monitoring. Ví dụ như kiểm tra Resource như RAM, CPU, Network.
  • Kubernetes hỗ trợ nhiều kiểu Deployment Application. Phục vụ cho nhiều trường hợp khác nhau.
  • Rolling Update (Giúp ứng dụng có thể an toàn hơn trong quá trình Deploy, mình thấy nó rất hiệu quả trong quá trình deploy tính năng mới và có vấn đề gì sảy ra thì chúng ta có thể quay lại phiên bản trước đó để đảm bảo cho dịch vụ của chúng ta hoạt động ổn định chứ không phải chờ đội dev vào git revert code 😂 ).
  • Service Discovery: giúp cho mọi người setup các service call với nhau thông qua name mà không cần quan tâm pod đó đang chạy ở IP nào
  • Network (Load Balancer, ClusterIP,...): giúp các pod trong cùng service có thể giao tiếp với nhau dễ dàng, hoặc các pod khác service có thể gọi vào hay public network ra bên ngoài

Kiến trúc và các thành phần của Kubernetes

Các thành phần trong Kubernetes:

Node: là một máy tính vật lý hoặc máy ảo được sử dụng để chạy các container.

Cluster: Cluster là một cụm các Node để quản lý Container Application như Tạo, Xoá, Run. Trong một Cluster sẽ có 2 thành phần chính là Master, Worker, 2 thành phần này cơ bản cũng chính là Node, nhưng được phân chia để xử lý các công việc khác nhau. Một Cluster có thể bao gồm nhiều Master Node và Worker Node

Master Node: master node sẽ có trách nhiệm quản lý và điều khiển các Worker Node. Trong Master Node phải có ít nhất một Worker Node và trong Master Node sẽ gồm 4 thành phần, 4 thành phần này trong K8s thường được gọi là được gọi là Control Plane

Worker Node: Worker Node là nơi để Tạo và Run Container Application. Mỗi Worker Node sẽ có một hoặc nhiều Pod. Và mỗi Worker Node sẽ có 3 thành phần chính Container Runtime, Kubelet, Kube-proxy

Đây là 1 kubernetes cluster, bên trái là Control Plane nằm trong Kubernetes Master gồm các thành phần

  • Api server
  • Scheduler
  • Controller - Manager
  • etcd

Api server: API Server được xem như một Entry Point của hệ thống Kubernetes, mọi yêu cầu từ User sẽ đi qua thành phần này. Yêu cầu ở đây có thể là Tạo Pod, Xoá Pod, Tạo Service hay Xoá Service

Scheduler: Scheduler là thành phần quan trọng trong K8s dùng để ra quyết định Pod sẽ được tạo ở Node nào, Scheduler sẽ dựa vào các điều kiện ví dụ như Resource của các Node, để xem Node nào đang sử dụng ít Resource thì sẽ tạo Pod ở Node đó, tránh việc tạo quá nhiều Pod vào một Node, gây mất cân bằng trong hệ thống.

Controller Manager: Controller Manager sẽ có nhiệm vụ là quản lý State của Cluster, phát hiện Pod xảy ra vấn và ra quyết định kịp thời để xử lý Pod đó. Ví dụ nếu một Pod xảy ra lỗi và bị Stop, thì Controller Manager sẽ kiểm tra số lượng Pod mong muốn mà Developer đã define trước đó, để ra quyết định tạo Pod mới thay thế cho Pod đã bị Stop trước đó.

Etcd: Etcd là một nơi lưu trữ State (trạng thái) của Cluster, có thể xem như là bộ não của Cluster. Kiểu dữ liệu của Etcd sẽ được lưu theo Key/Value.

Bên phải là Worker Nodes gồm các thành phần chính:

  • Container Runtime: Container Runtime là một phần mềm chịu trách nhiệm cho việc Run Application. Ở K8s có hỗ trợ nhiều loại Container Runtime như: Docker, containerd và CRI-O.

    • CRI-O: Là một phiên bản nhẹ hơn được tạo bởi K8s và được sử dụng để hỗ trợ cho K8s thay thế cho việc sử dụng Docker là môi trường Runtime
  • Kubelet: Kubelet là một Process hoạt động ở trong Node, nó sẽ có nhiệm vụ tương tác với Node và Pod. Tương tác ở đây có nghĩa là nó có thể tạo được Pod.

  • Kube-proxy: Kube-proxy dùng để quản lý và thiết lập Rule Network. Nó sẽ quyết định Network ra vào của một Node hoặc những Pod giao tiếp với nhau cũng sẽ thông qua thành phần này.

Kết Luận

Như vậy là mình đã giới thệu những thành phần cơ bản của K8s trong bài viết tiếp theo chúng mình sẽ cùng cài đặt môi trường Kubernetes ở dưới local, và làm quen với kubectl. Hy vọng series về k8s này sẽ giúp mình và mọi người nắm vững Kubernetes và áp dụng hiệu quả vào công việc. Nếu có câu hỏi hay góp ý nào hãy comment xuống bên dưới nhé, còn nếu thấy bài viết hữu ích hãy cho mình một upvote nhé, cuối cùng xin cảm ơn các bạn

Bình luận

Bài viết tương tự

- vừa được xem lúc

Phần 1: Giới thiệu về Kubernetes

Kubernetes là gì. Trang chủ: https://kubernetes.io/. Ai cần Kubernetes.

0 0 102

- vừa được xem lúc

Thực hành K8S trên Google Cloud

Kubernetes (K8S) trở nên quá phổ biến ở thời điểm hiện tại, ai cũng nói về nó. Trong bài hôm nay mình sẽ không đi quá nhiều vào các định nghĩa, mà đi thẳng vào thực tế để mọi người dễ hình dung.

0 0 41

- vừa được xem lúc

Kubernetes best practices - Liveness và Readiness Health checks

Mở đầu. Kubernetes cung cấp cho bạn một framework để chạy các hệ phân tán một cách mạnh mẽ.

0 0 53

- vừa được xem lúc

Kubernetes - deployment.yaml explained

Trong bài trước, mình có giới thiệu chạy các câu lệnh K8S bằng Command Line. Để tạo 1 deloyment đơn giản chỉ cần chạy lệnh.

0 0 92

- vừa được xem lúc

Tìm hiểu cơ bản về Kubernetes - K8s (Part 2): Minikube

Lời mở đầu. .

0 0 49

- vừa được xem lúc

ETCD - Bộ não của Kubernetes và cách cài đặt cụm ETCD Cluster (High Availability)

Hello anh em, sau vài ngày nghiên cứu đọc lại liệu cũng như cài cắm thủ công đủ thể loại, với vô số lỗi fail thì mình cũng cài đặt thành công cụm etcd cluster một cách thủ công. Trước giờ chuyên tạo c

0 0 47