Kubernetes là gì?
Kubernetes là công cụ quản lý các ứng dụng container hóa chạy trên các công cụ như Docker, các bước để cài đặt Kubernetes trên máy trạm để thực hành và Kubernetes hoàn chỉnh để triển khai thực tế
Kubernetes (k8s) là một hệ thống container orchestration mã nguồn mở. cho phép tự động hóa việc triển khai, quản lý, và mở rộng các ứng dụng container. Kubernetes nó tương tác với các hệ thống cho phép chạy ứng dụng được container hóa và có các API phù hợp giao giao tiếp với Kubernetes.
Lưu ý: Bạn cần học Docker trước khi học Kubernetes
Các thành phần trong Kubernetes
Các thành phần chính của k8s bao gồm:
- Pods: là một nhóm các container dùng chung tài nguyên và network, các container trong một pod có thể duy trì giao tiếp với nhau như trên một máy chủ nhưng vẫn giữ được sự độc lập cần thiết
- Nodes: Nodes là các máy vật lý hoặc ảo mà các pod được triển khai. Các node này chạy Kubernetes và docker, và mỗi máy này là một docker host
- Clusters: Clusters là một tập hợp các nodes được kết nối với nhau, được phân ra thành node master điều khiển các nodes worker
- Services: Là phần network của Kubernetes tách các work definitions khỏi các pod, tự động nhận các yêu cầu dịch vụ tới pod thích hợp, hoặc để Load Balancing giữa nhiều bản sao của Pod, và có thể dùng để dẫn traffic từ người dùng vào ứng dụng (Pod).
- Replicas Controller: Là thành phần quản trị bản sao của Pod, như triển khai và quản lý các pod.
- Deployment: quản lý tài nguyên cấp cho Pod, số lượng nhân bản của Pod, tăng giảm số nhân bản Pod theo yêu cầu
- Secret: Lưu trữ và quản lý các thông tin nhạy cảm như user, password của Cluster (được map vào các Pod để sử dụng)
Dưới đây là một số lợi ích của việc sử dụng k8s:
- Khả năng mở rộng
- Tính linh hoạt
- Tính bảo mật
- Tiết kiệm chi phí
Một số khái niệm cơ bản
Dưới đây là một số khái niệm cơ bản về k8s:
- Container: Container là một cách để đóng gói ứng dụng và tất cả các phụ thuộc của nó thành một đơn vị dễ dàng triển khai.
- Image: Image là phần mềm được đóng gói lại thành một chương trình chạy dưới dạng container. Các Pod sẽ sử dụng các Image để chạy.
- Repository: Repository là nơi lưu trữ các image.
- Registry: Registry là một dịch vụ cho phép bạn truy cập và tải xuống các image.
- ReplicateSet: được sử dụng để duy trì một tập replicate các Pod ổn định theo thời gian. ReplicateSet quản lý Pod qua label. Nếu thay đổi label của Pod, ReplicateSet sẽ không quản lý Pod đó nữa.
- Deployment: sử dụng ReplicateSet để quản lý pods, đồng thời nó cũng cho phép cập nhật Pod Template.
- Scheduler: chịu trách nhiệm phân bố Pod tới các Node, tính toán để tìm node phù hợp nhất cho Pod, sau đó thông báo kubelet tại Node phù hợp.
Để triển khai k8s, bạn cần cài đặt các thành phần sau:
- Kubernetes control plane: Kubernetes control plane là một tập hợp các thành phần chịu trách nhiệm quản lý cluster. (master node)
- Kubernetes nodes: Kubernetes nodes là các máy vật lý hoặc ảo mà các pod được triển khai. (worker node)
Cài đặt Kubernetes
Tóm lại thì có một số công cụ và hướng tiếp cận để bạn có thể sử dụng K8s:
- Kubectl (công cụ quản lý chính của K8s)
- Minikube/Kubeadmin/Docker windows: Phần mềm triển khai K8s trên cục bộ
- EKS/GKE/AKS: Phần mềm K8s trên cloud của AWS/GCP/Azure
Ngoài ra bạn cần 1 hypervisor làm phần nền cho Kubernetes (Docker, QEMU, Hyper-V, KVM, Podman, VirtualBox, VMWare,…), bởi vì K8s chỉ là công cụ để container orchestration thôi.
Triển khai Kubernetes trên máy cục bộ
Ở đây mình sẽ Demo qua cài đặt minikube trên Ubuntu nhé và mọi thứ sẽ có references cho các bạn tham khảo.
Cài minikube
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube
sudo mkdir -p /usr/local/bin/
sudo install minikube /usr/local/bin/
minikube version
Cài đặt hypervisor (docker):
Tiến hành khởi tạo và chạy cluster
sudo usermod -aG docker $USER && newgrp docker
minikube start --vm-driver=docker
Như vậy là mình đã triển khai xong K8s trên máy của mình, có thể kiểm tra trạng thái bằng lệnh
minikube status
Một số lệnh khác:
- minikube dashboard: mở k8s dashboard
- minikube stop: dừng các máy của minikube
- minikube delete: xóa các cluster trong minikube
Tổng hợp một số lệnh quản lý K8s:
- kubectl config view: xem cấu hình kubernetes
- kubectl cluster-info: xem trạng thái của cluster hiện tại
- kubectl get nodes: xem trạng thái của các nodes
- kubectl get pods: danh sách tất cả pod của namespace
- kubectl get services: danh sách tât cả service của namespace
- kubectl create deployment <NAME> –image=image: dùng để tạo deployment (blueprint) tức là tạo pod. Cấu hình cơ bản nhất của pod là tên và image của nó.
- kubectl get deployment <NAME>: kiểm tra state của deployment
- kubectl edit deployment <NAME>: dùng để sửa deployment
- 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ạo resource trong K8s bằng command này. Mọi cấu hình trong file sẽ được K8s áp dụng
- kubectl delete -f <FILE_NAME>: tương tự như command trên nhưng ta dùng để xóa pod với type và name được cấu hính trong file.
- kubectl logs <POD_NAME>: xem logs của pod
- kubectl describe pod <POD_NAME>: ta có xem thêm nhiều thông tin khác của pod như các event bằng lệnh này.
- kubectl exec -it <POD_NAME> — bin/bash: ta sẽ inject cotainer của pod để tiến hành chạy command trong đó.