05.kube api server
1. kube-api-server - "Cổng Giao tiếp" Chính của Kubernetes 🚪¶
kube-api-server là thành phần quản lý chính và là "cổng vào" duy nhất của cụm Kubernetes. Mọi tương tác, từ người dùng cho đến các thành phần khác trong cụm, đều phải đi qua nó.
- Khi bạn chạy một lệnh
kubectl, thực chấtkubectlđang gửi một yêu cầu đếnkube-api-server. - Bạn cũng có thể gọi trực tiếp API của nó mà không cần
kubectl. dùng curl post
2. Luồng Hoạt động của kube-api-server¶
Để hiểu rõ vai trò trung tâm của nó, hãy xem qua hai luồng hoạt động chính:
a. Khi bạn đọc dữ liệu (ví dụ: kubectl get pods)¶
- Lệnh
kubectlđược gửi đếnkube-api-server. api-serverxác thực (authenticates) và kiểm tra tính hợp lệ (validates) của yêu cầu.api-servertruy xuất dữ liệu từ kho lưu trữetcd.api-servertrả kết quả về chokubectl.
b. Khi bạn thay đổi cụm (ví dụ: tạo một Pod mới)¶
Đây là lúc vai trò "nhạc trưởng" của api-server thể hiện rõ nhất:
- Yêu cầu tạo Pod được gửi đến
api-server. api-serverxác thực và kiểm tra tính hợp lệ.api-servertạo một đối tượng Pod (chưa được gán cho Node nào) và cập nhật thông tin này vàoetcd. Nó báo lại cho người dùng rằng Pod đã được tạo.kube-scheduler, vốn luôn "lắng nghe"api-server, phát hiện ra có Pod mới chưa được điều phối.schedulertìm một Node phù hợp và báo lại choapi-server.api-servercập nhật thông tin Node được gán vàoetcd.api-servertruyền thông tin này đếnkubelettrên Worker Node tương ứng.kubeletnhận lệnh, tạo Pod trên Node của mình (bằng cách ra lệnh cho Container Runtime Engine) và cập nhật trạng thái của Pod về lại choapi-server.api-servermột lần nữa cập nhật trạng thái cuối cùng này vàoetcd.
Qua luồng trên, bạn có thể thấy
api-serverđứng ở trung tâm của mọi hoạt động, điều phối tất cả các thành phần khác.
3. Trách nhiệm Cốt lõi¶
- Xác thực và kiểm tra tính hợp lệ của mọi yêu cầu.
- Truy xuất và cập nhật dữ liệu trong
etcd. - Điểm quan trọng nhất:
kube-api-serverlà thành phần DUY NHẤT được phép tương tác trực tiếp với kho dữ liệuetcd. Tất cả các thành phần khác (scheduler,controller-manager,kubelet) đều phải thông quaapi-server.
4. Cách kube-api-server được triển khai¶
- "Thủ công" (From Scratch): Bạn sẽ tải file binary của
kube-api-servervà cấu hình nó chạy như một service trên Master Node (ví dụ: file service tại/etc/systemd/system/kube-apiserver.service). - Dùng
kubeadm:kubeadmsẽ triển khaikube-api-serverdưới dạng một static Pod trong namespacekube-system. File định nghĩa của Pod này nằm tại/etc/kubernetes/manifests/.
5. Xem các Tùy chọn Cấu hình¶
kube-api-server có rất nhiều tùy chọn (flag) khi khởi chạy.
- Một tùy chọn cực kỳ quan trọng là
--etcd-servers. Nó chỉ choapi-serverbiết địa chỉ củaetcdcluster để kết nối. - Cách xem các tùy chọn đang chạy:
- Với cụm
kubeadm: Xem file manifest của Podkube-api-servertại/etc/kubernetes/manifests/. - Với cụm cài thủ công: Xem file service tại
/etc/systemd/system/. - Cách chung: Liệt kê các tiến trình đang chạy trên Master Node và tìm
kube-api-server(ví dụ:ps aux | grep kube-apiserver).
6. "Chốt hạ" cho Kỳ thi CKA 📝¶
kube-api-serverlà trung tâm điều phối, là cổng vào của cụm Kubernetes.- Nó là thành phần duy nhất được nói chuyện trực tiếp với
etcd. - Hiểu rõ vai trò của nó trong vòng đời tạo Pod là rất quan trọng.
- Biết cách tìm file cấu hình của
api-servertrong một cụm được dựng bằngkubeadm(nó là một static Pod).
