Giới thiệu về Kubernetes
Kubernetes là một hệ thống open-souce mạnh mẽ, được phát triển ban đầu bởi Google, để quản lý các ứng dụng được chứa trong một môi trường group . Nó nhằm mục đích cung cấp các cách tốt hơn để quản lý các thành phần và dịch vụ liên quan, phân tán trên các cơ sở hạ tầng khác nhau.Trong hướng dẫn này, ta sẽ thảo luận về một số khái niệm cơ bản của Kubernetes. Ta sẽ nói về kiến trúc của hệ thống, các vấn đề mà nó giải quyết và mô hình mà nó sử dụng để xử lý các triển khai và mở rộng quy mô trong containers .
Kubernetes là gì?
Kubernetes , ở cấp độ cơ bản, là một hệ thống để chạy và điều phối các ứng dụng chứa trong một cụm máy. Đây là một nền tảng được thiết kế để quản lý hoàn toàn vòng đời của các ứng dụng và dịch vụ được đóng gói bằng cách sử dụng các phương pháp cung cấp khả năng dự đoán, khả năng mở rộng và tính sẵn sàng cao.
Là user Kubernetes, bạn có thể xác định cách các ứng dụng của bạn sẽ chạy và cách chúng có thể tương tác với các ứng dụng khác hoặc thế giới bên ngoài. Bạn có thể tăng hoặc giảm quy mô dịch vụ của bạn , thực hiện cập nhật liên tục và chuyển đổi lưu lượng giữa các version ứng dụng khác nhau để kiểm tra các tính năng hoặc khôi phục các triển khai có vấn đề. Kubernetes cung cấp các giao diện và nền tảng nguyên thủy có thể kết hợp cho phép bạn xác định và quản lý các ứng dụng của bạn với mức độ linh hoạt, sức mạnh và độ tin cậy cao.
Kiến trúc Kubernetes
Để hiểu cách Kubernetes có thể cung cấp những khả năng này, sẽ rất hữu ích nếu bạn hiểu cách nó được thiết kế và tổ chức ở cấp cao. Kubernetes có thể được hình dung như một hệ thống được xây dựng trong các lớp, với mỗi lớp cao hơn sẽ trừu tượng hóa độ phức tạp được tìm thấy ở các cấp thấp hơn.
Tại cơ sở của nó, Kubernetes tập hợp các máy ảo hoặc vật lý riêng lẻ thành một cụm sử dụng mạng chia sẻ để giao tiếp giữa mỗi server . Cụm này là nền tảng vật lý nơi tất cả các thành phần, khả năng và dung lượng công việc của Kubernetes được cấu hình .
Mỗi máy trong cụm được giao một role trong hệ sinh thái Kubernetes. Một server (hoặc một group nhỏ trong việc triển khai tính sẵn sàng cao) có chức năng như server tổng thể. Server này hoạt động như một cổng và bộ não cho cụm bằng cách hiển thị một API cho user và client , kiểm tra tình trạng của các server khác, quyết định cách tốt nhất để phân chia và phân công công việc (được gọi là “lập lịch”) và điều phối giao tiếp giữa các thành phần khác. Server chính đóng role là điểm liên hệ chính với cụm và chịu trách nhiệm về hầu hết các logic tập trung mà Kubernetes cung cấp.
Các máy khác trong cụm được chỉ định làm nút : server chịu trách nhiệm chấp nhận và chạy dung lượng công việc bằng cách sử dụng tài nguyên local và bên ngoài. Để giúp cô lập, quản lý và linh hoạt, Kubernetes chạy các ứng dụng và dịch vụ trong vùng chứa , vì vậy mỗi nút cần được trang bị thời gian chạy containers (như Docker hoặc rkt). Nút nhận hướng dẫn công việc từ server chính và tạo hoặc hủy các containers cho phù hợp, điều chỉnh các luật mạng để định tuyến và chuyển tiếp lưu lượng truy cập một cách thích hợp.
Như đã đề cập ở trên, bản thân các ứng dụng và dịch vụ được chạy trên cụm bên trong containers . Các thành phần bên dưới đảm bảo trạng thái mong muốn của các ứng dụng trùng với trạng thái thực tế của cụm. User tương tác với cụm bằng cách giao tiếp với server API chính trực tiếp hoặc với client và thư viện. Để khởi động một ứng dụng hoặc dịch vụ, một kế hoạch khai báo được gửi trong JSON hoặc YAML xác định những gì cần tạo và cách quản lý nó. Sau đó, server chính sẽ lập kế hoạch và tìm ra cách chạy nó trên cơ sở hạ tầng bằng cách kiểm tra các yêu cầu và trạng thái hiện tại của hệ thống. Group các ứng dụng do user xác định chạy theo một kế hoạch cụ thể đại diện cho lớp cuối cùng của Kubernetes.
Thành phần server chính
Như ta đã mô tả ở trên, server chính hoạt động như mặt phẳng điều khiển chính cho các cụm Kubernetes. Nó đóng role là điểm tiếp xúc chính cho administrator và user , đồng thời cung cấp nhiều hệ thống toàn cụm cho các node công nhân tương đối phức tạp. Nhìn chung, các thành phần trên server chính làm việc cùng nhau để chấp nhận yêu cầu của user , xác định cách tốt nhất để lên lịch cho các containers dung lượng công việc, xác thực các client và nút, điều chỉnh mạng toàn cụm và quản lý các trách nhiệm mở rộng và kiểm tra tình trạng.
Các thành phần này có thể được cài đặt trên một máy hoặc phân phối trên nhiều server . Ta sẽ xem xét từng thành phần riêng lẻ được liên kết với các server chính trong phần này.
vvd
Một trong những thành phần cơ bản mà Kubernetes cần để hoạt động là một kho cấu hình có sẵn trên phạm vi global . Dự án etcd , được phát triển bởi group tại CoreOS, là một repository key-value phân tán, nhẹ, có thể được cấu hình để trải dài trên nhiều nút.
Kubernetes sử dụng etcd
để lưu trữ dữ liệu cấu hình có thể được truy cập bởi từng nút trong cụm. Điều này được dùng để khám phá dịch vụ và có thể giúp các thành phần cấu hình hoặc tự cấu hình lại theo thông tin cập nhật. Nó cũng giúp duy trì trạng thái cụm với các tính năng như bầu cử lãnh đạo và khóa phân tán. Bằng cách cung cấp một API HTTP / JSON đơn giản, giao diện để cài đặt hoặc truy xuất các giá trị rất đơn giản.
Giống như hầu hết các thành phần khác trong mặt phẳng điều khiển, etcd
có thể được cấu hình trên một server chính duy nhất hoặc trong các kịch bản production , được phân phối giữa một số máy. Yêu cầu duy nhất là nó phải có thể truy cập mạng cho mỗi máy Kubernetes.
kube-apiserver
Một trong những dịch vụ chính quan trọng nhất là server API. Đây là điểm quản lý chính của toàn bộ cụm vì nó cho phép user cấu hình dung lượng công việc và đơn vị tổ chức của Kubernetes. Nó cũng có trách nhiệm đảm bảo cửa hàng etcd
và chi tiết dịch vụ của các containers được triển khai là thống nhất. Nó hoạt động như cầu nối giữa các thành phần khác nhau để duy trì tình trạng của cụm và phổ biến thông tin và lệnh.
Server API triển khai giao diện RESTful, nghĩa là nhiều công cụ và thư viện khác nhau có thể dễ dàng giao tiếp với nó. Ứng dụng khách được gọi là kubectl có sẵn như một phương thức mặc định để tương tác với cụm Kubernetes từ một máy tính local .
kube-controller-manager
Người quản lý kiểm soát viên là một dịch vụ tổng hợp có nhiều trách nhiệm. Về cơ bản, nó quản lý các bộ điều khiển khác nhau điều chỉnh trạng thái của cụm, quản lý vòng đời dung lượng công việc và thực hiện các việc thông thường.Ví dụ: một bộ điều khiển sao chép đảm bảo số lượng bản sao (các bản sao giống hệt nhau) được xác định cho một group trùng với số lượng hiện được triển khai trên cụm. Chi tiết của các hoạt động này được ghi vào etcd
, nơi người quản lý bộ điều khiển theo dõi các thay đổi thông qua server API.
Khi một thay đổi được nhìn thấy, bộ điều khiển đọc thông tin mới và thực hiện quy trình đáp ứng trạng thái mong muốn. Điều này có thể liên quan đến việc mở rộng ứng dụng lên hoặc xuống, điều chỉnh điểm cuối, v.v.
kube-Scheduler
Quá trình thực sự chỉ định dung lượng công việc cho các node cụ thể trong cụm là bộ lập lịch. Dịch vụ này đọc các yêu cầu hoạt động của dung lượng công việc, phân tích môi trường cơ sở hạ tầng hiện tại và đặt công việc trên một hoặc các node có thể chấp nhận được.
Bộ lập lịch chịu trách nhiệm theo dõi dung lượng khả dụng trên mỗi server lưu trữ đảm bảo rằng dung lượng công việc được lập lịch vượt quá các tài nguyên có sẵn. Người lập lịch phải biết tổng dung lượng cũng như tài nguyên đã được cấp cho dung lượng công việc hiện có trên mỗi server .
cloud-controller-manager
Kubernetes có thể được triển khai trong nhiều môi trường khác nhau và có thể tương tác với các nhà cung cấp cơ sở hạ tầng khác nhau để hiểu và quản lý trạng thái của các tài nguyên trong cụm. Mặc dù Kubernetes hoạt động với các đại diện chung của các tài nguyên như bộ lưu trữ có thể đính kèm và bộ cân bằng tải, nhưng nó cần một cách để ánh xạ chúng với các tài nguyên thực tế được cung cấp bởi các nhà cung cấp cloud không đồng nhất.
Các nhà quản lý bộ điều khiển cloud hoạt động như chất kết dính cho phép Kubernetes tương tác với các nhà cung cấp với các khả năng, tính năng và API khác nhau trong khi vẫn duy trì các cấu trúc tương đối chung trong nội bộ. Điều này cho phép Kubernetes cập nhật thông tin trạng thái của bạn theo thông tin thu thập được từ nhà cung cấp cloud , điều chỉnh tài nguyên cloud khi cần thay đổi trong hệ thống, đồng thời tạo và sử dụng các dịch vụ cloud bổ sung để đáp ứng các yêu cầu công việc được gửi đến cụm.
Các thành phần server nút
Trong Kubernetes, các server thực hiện công việc bằng cách chạy các containers được gọi là các node . Server nút có một số yêu cầu cần thiết để giao tiếp với các thành phần chính, cấu hình mạng containers và chạy dung lượng công việc thực tế được giao cho chúng.
Thời gian chạy containers
Thành phần đầu tiên mà mỗi nút phải có là thời gian chạy containers . Thông thường, yêu cầu này được thỏa mãn bằng cách cài đặt và chạy Docker , nhưng lựa chọn thay thế như RKT và runc cũng có sẵn.
Thời gian chạy containers chịu trách nhiệm khởi động và quản lý các containers , các ứng dụng được gói gọn trong một môi trường hoạt động tương đối biệt lập nhưng nhẹ. Mỗi đơn vị công việc trên cụm, ở cấp độ cơ bản, được thực hiện như một hoặc nhiều containers phải được triển khai. Thời gian chạy containers trên mỗi nút là thành phần cuối cùng chạy các containers được xác định trong dung lượng công việc được gửi đến cụm.
kubelet
Điểm tiếp xúc chính cho mỗi nút với group cụm là một dịch vụ nhỏ gọi là kubelet . Dịch vụ này chịu trách nhiệm chuyển tiếp thông tin đến và đi từ các dịch vụ máy bay điều khiển, cũng như tương tác với repository etcd
để đọc chi tiết cấu hình hoặc ghi các giá trị mới.
Dịch vụ kubelet
giao tiếp với các thành phần chính để xác thực với cụm và nhận lệnh và làm việc.Công việc được nhận dưới dạng một bản kê khai xác định dung lượng công việc và các thông số hoạt động. Sau đó, quy trình kubelet
đảm nhận trách nhiệm duy trì trạng thái của công việc trên server nút. Nó kiểm soát thời gian chạy của containers để chạy hoặc phá hủy các containers khi cần thiết.
kube-proxy
Để quản lý mạng con server riêng lẻ và cung cấp dịch vụ cho các thành phần khác, một dịch vụ proxy nhỏ gọi là kube-proxy được chạy trên mỗi server nút. Quá trình này chuyển tiếp các yêu cầu đến đúng containers , có thể thực hiện cân bằng tải nguyên thủy và thường chịu trách nhiệm đảm bảo môi trường mạng có thể dự đoán được và có thể truy cập được, nhưng bị cô lập khi thích hợp.
Các đối tượng và dung lượng công việc Kubernetes
Trong khi containers là cơ chế cơ bản được sử dụng để triển khai ứng dụng, Kubernetes sử dụng các lớp trừu tượng bổ sung trên giao diện containers để cung cấp các tính năng quản lý quy mô, khả năng phục hồi và vòng đời. Thay vì quản lý các containers một cách trực tiếp, user xác định và tương tác với các thể hiện bao gồm các bản root khác nhau được cung cấp bởi mô hình đối tượng Kubernetes. Ta sẽ xem xét các loại đối tượng khác nhau được dùng để xác định các dung lượng công việc này bên dưới.
Vỏ
Một group là đơn vị cơ bản nhất mà Kubernetes xử lý. Bản thân các containers không được chỉ định cho các server lưu trữ. Thay vào đó, một hoặc nhiều containers được kết hợp chặt chẽ được gói gọn trong một đối tượng được gọi là group .
Một group thường đại diện cho một hoặc nhiều containers cần được kiểm soát như một ứng dụng duy nhất. Group bao gồm các containers hoạt động chặt chẽ cùng nhau, chia sẻ vòng đời và phải luôn được lập lịch trên cùng một nút. Chúng được quản lý hoàn toàn như một đơn vị và chia sẻ môi trường, dung lượng và không gian IP của chúng. Bất chấp việc triển khai trong containers của chúng, nhìn chung bạn nên nghĩ về group như một ứng dụng nguyên khối duy nhất để hình thành khái niệm tốt nhất về cách cụm sẽ quản lý tài nguyên và lập lịch của group .
Thông thường, các group bao gồm một containers chính đáp ứng mục đích chung của dung lượng công việc và tùy chọn một số containers trợ giúp tạo điều kiện cho các nhiệm vụ liên quan chặt chẽ. Đây là những chương trình được hưởng lợi từ việc được chạy và quản lý trong containers của riêng chúng, nhưng được gắn chặt với ứng dụng chính. Ví dụ: một group có thể có một containers chạy server ứng dụng chính và một containers trình trợ giúp kéo các file xuống hệ thống file được chia sẻ khi các thay đổi được phát hiện trong repository lưu trữ bên ngoài. Chia tỷ lệ theo chiều ngang thường không được khuyến khích ở cấp group vì có các đối tượng cấp cao khác phù hợp hơn cho nhiệm vụ.
Nói chung, user không nên tự quản lý các group vì chúng không cung cấp một số tính năng thường cần trong các ứng dụng (như quản lý vòng đời phức tạp và mở rộng quy mô). Thay vào đó, user được khuyến khích làm việc với các đối tượng cấp cao hơn sử dụng group hoặc mẫu group làm thành phần cơ sở nhưng triển khai chức năng bổ sung.
Bộ điều khiển sao chép và bộ sao chép
Thông thường, khi làm việc với Kubernetes, thay vì làm việc với các group đơn lẻ, bạn sẽ quản lý các group các group giống hệt nhau, được nhân rộng. Chúng được tạo từ các mẫu group và có thể được chia tỷ lệ theo chiều ngang bởi các bộ điều khiển được gọi là bộ điều khiển sao chép và bộ sao chép.
Bộ điều khiển sao chép là một đối tượng xác định mẫu group và các tham số điều khiển để chia tỷ lệ các bản sao giống hệt nhau của group theo chiều ngang bằng cách tăng hoặc giảm số lượng bản sao đang chạy. Đây là một cách dễ dàng để phân phối tải và tăng tính khả dụng ngay trong Kubernetes. Bộ điều khiển nhân bản biết cách tạo các group mới khi cần thiết vì một mẫu gần giống với định nghĩa group được nhúng trong cấu hình bộ điều khiển nhân bản.
Bộ điều khiển sao chép chịu trách nhiệm đảm bảo số lượng group được triển khai trong cụm trùng với số lượng group trong cấu hình của nó. Nếu một group hoặc server cơ bản bị lỗi, bộ điều khiển sẽ bắt đầu các group mới để bù đắp. Nếu số lượng bản sao trong cấu hình của bộ điều khiển thay đổi, bộ điều khiển sẽ khởi động hoặc giết các containers để trùng với số lượng mong muốn. Bộ điều khiển sao chép cũng có thể thực hiện cập nhật luân phiên để chuyển từng group một lên version mới, giảm thiểu tác động đến tính khả dụng của ứng dụng.
Bộ sao chép là sự lặp lại trên thiết kế bộ điều khiển sao chép với tính linh hoạt cao hơn trong cách bộ điều khiển xác định các group mà nó dùng để quản lý. Các bộ sao chép đang bắt đầu thay thế các bộ điều khiển sao chép vì khả năng lựa chọn bản sao lớn hơn của chúng, nhưng chúng không thể thực hiện cập nhật luân phiên để chuyển các chương trình backend sang một version mới như bộ điều khiển sao chép có thể. Thay vào đó, các bộ sao chép nghĩa là được sử dụng bên trong các đơn vị cấp cao hơn, bổ sung cung cấp chức năng đó.
Giống như group , cả bộ điều khiển sao chép và bộ sao chép hiếm khi là đơn vị bạn sẽ làm việc trực tiếp. Trong khi họ xây dựng trên thiết kế group để bổ sung khả năng mở rộng theo chiều ngang và đảm bảo độ tin cậy, họ thiếu một số khả năng quản lý vòng đời chi tiết được tìm thấy trong các đối tượng phức tạp hơn.
Triển khai
Triển khai là một trong những dung lượng công việc phổ biến nhất để trực tiếp tạo và quản lý. Việc triển khai sử dụng các tập hợp nhân bản như một khối xây dựng, thêm chức năng quản lý vòng đời linh hoạt vào hỗn hợp.
Mặc dù các triển khai được xây dựng với các tập hợp bản sao có thể trùng lặp chức năng được cung cấp bởi bộ điều khiển nhân bản, nhưng việc triển khai giải quyết nhiều điểm khó khăn tồn tại trong việc triển khai các bản cập nhật cuộn. Khi cập nhật các ứng dụng có bộ điều khiển sao chép, user được yêu cầu gửi kế hoạch cho một bộ điều khiển sao chép mới sẽ thay thế bộ điều khiển hiện tại. Khi sử dụng bộ điều khiển sao chép, các việc như theo dõi lịch sử, khôi phục lỗi mạng trong quá trình cập nhật và khôi phục các thay đổi xấu đều khó hoặc là trách nhiệm của user .
Triển khai là một đối tượng cấp cao được thiết kế để dễ dàng quản lý vòng đời của các group được sao chép. Các triển khai có thể được sửa đổi dễ dàng bằng cách thay đổi cấu hình và Kubernetes sẽ điều chỉnh các tập hợp bản sao, quản lý quá trình chuyển đổi giữa các version ứng dụng khác nhau và tùy chọn duy trì lịch sử sự kiện và khả năng hoàn tác tự động. Do các tính năng này, triển khai có thể sẽ là loại đối tượng Kubernetes mà bạn làm việc thường xuyên nhất.
Bộ trạng thái
Bộ trạng thái là bộ điều khiển group chuyên biệt cung cấp đảm bảo về thứ tự và tính duy nhất. Chủ yếu, chúng được sử dụng để kiểm soát chi tiết hơn khi bạn có các yêu cầu đặc biệt liên quan đến thứ tự triển khai, dữ liệu liên tục hoặc mạng ổn định.Ví dụ: các tập hợp trạng thái thường được liên kết với các ứng dụng hướng dữ liệu, như database , cần quyền truy cập vào cùng một dung lượng ngay cả khi được lên lịch lại cho một nút mới.
Các bộ trạng thái cung cấp một mã định danh mạng ổn định bằng cách tạo một tên dựa trên số duy nhất cho mỗi group sẽ tồn tại ngay cả khi group đó cần được chuyển đến một nút khác. Tương tự như vậy, các dung lượng lưu trữ liên tục có thể được chuyển bằng một group khi cần thiết phải lên lịch lại. Các ổ đĩa vẫn tồn tại ngay cả sau khi group đã bị xóa để tránh mất dữ liệu ngẫu nhiên.
Khi triển khai hoặc điều chỉnh quy mô, các tập hợp trạng thái thực hiện các hoạt động theo định danh được đánh số trong tên của chúng. Điều này mang lại khả năng dự đoán cao hơn và kiểm soát thứ tự thực hiện, điều này có thể hữu ích trong một số trường hợp.
Bộ Daemon
Bộ Daemon là một dạng chuyên biệt khác của bộ điều khiển group chạy một bản sao của group trên mỗi nút trong cụm (hoặc một tập hợp con, nếu được chỉ định). Điều này thường hữu ích nhất khi triển khai các group giúp thực hiện bảo trì và cung cấp dịch vụ cho chính các node .
Ví dụ: thu thập và chuyển tiếp log , tổng hợp số liệu và chạy các dịch vụ giúp tăng khả năng của chính nút là những thành phần phổ biến cho các bộ daemon. Vì các bộ daemon thường cung cấp các dịch vụ cơ bản và cần thiết trong toàn bộ group , chúng có thể bỏ qua các hạn chế lập lịch group ngăn chặn các bộ điều khiển khác gán group cho các server nhất định. Ví dụ: do các trách nhiệm duy nhất của nó, server chủ thường được cấu hình để không khả dụng cho việc lập lịch group thông thường, nhưng các bộ daemon có khả năng overrides hạn chế trên cơ sở từng group đảm bảo các dịch vụ thiết yếu đang chạy.
Jobs và Cron Jobs
Các dung lượng công việc mà ta đã mô tả cho đến nay đều giả định một vòng đời hoạt động lâu dài giống như dịch vụ. Kubernetes sử dụng dung lượng công việc được gọi là công việc để cung cấp quy trình làm việc dựa trên tác vụ nhiều hơn trong đó các containers đang chạy dự kiến sẽ thoát thành công sau một thời gian khi chúng đã hoàn thành công việc của bạn . Công việc hữu ích nếu bạn cần thực hiện xử lý một lần hoặc hàng loạt thay vì chạy một dịch vụ liên tục.
Xây dựng trên công việc là công việc cron . Giống như các daemon cron
thông thường trên các hệ thống giống như Linux và Unix thực thi các tập lệnh theo lịch trình, các công việc cron trong Kubernetes cung cấp một giao diện để chạy các công việc với thành phần lập lịch trình. Cron job được dùng để lên lịch cho một công việc sẽ thực hiện trong tương lai hoặc thường xuyên, lặp đi lặp lại. Các công việc cron của Kubernetes về cơ bản là sự hoàn thiện lại hành vi cron cổ điển, sử dụng cụm làm nền tảng thay vì một hệ điều hành duy nhất.
Các thành phần Kubernetes khác
Ngoài dung lượng công việc bạn có thể chạy trên một cụm, Kubernetes cung cấp một số thông tin tóm tắt khác giúp bạn quản lý các ứng dụng của bạn , kiểm soát mạng và kích hoạt tính bền bỉ. Ta sẽ thảo luận về một vài ví dụ phổ biến hơn ở đây.
Dịch vụ
Lúc này, ta đang sử dụng thuật ngữ “dịch vụ” theo nghĩa thông thường, giống Unix: để biểu thị các quy trình chạy lâu dài, thường được kết nối mạng, có khả năng đáp ứng các yêu cầu. Tuy nhiên, trong Kubernetes, một dịch vụ là một thành phần hoạt động như một bộ cân bằng tải nội bộ cơ bản và đại sứ cho các group .Một dịch vụ group lại các tập hợp lôgic của các group thực hiện cùng một chức năng để trình bày chúng dưới dạng một thực thể duy nhất.
Điều này cho phép bạn triển khai một dịch vụ có thể theo dõi và định tuyến đến tất cả các containers backend của một loại cụ thể. Người tiêu dùng nội bộ chỉ cần biết về điểm cuối ổn định do dịch vụ cung cấp. Trong khi đó, dịch vụ trừu tượng cho phép bạn mở rộng quy mô hoặc thay thế các đơn vị công việc backend nếu cần. Địa chỉ IP của dịch vụ vẫn ổn định dù thay đổi đối với các group mà nó định tuyến đến. Bằng cách triển khai một dịch vụ, bạn dễ dàng có được khả năng khám phá và có thể đơn giản hóa thiết kế containers của bạn .
Bất kỳ lúc nào bạn cần cung cấp quyền truy cập vào một hoặc nhiều group cho ứng dụng khác hoặc cho người tiêu dùng bên ngoài, bạn nên cấu hình dịch vụ. Ví dụ: nếu bạn có một tập hợp các group đang chạy các web server có thể truy cập được từ internet, một dịch vụ sẽ cung cấp thông tin tóm tắt cần thiết. Tương tự như vậy, nếu web server của bạn cần lưu trữ và truy xuất dữ liệu, bạn cần cấu hình một dịch vụ nội bộ để cấp cho chúng quyền truy cập vào các group database của bạn.
Mặc dù các dịch vụ, theo mặc định, chỉ khả dụng bằng cách sử dụng địa chỉ IP có thể định tuyến nội bộ, chúng có thể được cung cấp bên ngoài cụm bằng cách chọn một trong số các chiến lược. Cấu hình NodePort hoạt động bằng cách mở một cổng tĩnh trên network interface bên ngoài của mỗi nút. Lưu lượng truy cập đến cổng bên ngoài sẽ được tự động định tuyến đến các group thích hợp bằng cách sử dụng dịch vụ IP cụm nội bộ.
Ngoài ra, loại dịch vụ LoadBalancer tạo bộ cân bằng tải bên ngoài để định tuyến đến dịch vụ bằng cách sử dụng tích hợp bộ cân bằng tải Kubernetes của nhà cung cấp cloud . Người quản lý bộ điều khiển cloud sẽ tạo tài nguyên thích hợp và cấu hình nó bằng cách sử dụng các địa chỉ dịch vụ dịch vụ nội bộ.
Số lượng và Số lượng liên tục
Chia sẻ dữ liệu một cách tin cậy và đảm bảo tính khả dụng của nó giữa các lần khởi động lại containers là một thách thức trong nhiều môi trường được container hóa. Thời gian chạy containers thường cung cấp một số cơ chế để gắn bộ nhớ vào containers tồn tại ngoài thời gian tồn tại của containers , nhưng việc triển khai thường thiếu tính linh hoạt.
Để giải quyết vấn đề này, Kubernetes sử dụng tính trừu tượng dung lượng của riêng mình cho phép chia sẻ dữ liệu bởi tất cả các containers trong một group và vẫn có sẵn cho đến khi kết thúc group . Điều này nghĩa là các group được kết hợp chặt chẽ có thể dễ dàng chia sẻ file mà không cần các cơ chế phức tạp bên ngoài. Lỗi containers trong group sẽ không ảnh hưởng đến quyền truy cập vào các file được chia sẻ. Khi group bị kết thúc, dung lượng được chia sẻ sẽ bị phá hủy, vì vậy đây không phải là giải pháp tốt cho dữ liệu thực sự liên tục.
Dung lượng liên tục là một cơ chế để trừu tượng hóa bộ nhớ mạnh mẽ hơn mà không bị ràng buộc với vòng đời group . Thay vào đó, chúng cho phép administrator cấu hình tài nguyên lưu trữ cho cụm mà user có thể yêu cầu và xác nhận quyền sở hữu cho các group mà họ đang chạy. Sau khi một group được thực hiện với một dung lượng ổn định, policy thu hồi của dung lượng sẽ xác định liệu dung lượng đó có được giữ nguyên cho đến khi xóa hoặc xóa theo cách thủ công cùng với dữ liệu ngay lập tức hay không. Dữ liệu liên tục được dùng để bảo vệ chống lại các lỗi dựa trên nút và để phân bổ lượng lưu trữ lớn hơn số lượng sẵn có tại local .
Nhãn và chú thích
Một sự trừu tượng hóa tổ chức của Kubernetes liên quan đến, nhưng bên ngoài các khái niệm khác, là nhãn. Nhãn trong Kubernetes là một thẻ ngữ nghĩa có thể được gắn vào các đối tượng Kubernetes để đánh dấu chúng là một phần của group . Sau đó, chúng có thể được chọn khi nhắm đến các trường hợp khác nhau để quản lý hoặc định tuyến. Ví dụ: mỗi đối tượng dựa trên bộ điều khiển sử dụng nhãn để xác định các group mà chúng sẽ hoạt động trên đó. Các dịch vụ sử dụng các nhãn để hiểu các group backend mà chúng nên định tuyến các yêu cầu.
Các nhãn được cung cấp dưới dạng các cặp key-value đơn giản. Mỗi đơn vị có thể có nhiều nhãn, nhưng mỗi đơn vị chỉ có thể có một mục nhập cho mỗi khóa. Thông thường, khóa “tên” được sử dụng làm định danh mục đích chung, nhưng bạn có thể phân loại bổ sung các đối tượng theo các tiêu chí khác như giai đoạn phát triển, khả năng truy cập , version ứng dụng, v.v.
Chú thích là một cơ chế tương tự cho phép bạn đính kèm thông tin key-value tùy ý vào một đối tượng. Mặc dù các nhãn nên được sử dụng cho thông tin ngữ nghĩa hữu ích để đối sánh group với tiêu chí lựa chọn, chú thích ở dạng tự do hơn và có thể chứa ít dữ liệu có cấu trúc hơn. Nói chung, chú thích là một cách thêm metadata phong phú vào một đối tượng không hữu ích cho mục đích lựa chọn.
Kết luận
Kubernetes là một dự án thú vị cho phép user chạy các dung lượng công việc chứa sẵn có khả năng mở rộng cao trên một nền tảng trừu tượng hóa cao. Mặc dù kiến trúc và tập hợp các thành phần bên trong của Kubernetes thoạt đầu có vẻ khó khăn, nhưng sức mạnh, tính linh hoạt và bộ tính năng mạnh mẽ của chúng là vô song trong thế giới open-souce . Bằng cách hiểu các khối xây dựng cơ bản trùng với nhau như thế nào, bạn có thể bắt đầu thiết kế các hệ thống tận dụng đầy đủ các khả năng của nền tảng để chạy và quản lý dung lượng công việc của bạn trên quy mô lớn.
Các tin liên quan