0

AWS Kubernetes (K8S)

Kubernetes (K8S) là một nền tảng mã nguồn mở để tự động hóa việc triển khai, mở rộng và quản lý các container. Đây là một công cụ mạnh mẽ và phổ biến để triển khai ứng dụng container hóa trên quy mô lớn.

Dưới đây là kiến thức đầy đủ về Kubernetes, từ cơ bản đến nâng cao:


1. Tổng quan về Kubernetes

Kubernetes là gì?

  • Kubernetes giúp quản lý các container (như Docker) bằng cách nhóm chúng thành các đơn vị logic gọi là Pods.
  • Kubernetes cung cấp:
    • Tự động scaling (mở rộng/thu hẹp).
    • Tự động khởi động lại container khi gặp lỗi.
    • Cân bằng tải (Load Balancing).
    • Quản lý cấu hình và bí mật (ConfigMap và Secret).

2. Các thành phần chính của Kubernetes

Kiến trúc tổng thể

Kubernetes có kiến trúc Client-Server:

  • Control Plane (Máy chủ điều khiển):

    1. API Server: Giao tiếp giữa người dùng và Kubernetes.
    2. Scheduler: Quyết định nơi chạy các Pods.
    3. Controller Manager: Xử lý các hoạt động như scaling, kiểm tra trạng thái.
    4. etcd: Lưu trữ trạng thái cluster dưới dạng key-value.
  • Node (Máy chủ làm việc):

    1. Kubelet: Chịu trách nhiệm khởi động và giám sát container trên node.
    2. Kube Proxy: Quản lý mạng và chuyển tiếp yêu cầu tới container.
    3. Container Runtime: Công cụ chạy container (như Docker, containerd).

Các khái niệm cơ bản

  1. Pod:

    • Đơn vị nhỏ nhất trong Kubernetes, chứa một hoặc nhiều container.
    • Các container trong Pod chia sẻ tài nguyên mạng và lưu trữ.
  2. Node:

    • Máy chủ vật lý hoặc máy ảo chạy các Pods.
  3. Namespace:

    • Chia tách tài nguyên thành các không gian độc lập.
  4. Deployment:

    • Quản lý việc triển khai ứng dụng, bao gồm scaling và rolling updates.
  5. Service:

    • Cách để expose Pods ra bên ngoài (ClusterIP, NodePort, LoadBalancer, ExternalName).
  6. ConfigMapSecret:

    • ConfigMap: Lưu trữ cấu hình không bí mật.
    • Secret: Lưu trữ dữ liệu nhạy cảm (như mật khẩu, API keys).

3. Các tính năng quan trọng của Kubernetes

Quản lý Container

  • Tự động tạo và khởi động lại container khi gặp lỗi.
  • Thay thế container lỗi hoặc không đáp ứng.

Scaling (Mở rộng quy mô)

  • Horizontal Pod Autoscaler (HPA): Tự động thêm/bớt số lượng Pods dựa trên tải.
  • Vertical Pod Autoscaler (VPA): Điều chỉnh tài nguyên của Pods (CPU, RAM).

Cân bằng tải (Load Balancing)

  • Kubernetes tự động phân phối lưu lượng mạng đến các Pods.

Storage (Lưu trữ)

  • Hỗ trợ lưu trữ dữ liệu tạm thời và lâu dài:
    • PersistentVolume (PV).
    • PersistentVolumeClaim (PVC).
    • StorageClass.

Networking

  • Kubernetes hỗ trợ:
    • Service Discovery: Pods tự động tìm thấy nhau.
    • Ingress: Quản lý truy cập từ bên ngoài vào cluster.
    • Network Policies: Điều chỉnh luồng mạng giữa các Pods.

4. Cách triển khai ứng dụng với Kubernetes

Quy trình triển khai

  1. Tạo file cấu hình YAML để định nghĩa các tài nguyên (Deployment, Service, ConfigMap...).
  2. Áp dụng file cấu hình:
    kubectl apply -f <file.yaml>
    
  3. Kiểm tra trạng thái:
    kubectl get pods
    kubectl get svc
    

5. Hệ sinh thái Kubernetes

Công cụ hỗ trợ

  • Helm: Quản lý ứng dụng Kubernetes dưới dạng biểu đồ (charts).
  • Prometheus + Grafana: Giám sát và hiển thị dữ liệu cluster.
  • Istio/Linkerd: Quản lý mạng dịch vụ (Service Mesh).
  • Kustomize: Tùy chỉnh file YAML mà không cần thay đổi trực tiếp.

Dịch vụ Cloud hỗ trợ Kubernetes

  • Amazon EKS (AWS).
  • Google Kubernetes Engine (GKE).
  • Azure Kubernetes Service (AKS).

6. Bảo mật trong Kubernetes

Quản lý quyền truy cập

  • RBAC (Role-Based Access Control): Phân quyền dựa trên vai trò.
  • Pod Security Standards (PSS): Quy tắc bảo mật Pods.

Quản lý bí mật

  • Sử dụng Secret để lưu trữ và quản lý dữ liệu nhạy cảm.

Cách ly tài nguyên

  • Sử dụng Namespace để cô lập các tài nguyên giữa các nhóm.

7. Cách cài đặt Kubernetes

Minikube (Dành cho phát triển và thử nghiệm)

  • Triển khai Kubernetes trên máy cá nhân.
    minikube start
    

Kubeadm

  • Triển khai Kubernetes trên server:
    kubeadm init
    

Dịch vụ Cloud

  • Sử dụng các nền tảng như EKS, GKE, hoặc AKS để triển khai cluster dễ dàng.

8. Các lệnh kubectl quan trọng

Làm việc với Pods

  • Liệt kê Pods:
    kubectl get pods
    
  • Xem log của Pod:
    kubectl logs <pod_name>
    

Làm việc với Deployments

  • Triển khai Deployment:
    kubectl apply -f deployment.yaml
    
  • Xóa Deployment:
    kubectl delete deployment <deployment_name>
    

Kiểm tra tài nguyên

  • Liệt kê tất cả tài nguyên:
    kubectl get all
    
  • Xem thông tin chi tiết:
    kubectl describe <resource> <name>
    

9. Nâng cao

CICD với Kubernetes

  • Sử dụng các công cụ như Jenkins, GitLab CI/CD, hoặc ArgoCD để tự động triển khai ứng dụng lên Kubernetes.

Service Mesh

  • Triển khai Istio hoặc Linkerd để:
    • Quản lý lưu lượng giữa các dịch vụ.
    • Thực hiện canary deployment hoặc blue/green deployment.


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.