Minikube

Minikube Là Gì

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ư DeploymentService 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ệnh minikube 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ệnh kubectl logs bằng tên Pod từ lệnh kubectl 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

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *