Kubernetes là gì? Quy trình hoạt động của kubernetes
Kubernetes là gì?
Kubernetes là một hệ thống nguồn mở xử lý công việc lên lịch các vùng chứa trên một cụm máy tính và quản lý khối lượng công việc để đảm bảo chúng chạy như ý muốn của người dùng. Là đứa con tinh thần của Google, nó cung cấp một cộng đồng tuyệt vời và hoạt động xuất sắc với tất cả các nhà cung cấp đám mây để trở thành một giải pháp quản lý nhiều vùng chứa.
Kubernetes là một nền tảng mã nguồn mở, khả chuyển, có thể mở rộng để quản lý các ứng dụng được đóng gói và các service, giúp thuận lợi trong việc cấu hình và tự động hoá việc triển khai ứng dụng. Kubernetes được thiết kế và phát triển bởi Google, kết hợp với những ý tưởng tốt nhất từ cộng đồng.
Kubernetes cho phép bạn chạy các ứng dụng trên nhiều máy tính, máy ảo hoặc container mà không cần quan tâm đến chi tiết về cơ sở hạ tầng. Kubernetes sử dụng các khái niệm như pod, service, deployment, node và cluster để tổ chức và điều phối các ứng dụng
Tính năng Kubernetes
Automated Scheduling: Kubernetes cung cấp bộ lập lịch nâng cao để khởi chạy bộ chứa trên các nút cụm dựa trên yêu cầu tài nguyên của chúng và các ràng buộc khác mà không làm mất đi tính khả dụng.
Self Healing Capabilities: Kubernetes cho phép thay thế và sắp xếp lại các vùng chứa khi các nút chết. Nó cũng loại bỏ các vùng chứa không phản hồi kiểm tra tình trạng do người dùng xác định và không quảng cáo chúng cho khách hàng cho đến khi chúng sẵn sàng phân phát.
Automated rollouts & rollback: Kubernetes triển khai các thay đổi đối với ứng dụng hoặc cấu hình của ứng dụng trong khi theo dõi tình trạng của ứng dụng để đảm bảo ứng dụng không giết chết tất cả các phiên bản của bạn cùng một lúc. Nếu xảy ra sự cố, với Kubernetes, bạn có thể khôi phục thay đổi.
Horizontal Scaling & Load Balancing: Kubernetes có thể mở rộng quy mô và thu nhỏ ứng dụng theo yêu cầu bằng một lệnh đơn giản, sử dụng giao diện người dùng hoặc tự động dựa trên mức sử dụng CPU.
Kiến trúc Kubernetes:
Kubernetes Architecture có các thành phần chính sau:
- Master nodes
- Worker/Slave nodes
Tôi sẽ thảo luận từng cái một. Vì vậy, ban đầu hãy bắt đầu bằng cách hiểu Master Node.
Master Node.
Nút chính chịu trách nhiệm quản lý cụm Kubernetes. Nó chủ yếu là điểm vào cho tất cả các nhiệm vụ quản trị. Có thể có nhiều nút chính trong cụm để kiểm tra khả năng chịu lỗi.
Như bạn có thể thấy trong sơ đồ trên, nút chính có nhiều thành phần khác nhau như Máy chủ API, Trình quản lý bộ điều khiển, Bộ lập lịch biểu và ETCD.
API Server: Máy chủ API là điểm vào cho tất cả các lệnh REST được sử dụng để kiểm soát cụm.
Controller Manager: Là một daemon điều chỉnh cụm Kubernetes và quản lý các vòng điều khiển không kết thúc khác nhau.
Scheduler: Bộ lập lịch lên lịch các nhiệm vụ cho các nút nô lệ. Nó lưu trữ thông tin sử dụng tài nguyên cho mỗi nút nô lệ.
ETCD: ETCD là một kho lưu trữ key-value trị nhất quán, phân tán và đơn giản. Nó chủ yếu được sử dụng để khám phá dịch vụ và cấu hình được chia sẻ.
Worker/Slave nodes
Các nút công nhân chứa tất cả các dịch vụ cần thiết để quản lý mạng giữa các vùng chứa, giao tiếp với nút chính và gán tài nguyên cho các vùng chứa đã lên lịch.
Như bạn có thể thấy trong sơ đồ trên, worker node có nhiều thành phần khác nhau như Docker Container, Kubelet, Kube-proxy và Pods.
Docker Container: Docker chạy trên mỗi nút worker và chạy các nhóm được định cấu hình
Kubelet: Kubelet nhận cấu hình của Pod từ máy chủ API và đảm bảo rằng các vùng chứa được mô tả đang hoạt động.
Kube-proxy: Kube-proxy hoạt động như một proxy mạng và bộ cân bằng tải cho một dịch vụ trên một worker node
Pods: Nhóm là một hoặc nhiều vùng chứa chạy cùng nhau một cách hợp lý trên các nút.
Nếu bạn muốn có giải thích chi tiết về tất cả các thành phần của Kiến trúc Kubernetes, thì bạn có thể tham khảo blog của chúng tôi về Kiến trúc Kubernetes.
Nghiên cứu trường hợp Kubernetes
Yahoo!JAPAN là nhà cung cấp dịch vụ web có trụ sở tại Sunnyvale, California. Khi công ty nhắm đến ảo hóa phần cứng, công ty đã bắt đầu sử dụng OpenStack vào năm 2012. Môi trường nội bộ của họ thay đổi rất nhanh. Tuy nhiên, do sự tiến bộ của công nghệ đám mây và vùng chứa, công ty muốn có khả năng khởi chạy dịch vụ trên nhiều nền tảng khác nhau.
Problem: Làm cách nào để tạo images cho tất cả các nền tảng bắt buộc từ một mã ứng dụng và triển khai các images đó trên từng nền tảng?
Để bạn hiểu rõ hơn, hãy tham khảo hình ảnh bên dưới. Khi mã được thay đổi tại sổ đăng ký mã, thì hình ảnh kim loại trần, bộ chứa Docker và hình ảnh VM được tạo bởi các công cụ tích hợp liên tục, được đẩy vào sổ đăng ký hình ảnh, sau đó được triển khai cho từng nền tảng cơ sở hạ tầng.
Bây giờ, chúng ta hãy tập trung vào quy trình làm việc của bộ chứa để hiểu cách họ sử dụng Kubernetes làm nền tảng triển khai. Tham khảo hình ảnh bên dưới để xem trước kiến trúc nền tảng.
Các phiên bản OpenStack được sử dụng, với Docker, Kubernetes, Calico, v.v. trên đó để thực hiện các hoạt động khác nhau như Mạng vùng chứa, Sổ đăng ký vùng chứa, v.v. Loại chuỗi công cụ này đảm bảo rằng tất cả các yếu tố để triển khai sản xuất như nhiều bên thuê, xác thực, lưu trữ, kết nối mạng, khám phá dịch vụ đều được xem xét.
Đó là cách mọi người, Yahoo! JAPAN đã xây dựng chuỗi công cụ tự động hóa để triển khai mã “một cú nhấp chuột” cho Kubernetes chạy trên OpenStack, với sự trợ giúp của Google và Solinea.
Quy trình hoạt động của Kubernetes có thể được mô tả như sau:
Bạn định nghĩa các ứng dụng của bạn và các tài nguyên cần thiết bằng các file YAML hoặc sử dụng các công cụ như Helm để tạo ra các file này.
Bạn sử dụng lệnh kubectl để gửi các file YAML đến Kubernetes Master, nơi nó sẽ xử lý và lưu trữ các thông tin về các ứng dụng và tài nguyên của bạn.
Kubernetes Master sẽ giao tiếp với các Kubernetes Node, những máy tính thực thi các ứng dụng, để phân bổ và điều phối các Pod, những đơn vị cơ bản chứa một hoặc nhiều container.
Các Pod sẽ chạy các container bằng cách sử dụng một container runtime như Docker hoặc rkt. Các container sẽ lấy image từ một registry như Docker Hub hoặc Quay.io và chạy ứng dụng bên trong.
Kubernetes sẽ theo dõi trạng thái của các Pod và container, và tự động phục hồi khi có sự cố xảy ra. Kubernetes cũng có thể tự động scale up hoặc scale down số lượng Pod theo nhu cầu của ứng dụng.
Bạn có thể sử dụng các service để kết nối các Pod với nhau hoặc với bên ngoài. Các service là một tập hợp các quy tắc để định tuyến lưu lượng mạng đến các Pod. Bạn có thể sử dụng các loại service khác nhau như ClusterIP, NodePort, LoadBalancer hoặc Ingress để kiểm soát cách thức truy cập vào các Pod