Chuyển tới nội dung chính

kube-apiserver

1. kube-apiserver là gì?​

  • Là thành phần cốt lõi của Control Plane, được ví như "cánh cổng chính" (front door) – mọi yêu cầu từ trong lẫn ngoài cluster đều đi qua đây.
  • Là thành phần duy nhất kết nối trực tiếp tới etcd.

2. Khi chạy kubectl get​

  1. Xác thực (Authenticate) – bạn là ai?
  2. Kiểm tra request (Validate) – request có hợp lệ không?
  3. Đọc dữ liệu từ etcd.
  4. Trả kết quả về cho client.

3. Luồng tạo một Pod​

💡 Ghi nhớ

apiserver không chủ động gọi scheduler hay kubelet. Chính scheduler và kubelet liên tục watch apiserver và tự nhận ra có việc mới cho mình.

Pod bị kẹt – hỏng ở bước nào?​

Triệu chứngHỏng ởKiểm tra
kubectl báo connection refusedapiserver chếtcrictl ps -a, crictl logs
Pod Pending, cột NODE là <none>scheduler chết, hoặc không có node phù hợpkubectl get pods -n kube-system, kubectl describe pod
Pod đã có node nhưng kẹt ContainerCreating / ImagePullBackOffkubelet / containerd (sai image, lỗi mạng)kubectl describe pod, journalctl -u kubelet

4. Install / Setup​

Hard way (systemd)​

ExecStart=/usr/local/bin/kube-apiserver \
--advertise-address=192.168.81.101 \
--secure-port=6443 \
--authorization-mode=Node,RBAC \
--enable-admission-plugins=NamespaceLifecycle,NodeRestriction,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota \
--client-ca-file=/var/lib/kubernetes/ca.crt \
--tls-cert-file=/var/lib/kubernetes/kubernetes.crt \
--tls-private-key-file=/var/lib/kubernetes/kubernetes.key \
--etcd-servers=https://127.0.0.1:2379 \
--etcd-cafile=/var/lib/kubernetes/ca.crt \
--etcd-certfile=/var/lib/kubernetes/kubernetes.crt \
--etcd-keyfile=/var/lib/kubernetes/kubernetes.key \
--kubelet-client-certificate=/var/lib/kubernetes/kubernetes.crt \
--kubelet-client-key=/var/lib/kubernetes/kubernetes.key \
--service-cluster-ip-range=10.32.0.0/24 \
--service-node-port-range=30000-32767 \
--v=2
Nhóm optionVí dụDùng để
Kết nối etcd--etcd-servers, --etcd-cafile/certfile/keyfileĐọc/ghi dữ liệu cluster
Kết nối kubelet--kubelet-client-certificate/keyGọi kubelet (logs, exec)
TLS của chính nó--tls-cert-file, --client-ca-filePhục vụ HTTPS, xác thực client
Mạng Service--service-cluster-ip-range, --service-node-port-rangeCấp ClusterIP và NodePort
Phân quyền--authorization-mode=Node,RBACAi được làm gì

kubeadm (static pod)​

cat /etc/kubernetes/manifests/kube-apiserver.yaml

Trích các dòng quan trọng:

spec:
containers:
- command:
- kube-apiserver
- --advertise-address=172.16.177.134
- --etcd-servers=https://127.0.0.1:2379
- --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt
- --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt
- --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key
- --secure-port=6443
- --service-cluster-ip-range=10.96.0.0/12
- --tls-cert-file=/etc/kubernetes/pki/apiserver.crt
- --tls-private-key-file=/etc/kubernetes/pki/apiserver.key
image: registry.k8s.io/kube-apiserver:v1.30.14
hostNetwork: true
priorityClassName: system-node-critical

Cũng có thể xem option đang chạy bằng ps -aux | grep kube-apiserver.

5. Khi kube-apiserver chết​

apiserver chết thì kubectl không dùng được, phải debug ngay trên node:

sudo crictl ps -a | grep kube-apiserver
sudo crictl logs <container-id>
sudo journalctl -u kubelet | tail -50