Giới thiệu
Đây là bài viết thứ 3 trong series Kubernetes from zero to hero của mình. Trong hai bài viết trước mình đã giới thiệu tổng quan về Kubernetes và một số khái niệm hay component quan trọng của nó. Bạn nào quan tâm có thể tìm lại ở mụa servies ở phía bên phải. Trong bài viết này mình và các bạn sẽ tìm hiểu về minikube, kubectl, một số command chính của Kubernetes và cùng setup chúng ở dưới local.
Minikube
Ta sẽ đi vào một ví dụ về production cluster setup. Giả sử trên production ta có rất nhiều master node và rất nhiều worker node. Nếu ta muốn test ứng dụng ở môi trường local hoặc thử deploy một application mới lên cluster được setup như production thì ta có thể không có đủ resource
như memory, CPUm, ... Lúc này ta sẽ cần đến minikube.
Ta có thể hiển đơn giản minikube là cluster bao gồm một master processes và một worker processes chạy trên cùng một node. Minikube sẽ tạo một virtual box trong máy và node như hình bên trên sẽ được chạy trong virtual box. Hay đơn giản là minukube là một node K8s cluster chạy trong virtual box ở máy tính local dùng cho mục đích kieemr thử (testing).
Kubectl
Khi ta setup một cluster hoặc mini cluster ở máy local ta sẽ cần cách đẻ tương tác với cluster ví dụ như tạo cấu hình, pod, component, ... Lúc này ta sẽ cần kubectl.
Kubectl là một command line tool cho K8s cluster. Kubectl có thể tương tác được với cluster vì trong master process cung cấp cho ta Api server là entry point của K8s cluster. Vì vậy khi muốn làm bất cứ thứ gì với Kubernetes như cấu hình, tạo bất kỳ component nào trong K8s, ... ta cần tương tác với API server. Ta có thể tương tác với nó bằng nhiều cách khác nhau qua UI như dashboard, K8s API hoặc command line tool kubectl. Với kubectl ta có thể làm bất cứ thứ gì với K8s. Ta có thể dùng nó để tương tác với bất cứ K8s cluster setup nào (minikube cluster, cloud cluster, ...).
Cài đặt
Kubectl
Việc cài kubectl khá đơn giản và cũng có đầy đủ hướng dẫn trên trang chủ của K8s nên trong phần này mình sẽ chỉ hướng dẫn các bạn cài trên Ubuntu. Đối với những hệ điều hành khác các bạn có thể xem ở đây. Ở đây mình sẽ dùng curl
để tiến hành tải package của kubectl về máy bạn chưa có curl
thì tiến hành cài đặt nó trước.
- Vào terminal chạy câu lệnh:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
Đề cài đặt một version nào đó của kubectl ta có thể tiến hành thay thế phần
$(curl -L -s https://dl.k8s.io/release/stable.txt)
trong câu lệnh với version cụ thể.Ví dụ để tải version v1.24.0 ta viết như sau:
curl -LO https://dl.k8s.io/release/v1.24.0/bin/linux/amd64/kubectl
- Để kiểm tra binary t làm như sau:
- Tải kubectl checksum file với câu lệnh:
curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
- Tiến hành kiểm tra kubectl binary với checksum file:
echo "$(cat kubectl.sha256) kubectl" | sha256sum --check
Nếu kết quả ở terminal hiện ra dòng chữ kubectl: OK
thì là đúng. Còn nếu kiểm tra không thành công thì ta sẽ nhận được output.
kubectl: FAILED
sha256sum: WARNING: 1 computed checksum did NOT match
Lưu ý là khi kiểm tra thì ta cần tải checksum file cùng version với package.
- Cài đặt kubectl:
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
- Sau khi chạy xong ta có thể kiểm tra xem cài đặt thành công hay chưa bằng câu lệnh:
kubectl version --client
Output như sau là thành công:
Hoặc bạn cũng có thể gõ:
kubectl
Minikube
Tương tự như trên trong phần này mình sẽ hướng dẫn cài đặt trên hệ điều hành Ubuntu. Đối với những hệ điều hành khác các bạn có thể tham khảo ở đây.
- Vào terminal chạy câu lệnh:
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \
&& chmod +x minikube
- Thêm minikube vào biến môi trường:
sudo mkdir -p /usr/local/bin/
sudo install minikube /usr/local/bin/
- Để kiểm tra xem đã cài đặt thành công hay chưa bạn tiến hành gõ câu lệnh:
minikube
Output ta sẽ có như sau:
Như bạn có thể thấy hình trên là một số command của minikube. Ta có thể sử dụng command start
để tạo cluster, stop
, delete
để dừng hoặc xóa cluster và rất nhiều command khác. Mình sẽ thử tiến hành khởi tạo và chạy cluster vói command start.
Cú pháp:
minikube start --vm-driver=<hypervisor>
Bạn có thể thêm flag --vm-driver
để tùy chọn hypervisor cho minikube cluster
. Sau khi chạy command ta có kết quả.
Minikube đã có sẵn docker pre-installed
nên ta có thể tạo docker container bên trong cluster. Bây giờ ta đã có thể dùng command của kubectl để tương tác với K8s cluster. Ta thử chạy câu lệnh sau:
// Xem trạng thái của các nodes của cluster
kubectl get nodes
Ta có thể thấy trên hình minikube
nodes có trạng thái Ready
và vì chỉ có một node nên nó sẽ chạy trong Master process
. Ngoài ra ta cũng có thể lấy ra trạng thái của minikube bằng command:
minikube status
Một số command cơ bản Kubernetes
Trong phần này mình sẽ giới thiệu với các bạn những command dùng để Create
và debug
pod trong minikube cluster. CRUD deployment command. Xem status
của những K8s component khác nhau.
CRUD commands
kubectl get nodes
: như bên trên mình đã giải thích command này dùng đề xem trại thái của các nodeskubectl get pod
: danh sách tất cả pod của namespacekubectl get services
: danh sách tât cả service của namespace
Tương tự như vậy ta cũng có thể lấy ra component khác với command kubectl get
.
kubectl create deployment <NAME> --image=image [--dry-run] [options]
: dùng để tạo deployment. Vì deployment là bản vẽ (blueprint) của pod nên tạo depoyment chính là tạo pod. Cấu hình cơ bản nhất của pod là tên và image của nó.
Như trong hình bạn có thể thấy ta có deployment là nginx-deploy và pod với trạng thái là Running
. Giờ ta thử chạy command kubectl get replicateset
ta có thể thấy state
của nó. Để ý thấy phần tên replicateset có phần prefix là tên của deployment cộng với hash id và tên của pod thì prefix của replicateset cộng với hash id của pod.
=> Replicateset quản lý replicate
của pod. Với command trên ta chỉ tiến hành tạo một pod và một replicate nếu ta muốn tạo nhiều replicate hơn ta có thể thêm vào options
.
kubectl edit deployment <NAME>
: dùng để sửa deployment. Khi chạy lệnh này thì file cấu hình của deployment sẽ được hiện ra để ta có thể sửa.
Phần chi tiết về YAML config file của K8s mình sẽ giải thích ở bài viết khác, ở đây bạn hoàn toàn có thể sửa cấu hình của depoyment theo ý mình rồi tiến hành lưu file. Sau khi lưu file thì K8s sẽ tiến hành xóa pod cũ và khởi tạo pod mới với đúng với cầu hình của deployment vừa sửa.
kubectl delete deployment <NAME>
: dùng để xóa deployment(pod và replicateset cũng bị xóa theo).kubectl apply -f <FILE_NAME>
: nếu ta có YAML config file thì ta có thể tiến hành tạoresource
trong K8s bằng command này. Mọi cấu hình trong file sẽ được K8s áp dụng. K8s sẽ biết khi nào cần tạo mới hoặc cập nhậtresource
khi chạy command này.kubectl delete -f <FILE_NAME>
: tương tự như command trên nhưng ta dùng để xóa pod vớitype
vàname
được cấu hính trong file.
Debugging pods command
kubectl logs <POD_NAME>
: xem logs của podkubectl describe pod <POD_NAME>
: ta có xem thêm nhiều thông tin khác của pod bằng lệnh này.kubectl exec -it <POD_NAME> -- bin/bash
: ta sẽ inject conatiner của pod để tiến hành chạy command trong đó.
Lời kết
Đây đã là bài viết thứ 3 trong series Kubernetes - from zero to hero của mình. Trong bài viết này mình đã giới thiệu cho các bạn về monikube, kubectl, một số command cơ bản và cách cài đặt chúng ở dưới local. Mình hy vọng các bạn có thế hiểu và thực hành được ở dưới máy cá nhân vì phần này cũng không có kiến thức nào quá mới và khó. Nếu trong bài viết có phần nào chưa được đúng và đầy đủ mong được các bạn góp ý để bài viết được đầy đủ hơn. Cảm ơn các bạn đã theo dõi đến hết bài viết ❤️.