Kubernetes thực sự làm gì? [đóng cửa]


133

Kubernetes được lập hóa đơn như một cụm "trình lập lịch biểu / dàn nhạc", nhưng tôi không biết điều này có nghĩa là gì. Sau khi đọc trang Kubernetes và wiki GitHub (mơ hồ), điều tốt nhất tôi có thể nói là bằng cách nào đó nó tìm ra những máy ảo nào có sẵn / có khả năng chạy container Docker của bạn, và sau đó triển khai chúng ở đó. Nhưng đó chỉ là phỏng đoán của tôi và tôi chưa thấy bất kỳ thông báo cụ thể nào trong tài liệu của họ để hỗ trợ điều đó.

Vậy Kubernetes là gì, chính xác , và một số vấn đề cụ thể mà nó giải quyết là gì?


Cho rằng tất cả các dự án docker-world (kubernetes / hạm đội / swarm / v.v.) đều gặp khó khăn trong việc giải thích những gì họ làm và những gì làm cho họ khác biệt, tôi nghĩ rằng một câu hỏi hơi mơ hồ là tất cả những gì người dùng chúng tôi có thể cung cấp ... hỏi "sự khác biệt giữa hạm đội và kubernetes" và câu trả lời là "bạn có thể sử dụng hạm đội để khởi động kubernetes". Bummer. ;-)
Torsten Bronger

3
Tôi nghĩ rằng đó là một câu hỏi hoàn toàn hợp lệ và chỉ ra một số truyện ngắn trong tài liệu. Để đóng nó là quá rộng là một dịch vụ. Cách tiếp cận tốt nhất đối với tôi, chỉ đơn giản là tải xuống cơ sở mã k8s và tìm kiếm trong đó để tìm hiểu xem pod là gì. Điều đó đã giúp tôi rất nhiều.
Beezer

Câu trả lời:


112

Mục đích của Kubernetes là giúp tổ chức và lên lịch ứng dụng của bạn dễ dàng hơn trên một đội máy. Ở cấp độ cao, nó là một hệ điều hành cho cụm của bạn.

Về cơ bản, nó cho phép bạn không lo lắng về máy cụ thể nào trong trung tâm dữ liệu của mình mỗi ứng dụng chạy trên đó. Ngoài ra, nó cung cấp các nguyên hàm chung để kiểm tra sức khỏe và sao chép ứng dụng của bạn trên các máy này, cũng như các dịch vụ kết nối ứng dụng của bạn thành các dịch vụ vi mô để mỗi lớp trong ứng dụng của bạn được tách rời khỏi các lớp khác để bạn có thể mở rộng / cập nhật / bảo trì chúng độc lập.

Mặc dù có thể thực hiện nhiều điều trong lớp ứng dụng này, nhưng các giải pháp đó có xu hướng một lần và dễ vỡ, tốt hơn hết là bạn nên phân tách các mối quan tâm, trong đó một hệ thống điều phối lo lắng về cách chạy ứng dụng của bạn và bạn lo lắng về mã tạo nên ứng dụng của bạn.


3
Cảm ơn @brendan (+1) - câu trả lời của bạn chắc chắn có ích. Một câu hỏi tiếp theo: đây không phải là những gì Apache Mesos làm? Là Kubernetes và Mesos cạnh tranh với nhau? Nếu không, chúng có thể được sử dụng trong buổi hòa nhạc với nhau (và nếu vậy, làm thế nào)? Cảm ơn một lần nữa!
smeeb

2
@smeeb Mesos và Kubernetes bổ sung cho nhau (Cái sau được hỗ trợ dưới dạng khung Mesos). Mesos cung cấp quản lý tài nguyên tinh vi hơn. Nói cách khác, Kubernetes cho phép Mesos quyết định máy chủ nào được sử dụng, dựa trên dung lượng khả dụng. Mesos hỗ trợ các khung khác. Nếu bạn đọc tài liệu, bạn sẽ thấy rằng Marathon là một cách khác để khởi chạy các container trên cụm máy chủ do Mesos quản lý.
Đánh dấu O'Connor

18

Khi bạn đọc từ trang Github của nó :

Kubernetes là một hệ thống nguồn mở để quản lý các ứng dụng được chứa trên nhiều máy chủ, cung cấp các cơ chế cơ bản để triển khai, bảo trì và nhân rộng các ứng dụng.

Kubernetes là:

lean: lightweight, simple, accessible
portable: public, private, hybrid, multi cloud
extensible: modular, pluggable, hookable, composable
self-healing: auto-placement, auto-restart, auto-replication

Kubernetes xây dựng dựa trên một thập kỷ rưỡi kinh nghiệm tại Google vận hành khối lượng công việc sản xuất ở quy mô, kết hợp với các ý tưởng và thực tiễn tốt nhất từ ​​cộng đồng.

Đối với tôi Kubernetes là một công cụ điều phối container từ Google. Do thiết kế của nó, bạn có thể thực hiện khả năng tương thích với bất kỳ công cụ chứa nào, nhưng tôi nghĩ bây giờ nó bị giới hạn ở Docker. Có một số khái niệm quan trọng trong kiến ​​trúc của nó:

Kubernetes hoạt động với các khái niệm sau:

Các cụm là các tài nguyên tính toán trên đó các thùng chứa của bạn được xây dựng. Kubernetes có thể chạy ở bất cứ đâu! Xem Hướng dẫn bắt đầu để biết hướng dẫn cho nhiều loại dịch vụ.

