1. Giới Thiệu
Minikube là một công cụ mã nguồn mở giúp bạn chạy Kubernetes trên máy tính cá nhân một cách dễ dàng. Bài hướng dẫn này sẽ chỉ dẫn bạn cách triển khai một ứng dụng mẫu trên Kubernetes sử dụng Minikube. Ứng dụng mẫu này sử dụng container image của NGINX để phản hồi lại tất cả các yêu cầu.
2. Mục Tiêu
- Triển khai một ứng dụng mẫu trên Minikube.
- Chạy ứng dụng.
- Xem logs của ứng dụng.
3. Trước Khi Bắt Đầu
Bài hướng dẫn này giả định rằng bạn đã cài đặt Minikube. Xem Step 1 trong hướng dẫn minikube start để biết cách cài đặt.
Lưu Ý:
- Chỉ thực hiện các hướng dẫn trong Step 1, Installation. Các bước còn lại đã được bao phủ trên trang này.
- Bạn cũng cần cài đặt kubectl. Xem Install tools để biết hướng dẫn cài đặt.
4. Tạo Cluster với Minikube
Sử dụng lệnh sau để khởi động một Kubernetes cluster với Minikube:
minikube start
5. Mở Dashboard
Bạn có thể mở Kubernetes Dashboard theo hai cách khác nhau:
5.1. Mở Trình Duyệt
Sau khi chạy lệnh minikube dashboard
, Minikube sẽ tự động mở dashboard trong trình duyệt mặc định của bạn.
5.2. Sao Chép URL
Mở một terminal mới và chạy:
minikube dashboard
Lưu ý rằng lệnh này kích hoạt dashboard addon và mở proxy trong trình duyệt mặc định. Bạn cũng có thể tạo các Kubernetes resources như Deployment và Service trên dashboard.
Lưu Ý:
- Dashboard mặc định chỉ có thể truy cập từ bên trong mạng ảo Kubernetes. Lệnh dashboard tạo một proxy tạm thời để truy cập từ bên ngoài.
- Để dừng proxy, nhấn
Ctrl+C
để thoát quá trình. Dashboard vẫn đang chạy trong cluster và bạn có thể chạy lại lệnhminikube dashboard
để tạo proxy mới.
6. Tạo Deployment
6.1. Tạo Deployment
Pod trong Kubernetes là một nhóm chứa một hoặc nhiều Containers, được liên kết với nhau để quản lý và mạng lưới. Trong hướng dẫn này, Pod chỉ chứa một Container. Deployment kiểm tra sức khỏe của Pod và khởi động lại Container nếu nó kết thúc. Deployments là cách được khuyến nghị để quản lý việc tạo và mở rộng Pods.
Sử dụng lệnh kubectl create
để tạo một Deployment quản lý một Pod chạy Container dựa trên Docker image cung cấp.
kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.39 -- /agnhost netexec --http-port=8080
6.2. Xem Deployment và Pod
Xem Deployment:
kubectl get deployments
Kết quả tương tự như:
NAME READY UP-TO-DATE AVAILABLE AGE
hello-node 1/1 1 1 1m
Có thể mất một vài giây để Pod trở nên sẵn sàng. Nếu bạn thấy “0/1”, hãy thử lại sau vài giây.
Xem Pod:
kubectl get pods
Kết quả tương tự như:
NAME READY STATUS RESTARTS AGE
hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m
6.3. Xem Sự Kiện Cluster và Cấu Hình
Xem các sự kiện trong cluster:
kubectl get events
Xem cấu hình kubectl
:
kubectl config view
6.4. Xem Logs Ứng Dụng
Xem logs cho một container trong Pod (thay thế tên Pod bằng tên bạn nhận được từ lệnh kubectl get pods
):
kubectl logs hello-node-5f76cf6ccf-br9b5
Kết quả tương tự như:
I0911 09:19:26.677397 1 log.go:195] Started HTTP server on port 8080
I0911 09:19:26.677586 1 log.go:195] Started UDP server on port 8081
Lưu Ý:
- Thay thế
hello-node-5f76cf6ccf-br9b5
trong lệnhkubectl logs
bằng tên Pod từ lệnhkubectl get pods
.
7. Tạo Service
Mặc định, Pod chỉ có thể truy cập bằng địa chỉ IP nội bộ trong cluster. Để làm cho Container hello-node
có thể truy cập từ bên ngoài mạng ảo Kubernetes, bạn cần expose Pod dưới dạng Service.
Cảnh Báo:
- Container
agnhost
có endpoint/shell
, hữu ích cho việc debug nhưng nguy hiểm khi expose ra internet. Không nên chạy trên cluster công cộng hoặc cluster production.
Triển khai Service với lệnh kubectl expose
:
kubectl expose deployment hello-node --type=LoadBalancer --port=8080
- Tham số
--type=LoadBalancer
chỉ định rằng bạn muốn expose Service ra ngoài cluster.
Ứng dụng bên trong container chỉ lắng nghe trên TCP port 8080. Nếu bạn expose một port khác, client không thể kết nối đến port đó.
Xem Service đã tạo:
kubectl get services
Kết quả tương tự như:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-node LoadBalancer 10.108.144.78 <pending> 8080:30369/TCP 21s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23m
Trên các nhà cung cấp đám mây hỗ trợ load balancer, một địa chỉ IP bên ngoài sẽ được cấp để truy cập Service. Trên Minikube, kiểu LoadBalancer
làm cho Service có thể truy cập thông qua lệnh minikube service
.
Chạy lệnh sau:
minikube service hello-node
Lệnh này sẽ mở một cửa sổ trình duyệt hiển thị ứng dụng của bạn và phản hồi từ ứng dụng.
8. Kích Hoạt Addons
Minikube bao gồm một bộ các addons tích hợp sẵn có thể được kích hoạt, vô hiệu hóa và mở trong môi trường Kubernetes địa phương.
8.1. Liệt Kê Addons
Liệt kê các addons hiện tại được hỗ trợ:
minikube addons list
Kết quả tương tự như:
addon-manager: enabled
dashboard: enabled
default-storageclass: enabled
efk: disabled
freshpod: disabled
gvisor: disabled
helm-tiller: disabled
ingress: disabled
ingress-dns: disabled
logviewer: disabled
metrics-server: disabled
nvidia-driver-installer: disabled
nvidia-gpu-device-plugin: disabled
registry: disabled
registry-creds: disabled
storage-provisioner: enabled
storage-provisioner-gluster: disabled
8.2. Kích Hoạt Addon
Kích hoạt một addon, ví dụ metrics-server:
minikube addons enable metrics-server
Kết quả tương tự như:
The 'metrics-server' addon is enabled
8.3. Xem Pod và Service Sau Khi Kích Hoạt Addon
Xem các Pod và Service đã được tạo khi kích hoạt addon:
kubectl get pod,svc -n kube-system
Kết quả tương tự như:
NAME READY STATUS RESTARTS AGE
pod/coredns-5644d7b6d9-mh9ll 1/1 Running 0 34m
pod/coredns-5644d7b6d9-pqd2t 1/1 Running 0 34m
pod/metrics-server-67fb648c5 1/1 Running 0 26s
pod/etcd-minikube 1/1 Running 0 34m
pod/influxdb-grafana-b29w8 2/2 Running 0 26s
pod/kube-addon-manager-minikube 1/1 Running 0 34m
pod/kube-apiserver-minikube 1/1 Running 0 34m
pod/kube-controller-manager-minikube 1/1 Running 0 34m
pod/kube-proxy-rnlps 1/1 Running 0 34m
pod/kube-scheduler-minikube 1/1 Running 0 34m
pod/storage-provisioner 1/1 Running 0 34m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/metrics-server ClusterIP 10.96.241.45 <none> 80/TCP 26s
service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 34m
service/monitoring-grafana NodePort 10.99.24.54 <none> 80:30002/TCP 26s
service/monitoring-influxdb ClusterIP 10.111.169.94 <none> 8083/TCP,8086/TCP 26s
Xem output từ metrics-server:
kubectl top pods
Kết quả tương tự như:
NAME CPU(cores) MEMORY(bytes)
hello-node-ccf4b9788-4jn97 1m 6Mi
Lưu Ý:
- Nếu bạn thấy thông báo
error: Metrics API not available
, hãy đợi một chút và thử lại.
Vô hiệu hóa metrics-server:
minikube addons disable metrics-server
Kết quả tương tự như:
metrics-server was successfully disabled
9. Dọn Dẹp
Bây giờ bạn có thể dọn dẹp các tài nguyên đã tạo trong cluster:
kubectl delete service hello-node
kubectl delete deployment hello-node
Dừng cluster Minikube:
minikube stop
Tùy chọn, xóa VM của Minikube:
minikube delete
Nếu bạn muốn sử dụng Minikube lại để học thêm về Kubernetes, không cần xóa nó.
10. Kết Luận
Bài viết này đã bao quát các khía cạnh cơ bản để khởi động và vận hành một cluster Minikube. Bạn hiện đã sẵn sàng để triển khai các ứng dụng trên Kubernetes.
11. Tiếp Theo
- Tutorial to deploy your first app on Kubernetes with kubectl: Hướng dẫn triển khai ứng dụng đầu tiên trên Kubernetes bằng kubectl.
- Learn more about Deployment objects: Tìm hiểu thêm về các đối tượng Deployment.
- Learn more about Deploying applications: Tìm hiểu thêm về cách triển khai ứng dụng.
- Learn more about Service objects: Tìm hiểu thêm về các đối tượng Service.
12. Tài Nguyên Tham Khảo
- Minikube Documentation
- Kubernetes Documentation – kubectl
- Kubernetes Documentation – Deployments
- Kubernetes Documentation – Services
- Kubernetes Documentation – Dashboard
- Prometheus Documentation
- Grafana Documentation
- Helm Documentation
- The Kubernetes Book
- Kubernetes Up & Running