Nội dung bài viết
1. Các tiến trình của Kubernetes
Có một tập hợp những tiền trình core của Kubernetes tạo dựng nên cụm cluster. Cluster được chia ra thành những thành phần Master ( hay còn gọi là Control Plane ) và những thành phần Node ( gọi là Worker Node hoặc Minion trước kia ) .
Sơ đồ của cụm Kubernetes cluster có thể được nhìn thấy ở hình mình họa bên dưới. Lưu ý rằng tên cũ của Kubernetes Minions được sử dụng trong sơ đồ, bây giờ chúng được gọi là Kubernetes Node.
Bạn đang đọc: Kiến trúc Kubernetes
Lưu ý: Kể từ Kubernetes 1.14 thì đã có tính năng cho phép thêm nhiều Master vào Cluster ở giai đoạn alpha, góp phần làm Master (Control Plane) có độ sẵn sàng cao hơn khi khởi tạo Kubernetes Cluster sử dụng công cụ kubeadm.
1.1. Các thành phần của Master
1.1.1. kube-apiserver
kube-apiserver đóng vai trò như một API Server, cung ứng truy vấn đến Kubernetes API. Nơi mà những Kubernetes Resource được publish vào .
1.1.2. kube-controller-manager
kube-controller-manager là tiến trình chạy những controller để giải quyết và xử lý những background task của Cluster, giúp chỉnh sửa cluster vào đúng với trạng thái đã khai báo ( declare ) ở Resource .
1.1.3. kube-scheduler
kube-scheduler đảm trách nhiệm vụ cấp phép những Pod ở những Node dựa trên những tiêu chuẩn nhất định, những tiêu chuẩn hoàn toàn có thể là độ sẵn sàng chuẩn bị của tài nguyên, tài nguyên nhu yếu như thế nào, những chủ trương về workload …. vv .
1.1.4. cloud-controller-manager
cloud-controller-manager chạy những controller để tiếp xúc với những nhà sản xuất dịch vụ cloud nhất định. Ví dụ như Google Cloud, Azure, AWS hoặc Digital Ocean .
1.1.5. etcd
etcd là kho tàng trữ key-value phân tán. etcd trong một Kubernetes Cluster khá quan trọng, nó được ví như trái tim của Kubernetes Cluster, hàng loạt tài liệu Cluster đều lưu trên đây ( nó giống như là database của Kubernetes Master vậy đó 😊 ). Vì thế để bảo đảm an toàn, phải luôn có một kế hoạch sao lưu cho etcd khi vận hạnh một Kubernetes Cluster 😎 .
1.2. Các thành phần của Node
1.2.1. kubelet
kubelet chạy trên mỗi node và có trách nhiệm quản trị những Pod trên node đó, gồm có việc liên kết với container runtime ( ví dụ như Docker ) để tạo và quản trị những container ở trong Pod, nó tiếp xúc với Master qua API .
1.2.2. kube-proxy
kube-proxy giúp định tuyến ( route ) những liên kết đến Pod đúng chuẩn, nó cũng triển khai việc cân đối tải ( load balancing ) trên những Pod .
2. Các khái niệm trong Kubernetes
2.1. Label và Selector trong Kubernetes
Label (nhãn) là một trong những khái niệm Kubernetes cơ bản. Label là một cặp key-value gắn vào một Kubernetes Resource. Và mỗi Kubernetes Resource có thể có một hoặc nhiều label. Label phục vụ như một phương tiện để xác định một cụ thể một Resource hoặc tập hợp các Resource.
Label Selector cũng là các cặp key-value. Chúng dùng để chọn một label nhất định hoặc một tập hợp các label. Theo cơ chế này, một loại Resource có thể chọn (select) một hoặc nhiều các Resources thuộc loại khác. Label còn được dùng với kubectl
để truy vấn các loại Resource nhất định.
Sơ đồ sau miêu tả chính sách lựa chọn này với Service chọn một nhóm Pod qua selector .
2.1. Các loại Kubernetes Resource
Resource là trừu tượng ( abstraction ) ở mức cao chứa trạng thái khai báo ( declarative ) cho một thành phần hạ tầng ( infrastructure ). Resource trong Kubernetes được publish vào kube-apiserver và nó là nghĩa vụ và trách nhiệm của những Kubernetes Controller để đưa Cluster vào đúng với những trạng thái đã khai báo .Có rất nhiều loại Resource khác nhau trong Kubernetes, list rất đầy đủ những Resource hoàn toàn có thể xem ở tài liệu API của Kubernetes. Các phần dưới đây chỉ ra mắt những loại Resource quan trọng .
Lưu ý: Các phần phía dưới chỉ là giới thiệu sơ lược, chi tiết hơn mỗi loại Resource sẽ được giời thiệu ở loạt bài sau.
2.1.1. Resource nhóm Workloads trong Kubernetes
2.1.1.1. Pod
Pod là một đơn vị chức năng thực thi cơ bản và nhỏ nhất trong Kubernetes. Pod hoàn toàn có thể có một hoặc nhiều container. Hình ảnh sau minh họa 3 loại container mà một Pod hoàn toàn có thể có :
Loại container | Mô tả |
---|---|
Application | Đây là core container của một ứng dụng, một Pod phải có loại container này, các mô hình Pod phổ biến thường chỉ có application container. |
Sidecar | Pod có thể có container loại Sidecar làm một số công việc hữu ích để hỗ trợ cho application container. Container loại này thường đảm trách các vai trò như thu thập log hay làm reverse proxy. Một Pod có thể có rất nhiều Sidecar container. |
Init | Đôi khi cần phải thực hiện một số khởi tạo trước khi khởi chạy application container, ví dụ như khởi tạo database ban đầu. Một Pod có thể có rất nhiều Init container, chúng được chạy từng cái một theo thứ tự. |
Giống như những loại Resource khác, Pod cũng hoàn toàn có thể có Label và những Label này được sử dụng bởi những Resource khác được cho phép quản trị những Pod .
2.1.1.2. Deployment và ReplicaSet
Deployment trong Kubernetes được cho phép quản trị vòng đời của những Pod và một Resource tương quan gọi là ReplicaSet. Deployment chứa đặc tả ( specification ) cho một Pod và những thông tin thêm, như số lượng Pod để chạy. Nếu cần chạy một ứng dụng stateless mà nó sẽ chạy liên tục, ví dụ như HTTP Server, thì chắc như đinh cần Deployment. Deployment trong Kubernetes được cho phép update một ứng dụng đang chạy mà không có downtime. Deployment cũng chỉ định một kế hoạch ( strategy ) để khởi động lại Pod khi chúng die hoặc crash .ReplicaSet được tạo khi Deployment được tạo hoặc được chỉnh sửa và thật sự là ReplicaSet được dùng như định nghĩa để tạo Pod. Sơ đồ sau diễn đạt mối quan hệ giữa Deployment, ReplicaSet và Pod trong Kubernetes :
2.1.1.3. DaemonSet
Một DaemonSet trong Kubernetes bảo vệ một Pod chạy trên toàn bộ hoặc tập hợp nhỏ những Kubernetes Node đã chuẩn bị sẵn sàng. Ngay khi Node mới được thêm vào Kubernetes Cluster, thì Pod sẽ được thêm ngay vào. Ngay khi Node được xóa khỏi Kubernetes Cluster, thì Pod tương quan cũng được garbage collector thu gom. Xóa một DaemonSet sẽ đồng nghĩa tương quan với việc xóa toàn bộ những Pod mà nó đã tạo ra .
💡 Ví dụ về những trường hợp sử dụng DaemonSet trong Kubernetes :
- Chạy cluster storage daemon như glusterd hoặc ceph trên mỗi node.
- Chạy log collector daemon trên mỗi node như fluentd hoặc logstash.
- Chạy monitoring daemon trên mỗi node như Prometheus Node Exporter hoặc Datadog agent.
2.1.1.4. StatefulSet
Trong Kubernetes, một StatefulSet quản trị tập hợp những Pod về tiến hành ( deployment ) và lan rộng ra ( scaling ), StatefulSet cung ứng bảo vệ về thứ tự ( ordering ) và sự duy nhất ( uniqueness ) của những Pod mà nó quản trị. Về thứ tự, nó bảo vệ thứ tự những Pod tạo ra và xóa đi. Về sự duy nhất, nó bảo vệ duy nhất về tên của Pod và storage volume riêng kèm theo Pod .
Trường hợp sử dụng StatefulSet trong thực tế thường thấy ở các database cluster phân tán dựa vào các thành viên (member) của cluster có tên riêng và dự liệu kèm theo phải được tạo ra riêng lúc boostrap của thành viên cluster. ElasticSearch là một ví dụ điển hình.
2.1.1.5. Job
Trong Kubernetes, Job tạo nên một hoặc nhiều Pod bảo vệ rằng tối thiểu một lượng nhất định trong số chúng chạy đến khi triển khai xong. Không giống với ReplicaSet, ngay khi tiến trình trong container hoàn tất thành công xuất sắc, container sẽ không được khởi động lại. Sử dụng Job trong Kubernetes khi muốn chạy tiến trình một lần .
Một trường hợp sử dụng Job trong Kubernetes là một tải tài liệu hàng loạt .
2.1.1.5. CronJob
Trong Kubernetes, CronJob chỉ đơn thuần là chạy Job theo lịch định sẵn, định dạng lịch định sẵn theo định dạng của Cron trên Linux .
Lưu ý: Thời gian hẹn lịch được tính theo thời gian Master nơi mà Job được khởi đầu.
Một trường hợp sử dụng CronJob trong Kubernetes là sao lưu dữ liệu theo lịch .
2.1.2. Resource nhóm Discovery và Load Balancing trong Kubernetes
2.1.2.1. Service (svc)
Trong Kubernetes, Service được dùng để nhóm lại một hoặc nhiều Pod bằng Label Selector. Service phân phối ClusterIP và DNS Name cho những Pod .
Tiến trình Kube Proxy sử dụng thông tin có trong Service để thông số kỹ thuật những rule iptables thích hợp trên mỗi Node để những traffic client cần truy vấn Service được định tuyến vào đúng Pod tương thích .
2.1.2.2. Ingress
Trong Kubernetes, Ingress được dùng để thông số kỹ thuật Ingress Controller vì vậy Service hoàn toàn có thể được truy vấn được từ phía bên ngoài Cluster, thường thì truy vấn qua giao thức HTTP. Ingress còn phân phối Load Balancing, SSL termination và virtual hosting theo dạng name-based .
Ingress Controller là một reverse proxy mà theo dõi Ingress Resource liên tục trải qua Kubernetes API Server và tự thông số kỹ thuật rule thích hợp cho mỗi Ingress .
2.1.3. Resource nhóm Config, Storage và Cluster trong Kubernetes
2.1.3.1. ConfigMap
Trong Kubernetes, ConfigMap được cho phép lưu file config độc lập và không nhờ vào với container image. Các file lưu với ConfigMap hoàn toàn có thể được mount vào container trong Pod lúc chạy .
2.1.3.2. Secret
Trong Kubernetes, Secret được cho phép lưu những thông tin nhạy cảm như password, token, key. Gần giống với ConfigMap, tuy nhiên Secret hoàn toàn có thể truy vấn như một biến môi trường tự nhiên .
2.1.3.3. Volume, PersistentVolume và PersistentVolumeClaim
Trong Kubernetes, Volume là một thư mục hoàn toàn có thể chứa tài liệu. Volume là một thành phần của Pod và không độc lập với nó. Một Volume được tạo trong đặc tả của Pod. Một Volume không hề tự xóa. Một Volume được truy vấn bởi tổng thể những container trong Pod. Mỗi container mà muốn truy vấn vào Volume phải mount riêng không liên quan gì đến nhau .Một Kubernetes Volume sống sót lâu hơn bất kể container nào, nhưng khi Pod kèm theo mất, Volume cũng mất theo. Tuy nhiên, những file của một số ít loại Volume vẫn liên tục sống sót trong local hoặc cloud storage, ngay cả sau khi Volume không còn .Kubernetes Volume có nhiều công dụng hơn Docker Volume. Volume hoàn toàn có thể cung ứng quyền truy vấn vào bộ tàng trữ đĩa local hoặc cloud storage. Một Pod hoàn toàn có thể sử dụng phối hợp chúng cùng một lúc. Volume trong Kubernetes gồm có thư mục trống, filesystem của Node hoặc storage đặc trưng của nhà sản xuất dịch vụ cloud ví dụ như awsEleasticBlockStore hay gcePersistentDisk dùng vào mục tiêu long-term storage, hoàn toàn có thể tìm hiểu thêm thêm tại đây .Để giúp trừu tượng đi những cụ thể hạ tầng, những nhà tăng trưởng Kubernetes đã tạo ra PersistentVolume và PersistentVolumeClaim. Thật không may, tên là một chút ít rơi lệch, chính do những Volume thuần vẫn hoàn toàn có thể có persistent storage. PersisententVolume ( PV ) và PersisentVolumeClaims ( PVC ) thêm độ phức tạp so với chỉ sử dụng Volume thuần. Tuy nhiên, PV rất hữu dụng cho việc quản trị tài nguyên tàng trữ cho những dự án Bất Động Sản lớn .
Với PV, người dùng Kubernetes vẫn dủng Volume, nhưng thứ nhất cần có hai bước :
- Một PersistentVolume được cung ứng bởi Cluster Admin ( hoặc nó được phân phối một cách linh động ) .
- Một người dùng Cluster cá thể cần tàng trữ cho Pod tạo ra một manifest PersistentVolumeClaim. Nó chỉ định số lượng và loại tàng trữ họ cần. Kubernetes sau đó tìm và dự trữ dung tích thiết yếu .
Sau đó, người dùng tạo một Pod có Volume sử dụng PVC. PersistentVolume có vòng đời độc lập với bất kể Pod nào. Trên thực tiễn, Pod thậm chí còn không biết về PV, chỉ là PVC. PVC tiêu thụ tài nguyên PV, tựa như như cách Pod tiêu thụ tài nguyên Node .
2.1.3.4. NameSpace
Trong Kubernetes, NameSpace là nơi tất cả chúng ta đặt toàn bộ lại với nhau. Một NameSpace hoàn toàn có thể được coi là giống như một môi trường tự nhiên. Bộ sưu tập những Resource hoàn toàn có thể được tiến hành vào NameSpace để tạo thành một nhóm những thành phần tương quan .
Ví dụ về việc sử dụng NameSpace hoàn toàn có thể là để tạo thiên nhiên và môi trường DEV hoặc san sẻ một tập hợp những dịch vụ được sử dụng bởi những NameSpaces khác, ví dụ : Ingress Controller .
3. Lời kết
Chúng ta đã đề cập đến một lượng lớn về các thành phần, khái niệm trong Kubernetes và nó chỉ ở mức rất cơ bản 😊. Kubernetes đòi hỏi phải hiểu nhiều khái niệm trừu tượng, đừng lo lắng nếu nhưng bạn chưa nhớ và hiểu ở lần đầu tiên 😂.
Bạn đã có một Kubernetes Cluster để thực hành thực tế những loạt bài về Kubernetes tiếp theo của blogd.net chưa ? Nếu chưa thì hãy tìm hiểu thêm bài Cài đặt Kubernetes Cluster để biết cách tự tay thiết lập một Kubernetes Cluster cho riêng mình nhé .
Source: https://swing.com.vn
Category: Wiki