Mesos cho phép người dùng tích hợp nhiều cơng cụ khám phá dịch vụ khác nhau, tuy nhiên giải pháp thường được dùng là Mesos-DNS, một dạng dịch vụ DNS
tương tự như DNS trong Docker swarm wagl.
3.2.5 Kubernetes
Kubernetes là một nền tảng điều phối mã nguồn mở được phát triển sau hơn một thập kỷ chạy các ứng dụng container của Google. Như hai nền tảng ở trên, Kubernetes gồm ít nhất một máy chủ và nhiều máy nô lệ. Máy chủ cung cấp API cho người dùng, có trách nhiệm lập lịch để triển khai và quản lý toàn bộ cluster. Tất cả các node trong Kubernetes cluster đều cung cấp mơi trường chạy container, ví dụ như Docker hay rkt.
Trong Kubernetes, một pod là một tập hợp các container được triển khai và quản lý cùng nhau. Pod là đơn vị triển khai nhỏ nhất, đóng vai trị như lớp bao của các
container với mơi trường ngồi.
Các ảnh container trong pod và số lượng bản sao các pod cần chạy có thể được
khai báo trực quan trong tệp dạng JSON hoặc YAML. Thành phần Replication Controller (trong các phiên bản Kubernetes mới hơn, thành phần ReplicaSet hoặc Deployment có thể được sử dụng thay cho Replication Controller) có vai trị đọc các tệp JSON được khai báo và đảm bảo trạng thái của các pod.
Kubernetes cài lên mỗi máy trong cluster một kubelet agent, chịu trách nhiệm
điều khiển các dịch vụ Docker, giám sát và thông báo cho master trạng thái tài nguyên
của máy. Máy chủ thu thập và lưu trữ trạng thái toàn bộ các máy vào cơ sở dữ liệu dạng key-value etcd; dựa vào đó, bộ lập lịch trong máy chủ lựa chọn vị trí triển khai cho các pod.
Hình 3.8: Kiến trúc của Kubernetes [11]
mở ra cho các container trong pod là không đáng tin cậy. Để giải quyết vấn đề này,
Kubernetes cung cấp một lớp trừu tượng gọi là lớp dịch vụ. Một tập hợp các pod sẽ
được đại diện bởi một dịch vụ, với tên và cổng không đổi. Dịch vụ lựa chọn các pod để đại diện dựa vào Label Selector. Trong các ứng dụng nội bộ, Kubernetes cung cấp
các Endpoints API và luôn cập nhật API theo sự thay đổi của các Pod trong dịch vụ. Với các ứng dụng khác, Kubernetes cung cấp một dạng IP ảo cho dịch vụ, từ dịch vụ sẽ redirect các yêu cầu sang Pod.
Trên mỗi máy trong Kubernetes cluster đều được cài kube-proxy, có nhiệm vụ cung cấp một dạng địa chỉ IP ảo cho các service. Kube-proxy có nhiều dạng hoạt động, tuy nhiên mục đích chung đều là ánh xạ các yêu cầu gửi tới Service vào các Pod
chạy phía sau. Ví dụ (Hình 3.9): Ở dạng userspace, kube-proxy sẽ lắng nghe sự kiện thêm/bớt Service hay Pod từ master. Với mỗi Service, kube-proxy sẽ mở một cổng proxy ảo trên máy. Tất cả yêu cầu gửi tới cổng sẽ được đẩy tới các Pod mà Service
ánh xạ tới (thông tin ánh xạ của Service và Pod được lưu trong EndPoints API). Kube- proxy cũng sẽ sửa đổi bảng iptables để redirect tất cả yêu cầu tới địa chỉ IP ảo và cổng của Service sang cổng proxy ảo, từ đó redirect sang đúng Pod mà Service đang đại
diện. [19]