Trên môi trường Local
1. Cài đặt QEMU và socket_vmnet
# Cài đặt qemu brew install qemu # Cài đặt socket_vmnet brew install socket_vmnet brew tap homebrew/services HOMEBREW=$(which brew) && sudo services start socket_vmnet
2. Thiết lập minikube
Cài đặt qua Homebrew:
brew install minikube
Khởi chạy k8s trên local với driver QEMU:
minikube start --driver=qemu --network=socket_vmnet --alsologtostderr
⚠️ Lưu ý: Việc sử dụng driver qemu (có hoặc không có socket_vmnet) có thể gây lỗi khi cài đặt add-on ingress-controller. Tuy nhiên, khởi chạy minikube với driver docker thì không gặp vấn đề này. Hiện tại vẫn chưa có cách khắc phục cụ thể cho lỗi: ...failed to register layer: lsetxattr security.capability....
Khởi chạy k8s trên local với driver Docker:
minikube start --driver=docker --alsologtostderr
3. Thêm Image vào minikube
Sau khi build xong docker image của ứng dụng, hãy chạy lệnh dưới đây để đẩy image vào môi trường minikube:
docker save sample-app | (eval $(minikube docker-env) && docker load)
4. Triển khai Deployment
Mẫu file: sample-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: sample-app
spec:
selector:
matchLabels:
app: sample-app
replicas: 2
template:
metadata:
labels:
app: sample-app
spec:
containers:
- name: sample-app
image: sample-app:latest
imagePullPolicy: Never # Quan trọng: để k8s dùng image local vừa load
ports:
- containerPort: 20080
protocol: TCP
Cách thực hiện:
kubectl apply -f [đường-dẫn-file/sample-deployment.yml]
Kết quả trả về sẽ có dòng:
deployment.apps/sample-app created.Kiểm tra trạng thái các Pod:
# Xem trạng thái pod kubectl get pods -w -n default # Xem log của pod kubectl logs --selector app=sample-app -n default
5. Triển khai Service
Mẫu file: sample-service.yml
apiVersion: v1
kind: Service
metadata:
name: sample-app
spec:
selector:
app: sample-app
ports:
- name: webview
appProtocol: http
protocol: TCP
port: 20080
targetPort: 20080
- name: weview-health
protocol: TCP
port: 20081
targetPort: 20081
Cách thực hiện:
kubectl apply -f [đường-dẫn-file/sample-service.yml]
6. Cấu hình Ingress Controller
Kích hoạt Ingress trên minikube:
minikube addons enable ingress
Kiểm tra trạng thái Ingress Controller:
kubectl get pods -w -n ingress-nginx
Triển khai cấu hình Ingress của bạn:
Mẫu file: sample-ingress.yml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sample-ingress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /sample/view/
pathType: Prefix
backend:
service:
name: sample-app
port:
number: 20080
Cách thực hiện:
kubectl apply -f [đường-dẫn-file/sample-ingress.yml]
7. Truy cập vào NGINX của Ingress Controller
Vì minikube sử dụng mạng NAT và host-only, bạn không thể kết nối trực tiếp từ máy thật (host) đến Ingress trên minikube. Chúng ta cần dùng Port-forwarding hoặc Tunneling.
Cách 1: Port-forwarding
kubectl port-forward [tên-pod-ingress-controller] [port-máy-host]:80
Cách 2: Tunneling (Khuyên dùng cho minikube)
minikube tunnel
Kiểm tra kết nối:
Nếu dùng Tunnel:
curl -v localhost:80/[đường-dẫn-api]Nếu dùng Port-forward:
curl -v localhost:[port-máy-host]/[đường-dẫn-api]8. Xử lý sự cố (Troubleshooting)
Nếu gặp lỗi khi khởi động minikube, hãy dừng tiến trình và chạy các lệnh dọn dẹp sau:
minikube delete --all --purge docker system prune -a
Các lệnh hữu ích khác
- Kết nối môi trường Docker của minikube:
eval $(minikube -p minikube docker-env) - Xóa toàn bộ Pod:
kubectl delete $(kubectl get po -o=name) - Thiết lập Alias (Bí danh): Thêm vào
file .zshrchoặc.bashrc:
alias mkube="minikube" alias kubec="kubectl" alias mkubec="minikube kubectl"
Nguồn bài viết ryukato.github.io