Cài Đặt minikube + kubectl, Cluster Đầu Tiên

K
Kai··4 min read

Lý thuyết đủ rồi — bài này ta dựng cluster của chính mình. Hai công cụ cần cài: kubectl (client để ra lệnh) và minikube (dựng cluster). Xong là có ngay một Kubernetes thật để nghịch.

Cần gì trước

minikube cần một "driver" để dựng cluster — phổ biến và nhẹ nhất là Docker (cluster chạy trong một container Docker). Nếu bạn đã theo series Docker thì có sẵn rồi. Ngoài Docker, minikube còn hỗ trợ driver VM (HyperKit, VirtualBox, QEMU...), nhưng Docker là lựa chọn gọn nhất để học.

Cài kubectl và minikube

Trên macOS dùng Homebrew:

brew install kubectl minikube

(Linux/Windows: xem trang cài đặt chính thức tại kubernetes.io — có gói cho apt/dnf, hoặc tải binary trực tiếp.)

Kiểm tra đã cài được:

minikube version
kubectl version --client
minikube version: v1.38.1
Client Version: v1.35.2

kubectlclient: nó không tự làm gì, chỉ gửi lệnh tới API server của cluster (nhớ Bài 1 — mọi thứ đi qua API server). Nên cài kubectl xong mà chưa có cluster thì nó chưa nói chuyện với ai cả.

Khởi động cluster

minikube start --driver=docker

Lần đầu sẽ hơi lâu vì minikube tải image nền. Output rút gọn:

* minikube v1.38.1 on Darwin
* Using the docker driver based on user configuration
* Starting "minikube" primary control-plane node in "minikube" cluster
* Pulling base image ...
* Configuring bridge CNI (Container Networking Interface) ...
* Verifying Kubernetes components...
* Enabled addons: storage-provisioner, default-storageclass
* Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

Dòng cuối quan trọng: minikube tự cấu hình kubectl trỏ vào cluster vừa tạo. Bạn không phải khai báo gì thêm.

Kiểm tra cluster sống:

minikube status
kubectl get nodes
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running

NAME       STATUS   ROLES           AGE     VERSION
minikube   Ready    control-plane   2m53s   v1.35.1

Một node tên minikube, trạng thái Ready, vai trò control-plane. Như đã nói ở Bài 1: minikube một node nên node đó kiêm cả hai vai.

kubeconfig và context: kubectl biết nói chuyện với cluster nào

Làm sao kubectl biết gửi lệnh tới đâu? Qua file kubeconfig (mặc định ~/.kube/config). File này chứa danh sách cluster, thông tin xác thực, và các context — mỗi context là một bộ ba (cluster + user + namespace). minikube start đã thêm một context tên minikube và đặt nó làm mặc định.

kubectl config current-context
minikube

Đây là chi tiết dễ vấp trong thực tế: nếu máy bạn từng kết nối cluster khác (ví dụ EKS ở công ty), kubectl có thể đang trỏ nhầm cluster. Luôn kiểm tra current-context trước khi gõ lệnh, và chuyển bằng:

kubectl config use-context minikube

Một mẹo nhỏ: lệnh kubectl khá dài, nhiều người đặt alias k=kubectl. Trong series mình viết đầy đủ kubectl cho rõ.

Pod đầu tiên: "hello world"

Đủ thủ tục — chạy thử cái gì đó. Lệnh kubectl run tạo nhanh một pod (ta sẽ hiểu pod kỹ ở Bài 3):

kubectl run hello-nginx --image=nginx:alpine
pod/hello-nginx created

Xem nó:

kubectl get pods -o wide
NAME          READY   STATUS    RESTARTS   AGE   IP           NODE       NOMINATED NODE
hello-nginx   1/1     Running   0          1s    10.244.0.4   minikube   <none>

Vài giây đầu bạn có thể thấy STATUSContainerCreating (đang kéo image, dựng container) rồi chuyển sang Running. Cột READY 1/1 nghĩa là 1/1 container trong pod đã sẵn sàng, và pod được gán IP nội bộ 10.244.0.4 trên node minikube. Toàn bộ chuỗi Bài 1 vừa diễn ra: apiserver ghi xuống etcd → scheduler chọn node → kubelet khởi container.

Dọn dẹp pod thử:

kubectl delete pod hello-nginx
pod "hello-nginx" deleted from default namespace

Vài lệnh minikube tiện dùng

minikube dashboard      # mở giao diện web quản lý cluster (Bài 13)
minikube addons list    # liệt kê addon (ingress, metrics-server...) — bật khi cần
minikube ip             # IP của cluster
minikube stop           # tắt cluster (giữ nguyên dữ liệu, bật lại nhanh)
minikube delete         # xóa sạch cluster

stop khác delete: stop chỉ tắt máy ảo/container (bật lại bằng start rất nhanh, giữ nguyên mọi thứ đã tạo); delete xóa toàn bộ. Khi học xong cả series, một lệnh minikube delete là máy bạn sạch như chưa có gì.

Tổng kết

Cài kubectl (client ra lệnh) và minikube (dựng cluster), rồi minikube start --driver=docker là có một cluster Kubernetes thật một node — minikube tự cấu hình kubectl trỏ vào đó. kubectl định tuyến lệnh qua kubeconfig/context, nên luôn kiểm current-context (đặc biệt khi máy có nhiều cluster). kubectl run tạo nhanh pod đầu tiên, kubectl get pods để xem, kubectl delete để dọn. minikube stop tạm tắt, minikube delete xóa sạch.

Ta vừa chạy một pod mà chưa thật sự hiểu nó là gì. Bài 3 mổ xẻ Pod — đơn vị nhỏ nhất và là khái niệm bạn sẽ gặp mỗi ngày trong Kubernetes.