Multi-tenant Kubernetes (EKS implementation) syllabus
Table of contents
- Ngày 1: Giới thiệu về Kubernetes
- Ngày 2: Làm việc với Pod và Service
- Ngày 3: Deployment và ReplicaSet
- Ngày 4: Giới thiệu về Amazon EKS
- Ngày 5: Tích hợp EKS với các dịch vụ AWS
- Ngày 6: Multi-tenancy trong Kubernetes
- Ngày 7: Network policy trong multi-tenant Kubernetes
- Ngày 8: Bảo mật trong multi-tenant Kubernetes
- Ngày 9: Monitoring trong multi-tenant Kubernetes
- Ngày 10: Logging trong multi-tenant Kubernetes
- Ngày 11: CI/CD trong multi-tenant Kubernetes
- Ngày 12-15: Project - Xây dựng hệ thống blog multi-tenant
- Ngày 16: Quét lỗ hổng bảo mật
- Ngày 17: Quản lý secret nâng cao
- Ngày 18: Bảo mật mạng
- Ngày 19: Profiling và debugging
- Ngày 20: Tối ưu hóa database
- Ngày 21: Tối ưu hóa resource
- Ngày 22: Tracing
- Ngày 23: Logging nâng cao
- Ngày 24: Alerting
- Ngày 25: Helm
- Ngày 26: Kustomize
- Ngày 27: Policy as Code
- Ngày 28: Service mesh
- Ngày 29: Serverless Kubernetes
- Ngày 30: Kubernetes Operators
- Ngày 31: Tối ưu hóa và mở rộng hệ thống
- Ngày 32: Troubleshooting và best practices (Phần 1)
- Ngày 33: Troubleshooting và best practices (Phần 2)
- Ngày 34: Chuẩn bị cho các kịch bản failover và disaster recovery
- Ngày 35: Review kiến thức Kubernetes và EKS
- Ngày 36: Review cấu hình hệ thống blog
- Ngày 37: Thực hiện test hiệu năng và stress test
- Ngày 38: Tối ưu hóa code và cấu hình
- Ngày 39: Kiểm tra bảo mật và vá lỗ hổng
- Ngày 40: Tìm hiểu về Go-live và hỗ trợ sau triển khai
Ngày 1: Giới thiệu về Kubernetes
Lý thuyết:
Tổng quan về Kubernetes và kiến trúc
Các thành phần chính trong Kubernetes (Master Node, Worker Node, Pod, Service,...)
Cài đặt Kubernetes cơ bản (ví dụ: Minikube)
Bài tập:
Cài đặt Minikube trên máy local và khởi chạy một cluster Kubernetes đơn giản.
Tạo một Pod "Hello World" đơn giản bằng file YAML và kiểm tra trạng thái của nó.
Sửa đổi file YAML của Pod để thay đổi image và kiểm tra kết quả.
Tìm hiểu về các khái niệm cơ bản trong Kubernetes như Node, Pod, Label, Selector.
Sử dụng lệnh
kubectl
để lấy thông tin về các đối tượng trong cluster (ví dụ:kubectl get pods
,kubectl describe nodes
).
Ngày 2: Làm việc với Pod và Service
Lý thuyết:
Tạo và quản lý Pod (lifecycle, restart policy, health check)
Cấu hình Pod với ConfigMap và Secret
Giới thiệu về Service và các loại Service (ClusterIP, NodePort, LoadBalancer)
Bài tập:
Tạo một Pod với nhiều container và kiểm tra sự tương tác giữa chúng.
Sử dụng ConfigMap để lưu trữ các biến môi trường và cấu hình cho Pod.
Sử dụng Secret để lưu trữ thông tin nhạy cảm như password và token.
Tạo một Service để expose Pod ra bên ngoài cluster thông qua NodePort hoặc LoadBalancer.
Sử dụng
kubectl port-forward
để truy cập vào Service từ máy local.
Ngày 3: Deployment và ReplicaSet
Lý thuyết:
Tìm hiểu về Deployment và ReplicaSet
Tạo và quản lý Deployment (rolling update, rollback)
Scaling và updating ứng dụng với Deployment
Bài tập:
Tạo một Deployment cho ứng dụng web đơn giản.
Thực hiện rolling update cho Deployment để cập nhật phiên bản mới của ứng dụng.
Thực hiện rollback cho Deployment để quay lại phiên bản trước đó.
Cấu hình autoscaling cho Deployment để tự động điều chỉnh số lượng Pod dựa trên CPU hoặc memory usage.
Sử dụng
kubectl rollout
để quản lý lịch sử và trạng thái của Deployment.
Ngày 4: Giới thiệu về Amazon EKS
Lý thuyết:
Tổng quan về Amazon EKS và lợi ích
Kiến trúc và thành phần của EKS (Control Plane, Worker Node, VPC,...)
Tạo và quản lý cluster EKS (eksctl, AWS Console)
Bài tập:
Tạo một cluster EKS mới bằng
eksctl
hoặc AWS Console.Cấu hình
kubectl
để kết nối với cluster EKS.Triển khai một ứng dụng đơn giản (ví dụ: nginx) lên cluster EKS.
Tìm hiểu về các khái niệm liên quan đến EKS như Node Group, Fargate, Security Group.
Sử dụng AWS Console để giám sát trạng thái của cluster EKS.
Ngày 5: Tích hợp EKS với các dịch vụ AWS
Lý thuyết:
Tích hợp EKS với VPC và subnets
Sử dụng IAM để quản lý quyền truy cập cho EKS (IAM Role, IAM Policy)
Tích hợp EKS với LoadBalancer (ELB, ALB) và Autoscaling (ASG)
Bài tập:
Cấu hình VPC và subnets cho cluster EKS.
Tạo IAM roles và policies cho các thành phần trong EKS (ví dụ: Node Group, Control Plane).
Triển khai ứng dụng với LoadBalancer và Autoscaling.
Sử dụng IAM để kiểm soát quyền truy cập vào cluster EKS (ví dụ: ai được phép tạo Pod, ai được phép xem log).
Tìm hiểu về các dịch vụ AWS khác có thể tích hợp với EKS (ví dụ: RDS, S3, DynamoDB).
Ngày 6: Multi-tenancy trong Kubernetes
Lý thuyết:
Giới thiệu về multi-tenancy và lợi ích (chia sẻ tài nguyên, cô lập môi trường, quản lý tập trung)
Các mô hình multi-tenancy (namespace-based, cluster-based, node-based)
Sử dụng namespace để cô lập tenant (resource quota, network policy, RBAC)
Bài tập:
Tạo nhiều namespace cho các tenant khác nhau (ví dụ: team A, team B).
Triển khai các ứng dụng khác nhau vào các namespace khác nhau.
Cấu hình resource quota cho từng namespace để giới hạn tài nguyên sử dụng (ví dụ: CPU, memory).
Sử dụng label để đánh dấu các Pod thuộc về các tenant khác nhau.
Sử dụng
kubectl get
với-namespace
để lấy thông tin về các đối tượng trong từng namespace.
Ngày 7: Network policy trong multi-tenant Kubernetes
Lý thuyết:
Giới thiệu về network policy (kiểm soát traffic giữa các Pod)
Cấu hình network policy để kiểm soát traffic giữa các tenant (ingress, egress)
Sử dụng Calico Network Policy Engine (thực thi network policy)
Bài tập:
Tạo network policy cho phép traffic giữa các Pod trong cùng namespace.
Tạo network policy chặn traffic giữa các Pod thuộc các namespace khác nhau.
Tạo network policy cho phép traffic từ một namespace cụ thể đến một namespace khác.
Sử dụng Calico để visualize và debug network policy.
Tìm hiểu về các network policy plugin khác như Cilium, Weave Net.
Ngày 8: Bảo mật trong multi-tenant Kubernetes
Lý thuyết:
Quản lý quyền truy cập và phân quyền trong multi-tenant cluster (RBAC, Pod Security Policy, Image Security Policy)
Sử dụng RBAC để kiểm soát quyền truy cập của người dùng và service account (Role, RoleBinding, ClusterRole, ClusterRoleBinding)
Bảo vệ tài nguyên và cô lập tenant với resource quota (ResourceQuota, LimitRange)
Bài tập:
Tạo các Role và RoleBinding để phân quyền cho người dùng và service account.
Cấu hình RBAC để cho phép người dùng A chỉ được xem Pod trong namespace A, người dùng B chỉ được xem Pod trong namespace B.
Áp dụng Pod Security Policy để hạn chế các hành động nguy hiểm của Pod (ví dụ: chạy với quyền root, truy cập vào host network).
Áp dụng Image Security Policy để đảm bảo chỉ các image đã được quét và xác thực mới được chạy trong cluster.
Sử dụng
kubectl auth can-i
để kiểm tra quyền truy cập của người dùng.
Ngày 9: Monitoring trong multi-tenant Kubernetes
Lý thuyết:
Tổng quan về monitoring trong Kubernetes (metrics, logging, tracing)
Sử dụng Prometheus và Grafana để giám sát cluster (cài đặt, cấu hình, tạo dashboard)
Cấu hình và quản lý metrics cho từng tenant (namespace-level metrics, custom metrics)
Bài tập:
Triển khai Prometheus và Grafana trên cluster EKS.
Cấu hình Prometheus để thu thập metrics từ các Pod và Node.
Tạo dashboard trong Grafana để hiển thị các metrics quan trọng như CPU usage, memory usage, request rate.
Cấu hình Prometheus để thu thập custom metrics từ ứng dụng (ví dụ: số lượng user online, số lượng transaction).
Sử dụng PromQL để truy vấn và phân tích metrics.
Ngày 10: Logging trong multi-tenant Kubernetes
Lý thuyết:
Thu thập và quản lý log trong multi-tenant cluster (Fluentd, Fluent Bit, Elasticsearch, Kibana)
Sử dụng EFK stack (Elasticsearch, Fluentd, Kibana) để xử lý log (cài đặt, cấu hình)
Phân tách và truy vấn log của từng tenant (multi-tenant logging, log aggregation)
Bài tập:
Triển khai EFK stack trên cluster EKS.
Cấu hình Fluentd hoặc Fluent Bit để thu thập log từ các Pod.
Sử dụng Kibana để tìm kiếm, lọc và visualize log.
Cấu hình Fluentd để thêm metadata vào log (ví dụ: namespace, pod name) để dễ dàng phân tách log của từng tenant.
Tìm hiểu về các giải pháp logging khác như Loki, Grafana Loki.
Ngày 11: CI/CD trong multi-tenant Kubernetes
Lý thuyết:
Tổng quan về CI/CD trong Kubernetes (pipeline, workflow, best practices)
Triển khai ứng dụng trong môi trường multi-tenant với Jenkins (cài đặt, cấu hình, pipeline)
Sử dụng GitOps để quản lý cấu hình và triển khai ứng dụng (Flux, ArgoCD)
Bài tập:
Cài đặt và cấu hình Jenkins trên cluster EKS.
Tạo pipeline Jenkins để build và deploy ứng dụng vào một namespace cụ thể.
Sử dụng GitOps (Flux hoặc ArgoCD) để tự động đồng bộ cấu hình ứng dụng từ Git repository vào cluster.
Cấu hình pipeline Jenkins để chạy các test tự động trước khi deploy ứng dụng.
Tìm hiểu về các công cụ CI/CD khác như Tekton, CircleCI.
Ngày 12-15: Project - Xây dựng hệ thống blog multi-tenant
Mục tiêu:
Thiết kế và triển khai một hệ thống blog multi-tenant trên EKS.
Áp dụng các kiến thức đã học về multi-tenancy, bảo mật, monitoring, logging, CI/CD.
Yêu cầu:
Mỗi tenant có một namespace riêng và được cô lập với nhau.
Triển khai các microservices của hệ thống blog (frontend, backend, database) trên các namespace khác nhau.
Cấu hình network policy để kiểm soát traffic giữa các microservices.
Sử dụng RBAC và resource quota để bảo vệ và phân tách tài nguyên giữa các tenant.
Thiết lập monitoring và logging để giám sát hệ thống và troubleshoot issues.
Xây dựng CI/CD pipeline để tự động hóa việc build, test và triển khai ứng dụng.
Bài tập (chia thành các task nhỏ trong 4 ngày):
Thiết kế kiến trúc hệ thống blog (sơ đồ các components, database schema).
Viết Dockerfile và build image cho các microservices.
Viết manifest Kubernetes (Deployment, Service, Ingress) cho các microservices.
Triển khai hệ thống blog lên cluster EKS và kiểm tra hoạt động.
Cấu hình và kiểm tra các tính năng multi-tenancy, bảo mật, monitoring, logging, CI/CD.
Ngày 16: Quét lỗ hổng bảo mật
Lý thuyết:
Giới thiệu các công cụ quét lỗ hổng bảo mật (Clair, Trivy)
Các loại lỗ hổng bảo mật thường gặp (CVE, misconfiguration)
Quy trình quét lỗ hổng bảo mật
Bài tập:
Cài đặt và cấu hình Clair hoặc Trivy trên cluster EKS.
Quét các image Docker đang sử dụng trong cluster để tìm lỗ hổng.
Phân tích kết quả quét và đánh giá mức độ nghiêm trọng của các lỗ hổng.
Thực hiện các biện pháp khắc phục cho các lỗ hổng được phát hiện (ví dụ: cập nhật phiên bản image).
Tạo quy trình quét lỗ hổng tự động và tích hợp vào CI/CD pipeline.
Ngày 17: Quản lý secret nâng cao
Lý thuyết:
Tìm hiểu HashiCorp Vault và AWS Secrets Manager
Các tính năng của Vault (secret storage, dynamic secrets, data encryption)
Tích hợp Vault với Kubernetes
Bài tập:
Cài đặt và cấu hình HashiCorp Vault trên cluster EKS.
Tạo các secret trong Vault và lưu trữ thông tin nhạy cảm.
Sử dụng Kubernetes auth method để xác thực các Pod với Vault.
Sử dụng Vault Injector để tự động inject secret vào Pod.
Tìm hiểu về các tính năng nâng cao của Vault như secret rotation, leasing.
Ngày 18: Bảo mật mạng
Lý thuyết:
Giới thiệu Istio service mesh (traffic management, security, observability)
Các thành phần của Istio (Envoy proxy, Pilot, Mixer, Citadel)
Cấu hình Istio để mã hóa và xác thực traffic giữa các microservices (mTLS)
Giới thiệu AWS Network Firewall (rule-based firewall)
Bài tập:
Cài đặt và cấu hình Istio trên cluster EKS.
Kích hoạt mTLS cho các microservices trong hệ thống blog.
Kiểm tra và xác minh rằng traffic giữa các microservices đã được mã hóa và xác thực.
Tạo các rule trong AWS Network Firewall để chặn các traffic không mong muốn (ví dụ: traffic từ các IP không tin cậy).
Tìm hiểu về các tính năng nâng cao của Istio như traffic routing, fault injection, circuit breaking.
Ngày 19: Profiling và debugging
Lý thuyết:
Giới thiệu các công cụ profiling (pprof, Pyroscope)
Phân tích hiệu năng ứng dụng (CPU profiling, memory profiling, goroutine profiling)
Debugging ứng dụng trong Kubernetes (kubectl logs, kubectl exec, kubectl port-forward)
Bài tập:
Sử dụng pprof để profiling một microservice trong hệ thống blog và xác định các hàm tốn nhiều CPU nhất.
Sử dụng Pyroscope để visualize kết quả profiling và tìm ra các điểm nghẽn trong ứng dụng.
Sử dụng
kubectl logs
để xem log của một Pod và tìm ra nguyên nhân gây lỗi.Sử dụng
kubectl exec
để truy cập vào một Pod đang chạy và thực hiện các lệnh debug.Sử dụng
kubectl port-forward
để forward một port của Pod về máy local và debug ứng dụng bằng các công cụ quen thuộc.
Ngày 20: Tối ưu hóa database
Lý thuyết:
Giới thiệu các kỹ thuật tối ưu hóa database (indexing, caching, query optimization)
Indexing (B-tree index, hash index, composite index)
Caching (query cache, object cache)
Query optimization (explain plan, query rewrite)
Bài tập:
Tạo các index cho các cột thường được sử dụng trong các truy vấn.
Sử dụng query cache để lưu trữ kết quả của các truy vấn thường xuyên được sử dụng.
Sử dụng explain plan để phân tích các truy vấn và tìm ra các điểm cần tối ưu hóa.
Viết lại các truy vấn để cải thiện hiệu năng.
Sử dụng các công cụ monitoring để giám sát hiệu năng của database và phát hiện các vấn đề sớm.
Ngày 21: Tối ưu hóa resource
Lý thuyết:
Giới thiệu về Vertical Pod Autoscaler (VPA) (tự động điều chỉnh resource request và limit cho Pod)
Các loại VPA (Recommender, Updater, Enforcer)
Cấu hình VPA để tối ưu hóa resource allocation
Bài tập:
Cài đặt và cấu hình VPA trên cluster EKS.
Tạo VPA object cho các microservices trong hệ thống blog.
Theo dõi các khuyến nghị của VPA và điều chỉnh resource request và limit cho các Pod.
So sánh hiệu năng của ứng dụng trước và sau khi sử dụng VPA.
Tìm hiểu về các công cụ tối ưu hóa resource khác như kube-advisor, Goldilocks.
Ngày 22: Tracing
Lý thuyết:
Giới thiệu về tracing (theo dõi luồng thực thi của request trong hệ thống phân tán)
Các thành phần của tracing (span, trace, context propagation)
Các công cụ tracing (Jaeger, AWS X-Ray)
Bài tập:
Cài đặt và cấu hình Jaeger hoặc AWS X-Ray trên cluster EKS.
Thêm instrumentation vào các microservices trong hệ thống blog để tạo ra các span.
Sử dụng Jaeger hoặc AWS X-Ray UI để visualize các trace và tìm ra các vấn đề về hiệu năng.
Tìm hiểu về OpenTelemetry, một tiêu chuẩn mới cho instrumentation và tracing.
Tích hợp tracing với logging để có cái nhìn toàn diện về hệ thống.
Ngày 23: Logging nâng cao
Lý thuyết:
Giới thiệu Elasticsearch Cluster trên EKS và AWS Elasticsearch Service
Kiến trúc của Elasticsearch (node, shard, replica)
Cấu hình Elasticsearch để lưu trữ và truy vấn log
Tích hợp Fluentd hoặc Fluent Bit với Elasticsearch
Bài tập:
Triển khai Elasticsearch Cluster trên EKS hoặc sử dụng AWS Elasticsearch Service.
Cấu hình Fluentd hoặc Fluent Bit để gửi log đến Elasticsearch.
Sử dụng Kibana để tìm kiếm, lọc và visualize log trong Elasticsearch.
Tạo index pattern trong Kibana để phân tích log theo các trường khác nhau (ví dụ: timestamp, level, message).
Tìm hiểu về các tính năng nâng cao của Elasticsearch như alerting, machine learning.
Ngày 24: Alerting
Lý thuyết:
Giới thiệu về alerting trong Kubernetes (Prometheus Alertmanager, Grafana Alerting)
Các loại alert (threshold-based, anomaly-based)
Cấu hình alert để gửi thông báo qua email, Slack, PagerDuty
Bài tập:
Cấu hình Prometheus Alertmanager để nhận alert từ Prometheus.
Tạo các rule trong Prometheus để định nghĩa các điều kiện kích hoạt alert (ví dụ: CPU usage > 80%).
Cấu hình Alertmanager để gửi thông báo alert qua email hoặc Slack.
Tạo dashboard trong Grafana và thêm alerting vào các panel.
Tìm hiểu về các công cụ alerting khác như Alertmanager webhook receiver, Opsgenie.
Ngày 25: Helm
Lý thuyết:
Giới thiệu về Helm (package manager cho Kubernetes)
Các khái niệm trong Helm (chart, release, repository)
Cài đặt và sử dụng Helm
Bài tập:
Cài đặt Helm trên máy local và cluster EKS.
Tìm kiếm và cài đặt một chart từ Helm Hub (ví dụ: chart cho WordPress, MySQL).
Tạo một chart Helm đơn giản cho ứng dụng "Hello World".
Sử dụng Helm để upgrade và rollback release.
Tạo một Helm repository riêng để lưu trữ các chart của bạn.
Ngày 26: Kustomize
Lý thuyết:
Giới thiệu về Kustomize (công cụ tùy chỉnh manifest Kubernetes)
Các khái niệm trong Kustomize (base, overlay, patch)
Cấu hình Kustomize để tùy chỉnh manifest cho các môi trường khác nhau (dev, staging, production)
Bài tập:
Cài đặt Kustomize trên máy local.
Tạo một base manifest cho ứng dụng "Hello World".
Tạo các overlay manifest để tùy chỉnh base manifest cho các môi trường dev và production.
Sử dụng Kustomize để build các manifest đã tùy chỉnh.
Triển khai các manifest đã tùy chỉnh lên cluster EKS và kiểm tra hoạt động.
Ngày 27: Policy as Code
Lý thuyết:
Giới thiệu về Open Policy Agent (OPA) (công cụ thực thi policy trên Kubernetes)
Ngôn ngữ Rego (ngôn ngữ khai báo policy của OPA)
Tích hợp OPA với Kubernetes (Gatekeeper, Admission Controller)
Bài tập:
Cài đặt và cấu hình OPA Gatekeeper trên cluster EKS.
Viết các policy Rego để kiểm tra các điều kiện bảo mật và compliance (ví dụ: không cho phép chạy Pod với quyền root, yêu cầu tất cả các Pod phải có label "owner").
Áp dụng các policy vào cluster và kiểm tra hoạt động.
Tạo các custom constraint template để mở rộng khả năng của Gatekeeper.
Tìm hiểu về các giải pháp Policy as Code khác như Kyverno, Conftest.
Ngày 28: Service mesh
Lý thuyết:
Giới thiệu về Istio service mesh (traffic management, security, observability)
Kiến trúc của Istio (data plane, control plane)
Các tính năng của Istio (traffic routing, fault injection, circuit breaking, mTLS, access control)
Bài tập:
Cài đặt và cấu hình Istio trên cluster EKS.
Triển khai một ứng dụng mẫu (ví dụ: Bookinfo) và kích hoạt Istio sidecar injection.
Sử dụng Istio để định tuyến traffic giữa các phiên bản khác nhau của ứng dụng (canary deployment, A/B testing).
Sử dụng Istio để thực hiện fault injection và circuit breaking để kiểm tra khả năng chịu lỗi của ứng dụng.
Tìm hiểu về các tính năng nâng cao của Istio như observability, tracing, metrics.
Ngày 29: Serverless Kubernetes
Lý thuyết:
Giới thiệu về Knative (nền tảng serverless trên Kubernetes)
Các thành phần của Knative (Serving, Eventing)
Xây dựng và triển khai ứng dụng serverless với Knative
Bài tập:
Cài đặt và cấu hình Knative trên cluster EKS.
Triển khai một ứng dụng serverless đơn giản (ví dụ: hàm xử lý ảnh) với Knative Serving.
Sử dụng Knative Eventing để kết nối các sự kiện từ các nguồn khác nhau (ví dụ: GitHub, S3) với các hàm xử lý.
Tìm hiểu về các tính năng nâng cao của Knative như autoscaling, traffic splitting, revision management.
So sánh Knative với các nền tảng serverless khác như AWS Lambda, Azure Functions.
Ngày 30: Kubernetes Operators
Lý thuyết:
Giới thiệu về Kubernetes Operators (phần mềm mở rộng Kubernetes để quản lý các ứng dụng stateful)
Vòng đời của một Operator (reconcile loop)
Xây dựng một Operator đơn giản với Kubebuilder hoặc Operator SDK
Bài tập:
Cài đặt Kubebuilder hoặc Operator SDK trên máy local.
Tạo một project Operator mới và định nghĩa Custom Resource Definition (CRD) cho ứng dụng của bạn.
Viết code để thực hiện reconcile loop và quản lý trạng thái của ứng dụng.
Build và deploy Operator lên cluster EKS.
Tạo các custom resource và kiểm tra hoạt động của Operator.
Ngày 31: Tối ưu hóa và mở rộng hệ thống
Lý thuyết:
Các chiến lược tối ưu hóa hiệu năng cho ứng dụng trên Kubernetes (Pod/Node affinity, resource limit, horizontal scaling)
Best practices để cải thiện khả năng mở rộng và high availability (HA) (multi-zone deployment, rolling update, health check)
Sử dụng các công cụ như Horizontal Pod Autoscaler (HPA), Vertical Pod Autoscaler (VPA), Cluster Autoscaler (CA) để tự động scale ứng dụng và cluster
Bài tập:
Cấu hình Pod/Node affinity để đảm bảo các Pod được chạy trên các Node phù hợp (ví dụ: Pod của ứng dụng web chạy trên Node có GPU).
Thiết lập resource limit cho các Pod để tránh việc một Pod sử dụng quá nhiều tài nguyên và ảnh hưởng đến các Pod khác.
Triển khai ứng dụng trên nhiều Availability Zone để đảm bảo tính HA.
Cấu hình HPA để tự động scale số lượng Pod dựa trên CPU hoặc memory usage.
Cấu hình CA để tự động scale số lượng Node trong cluster dựa trên nhu cầu tài nguyên.
Ngày 32: Troubleshooting và best practices (Phần 1)
Lý thuyết:
Kỹ thuật troubleshooting và debugging trong Kubernetes (kubectl logs, kubectl describe, kubectl exec, event)
Các lỗi và sự cố phổ biến trong môi trường multi-tenant (resource contention, network isolation, permission issue)
Best practices để đảm bảo an toàn, ổn định và hiệu năng của hệ thống (resource management, security, monitoring)
Bài tập:
Một Pod bị crash liên tục, sử dụng
kubectl logs
vàkubectl describe
để tìm ra nguyên nhân.Một Service không thể truy cập được, sử dụng
kubectl get events
để xem các sự kiện liên quan và tìm ra nguyên nhân.Hai namespace không thể giao tiếp với nhau, kiểm tra network policy và cấu hình lại cho đúng.
Một người dùng không có quyền truy cập vào một resource, kiểm tra RBAC và cấu hình lại role binding.
Một Pod bị OOMKilled, kiểm tra resource limit và cấu hình lại cho phù hợp.
Ngày 33: Troubleshooting và best practices (Phần 2)
Lý thuyết:
Các công cụ hỗ trợ troubleshooting (kube-state-metrics, Prometheus, Grafana)
Các kỹ thuật nâng cao như phân tích dump file, profiling
Xây dựng quy trình troubleshooting và xử lý sự cố
Bài tập:
Sử dụng kube-state-metrics để lấy thông tin về trạng thái của các đối tượng trong cluster và hiển thị trên Grafana.
Sử dụng Prometheus để tạo alert khi có sự cố xảy ra (ví dụ: Pod crash, node down).
Phân tích dump file của một Pod bị crash để tìm ra nguyên nhân.
Sử dụng profiling để phân tích hiệu năng của ứng dụng và tìm ra các điểm nghẽn.
Xây dựng một quy trình troubleshooting chi tiết, bao gồm các bước kiểm tra, phân tích và khắc phục sự cố.
Ngày 34: Chuẩn bị cho các kịch bản failover và disaster recovery
Lý thuyết:
Các loại failover (node failover, zone failover, region failover)
Các chiến lược disaster recovery (backup và restore, multi-region deployment, pilot light)
Xây dựng kế hoạch disaster recovery cho hệ thống Kubernetes
Bài tập:
Thiết lập backup định kỳ cho các dữ liệu quan trọng (etcd, config, persistent volume).
Thực hiện khôi phục dữ liệu từ bản backup và kiểm tra hoạt động của hệ thống.
Triển khai hệ thống trên nhiều region và cấu hình load balancing để đảm bảo tính sẵn sàng cao.
Thiết lập một pilot light cluster ở một region khác để dự phòng khi region chính gặp sự cố.
Xây dựng kế hoạch disaster recovery chi tiết và thực hiện diễn tập để đảm bảo tính khả thi.
Ngày 35: Review kiến thức Kubernetes và EKS
Sáng:
Ôn tập các khái niệm cơ bản của Kubernetes: Pod, Service, Deployment, StatefulSet, DaemonSet, ConfigMap, Secret.
Ôn tập các thành phần chính của EKS: Control Plane, Worker Node, VPC, IAM, Security Group.
Thảo luận và giải đáp thắc mắc về kiến thức lý thuyết.
Chiều:
Thực hành các thao tác cơ bản với kubectl: get, describe, logs, exec, port-forward.
Thực hành tạo và quản lý các đối tượng Kubernetes trên EKS: Pod, Service, Deployment.
Thực hành cấu hình và quản lý cluster EKS: node group, IAM, security group.
Ngày 36: Review cấu hình hệ thống blog
Sáng:
Review lại kiến trúc hệ thống blog và các microservices.
Review các manifest Kubernetes của hệ thống blog (Deployment, Service, Ingress).
Kiểm tra tính đúng đắn và tối ưu của các manifest (resource request/limit, health check, liveness probe, readiness probe).
Chiều:
Review các network policy đã cấu hình cho hệ thống blog.
Kiểm tra tính hiệu quả của các network policy trong việc cô lập và bảo vệ các microservices.
Review các RBAC rule đã cấu hình cho hệ thống blog.
Kiểm tra tính phân quyền và bảo mật của các RBAC rule.
Ngày 37: Thực hiện test hiệu năng và stress test
Sáng:
Chuẩn bị môi trường test: tạo dữ liệu mẫu, cấu hình công cụ test (ví dụ: Locust, JMeter).
Thực hiện các bài test hiệu năng cơ bản: đo thời gian phản hồi, throughput, resource usage.
Phân tích kết quả test và xác định các điểm nghẽn hiệu năng.
Chiều:
Thực hiện stress test: tăng dần tải lên hệ thống và quan sát phản ứng.
Xác định ngưỡng chịu tải của hệ thống và các vấn đề phát sinh khi hệ thống bị quá tải.
Đề xuất các giải pháp cải thiện hiệu năng dựa trên kết quả test.
Ngày 38: Tối ưu hóa code và cấu hình
Sáng:
Review code của các microservices và tìm kiếm các đoạn code có thể tối ưu hóa (ví dụ: sử dụng cache, tối ưu hóa truy vấn database).
Áp dụng các kỹ thuật tối ưu hóa code đã học (ví dụ: profiling, code refactoring).
Thực hiện benchmark để đánh giá hiệu quả của việc tối ưu hóa code.
Chiều:
Review cấu hình của các microservices (ví dụ: JVM option, database connection pool).
Điều chỉnh các thông số cấu hình để tối ưu hóa hiệu năng của microservices.
Thực hiện benchmark để đánh giá hiệu quả của việc tối ưu hóa cấu hình.
Ngày 39: Kiểm tra bảo mật và vá lỗ hổng
Sáng:
Thực hiện kiểm tra bảo mật toàn diện cho hệ thống blog (ví dụ: quét lỗ hổng, kiểm tra cấu hình bảo mật).
Sử dụng các công cụ quét lỗ hổng như Clair, Trivy để phát hiện các lỗ hổng trong image và ứng dụng.
Kiểm tra các cấu hình bảo mật của EKS, network policy, RBAC, IAM.
Chiều:
Phân tích kết quả kiểm tra bảo mật và đánh giá mức độ nghiêm trọng của các lỗ hổng.
Lập kế hoạch vá các lỗ hổng được phát hiện.
Thực hiện vá lỗ hổng và kiểm tra lại hệ thống.
Ngày 40: Tìm hiểu về Go-live và hỗ trợ sau triển khai
Hoạt động:
Triển khai hệ thống blog multi-tenant lên môi trường production.
Giám sát chặt chẽ hệ thống trong giai đoạn đầu sau khi go-live.
Hỗ trợ người dùng và xử lý các sự cố phát sinh.
Bài tập:
Lập kế hoạch triển khai chi tiết và phân công nhiệm vụ cho các thành viên trong nhóm.
Triển khai hệ thống theo kế hoạch và kiểm tra hoạt động.
Thiết lập hệ thống monitoring và alerting để phát hiện sớm các vấn đề.
Chuẩn bị sẵn sàng các kịch bản xử lý sự cố và có phương án dự phòng.
Thu thập phản hồi từ người dùng và liên tục cải tiến hệ thống.