Pods là một nhóm chứa Docker được tập hợp với khối lượng chia sẻ. Chúng là những đơn vị có thể triển khai nhỏ nhất có thể được tạo, lên lịch và quản lý bằng Kubernetes. Các pod có thể được tạo riêng lẻ, nhưng bạn nên sử dụng bộ điều khiển sao chép ngay cả khi tạo một nhóm duy nhất. Thêm về vỏ.

Bộ điều khiển nhân rộng quản lý vòng đời của vỏ. Họ đảm bảo rằng một số nhóm được chỉ định đang chạy tại bất kỳ thời điểm nào, bằng cách tạo hoặc hủy các nhóm theo yêu cầu. Thêm về bộ điều khiển nhân rộng.

Các dịch vụ cung cấp một tên và địa chỉ ổn định, duy nhất cho một nhóm các nhóm. Chúng hoạt động như các cân bằng tải cơ bản. Thêm về dịch vụ.

Các nhãn được sử dụng để sắp xếp và chọn các nhóm đối tượng dựa trên các cặp key: value. Thêm về nhãn.

Vì vậy, bạn có một nhóm các máy tạo thành một cụm nơi các container của bạn đang chạy. Yo cũng có thể định nghĩa một nhóm các container cung cấp dịch vụ, theo cách tương tự như bạn làm với các công cụ khác như fig (ví dụ: webapp pod có thể là một máy chủ rails và cơ sở dữ liệu postgres). Bạn cũng có các công cụ khác để đảm bảo một số container / nhóm dịch vụ chạy cùng lúc, kho lưu trữ khóa-giá trị, một loại cân bằng tải tích hợp ...

Nếu bạn biết điều gì đó về coreos, thì đó là một giải pháp rất giống với Google. Algo Kubernetes có sự tích hợp tốt với Google Cloud Engine.


2
Cảm ơn @jcortejoso (+1) - tuy nhiên tôi có một vài câu hỏi tiếp theo nếu bạn không phiền: (1) bạn nói rằng Kubernetes tương tự CoreOS, nhưng từ Google. Điều này ngụ ý rằng Kubernetes và CoreOS giải quyết cùng một vấn đề. Nhưng từ [trang web riêng của Kubernetes] (), nó cho biết bạn có thể cài đặt Kubernetes trên CoreOS. Vậy đó là cái gì?!? Là Kubernetes giống như CoreOS, hay Kubernetes chạy trên CoreOS và giải quyết một vấn đề cụ thể?
smeeb

1
Ngoài ra (2) Tôi vẫn chưa thấy giá trị trong "dàn nhạc" của Kubernetes ở đây. Bạn nói rằng bạn có thể sử dụng Kubernetes để xác định một nhóm các thùng chứa cung cấp dịch vụ, điều này khiến tôi băn khoăn hai điều riêng biệt: (2a) tôi không thể thực hiện kiểu phân cụm này ở lớp ứng dụng và đặt ứng dụng của mình phía sau cân bằng tải nginx? Và (2b) đây có phải là tất cả để "dàn xếp" không? Đối với tôi, một lần nữa, nó giống như cân bằng tải có thể dễ dàng đạt được ở lớp ứng dụng. Suy nghĩ? Cảm ơn một lần nữa cho câu trả lời tuyệt vời!
smeeb

1
Nếu kubernetes là "nhẹ", tôi tự hỏi giải pháp chất béo sẽ là gì.
Torsten Bronger

@smeeb Tôi không quen với nginx (vì vậy hãy tha thứ cho sự ngây thơ của tôi), nhưng tôi không nghĩ nginx sẽ khởi động lại một máy chủ đã bị sập; và nếu một máy (hoặc toàn bộ trung tâm dữ liệu) bị hỏng, nginx sẽ không khởi động lại ứng dụng của bạn trên một máy khác. kubernetes sẽ đảm bảo bạn luôn giữ n số "nhóm" chạy ở đâu đó và điều đó không thực sự quan trọng ở đâu và như thế nào.
kgreenek

10

Kubernetes cung cấp nhiều chức năng tương tự như Cơ sở hạ tầng như API dịch vụ, nhưng nhắm vào các container được lên lịch động thay vì máy ảo và Nền tảng như một hệ thống Dịch vụ, nhưng có tính linh hoạt cao hơn, bao gồm:

  • lắp đặt hệ thống lưu trữ,
  • phân phối bí mật,
  • kiểm tra sức khỏe ứng dụng,
  • nhân rộng các trường hợp ứng dụng,
  • tự động mở rộng quy mô,
  • đặt tên và khám phá,
  • cân bằng tải,
  • cập nhật
  • giám sát tài nguyên,
  • đăng nhập truy cập và nhập,
  • hỗ trợ hướng nội và gỡ lỗi, và
  • danh tính và ủy quyền.

Nếu bạn đã sử dụng các cơ chế khác để khám phá dịch vụ, phân phối bí mật, cân bằng tải, giám sát, v.v., tất nhiên bạn có thể tiếp tục sử dụng chúng, nhưng chúng tôi hướng đến việc dễ dàng chuyển đổi sang Kubernetes từ các hệ thống IaaS và PaaS hiện có bằng cách cung cấp chức năng.

https://kubernetes.io/docs/con accept / review / what-is-kubernetes / # why-do-i-about-kubernetes-and-what-can-it-do

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.