Học để thi CKA trong 30 ngày

Tuần 1:

  • Ngày 1: Tổng quan Kubernetes & Kiến trúc

    • Lý thuyết:

      • Lịch sử và các phiên bản Kubernetes, so sánh các tính năng mới.

      • Kiến trúc chi tiết từng component (kube-apiserver, kube-scheduler, kube-controller-manager, etcd).

      • Các đối tượng nâng cao: CustomResourceDefinitions (CRDs), Operators, DaemonSets, StatefulSets.

    • Bài tập:

      • Cài đặt Kubernetes bằng kubeadm trên môi trường production-like (nhiều nodes, cấu hình mạng phức tạp).

      • Tạo và quản lý CRDs.

      • Triển khai một ứng dụng stateful đơn giản (ví dụ: MySQL) bằng StatefulSet.

  • Ngày 2: RBAC

    • Lý thuyết:

      • RBAC nâng cao: Aggregate Roles, phân quyền chi tiết đến từng field của resource.

      • Kiểm soát truy cập bằng Webhooks.

      • Audit logging trong RBAC.

    • Bài tập:

      • Tạo một hệ thống RBAC phức tạp cho một ứng dụng đa thành phần.

      • Sử dụng Webhooks để kiểm soát việc tạo và cập nhật các resource.

      • Cấu hình audit logging để theo dõi các hoạt động liên quan đến RBAC.

  • Ngày 3: Cài đặt Kubernetes với Kubeadm

    • Lý thuyết:

      • Cài đặt Kubernetes HA với nhiều control plane nodes.

      • Tối ưu hóa cấu hình kubeadm cho môi trường production.

      • Sử dụng các công cụ quản lý cấu hình (Ansible, Terraform) để tự động hóa việc cài đặt.

    • Bài tập:

      • Cài đặt một cluster Kubernetes HA với 3 control plane nodes và nhiều worker nodes.

      • Tối ưu hóa cấu hình kubeadm cho hiệu năng và độ tin cậy cao.

      • Sử dụng Ansible hoặc Terraform để tự động hóa toàn bộ quá trình cài đặt.

  • Ngày 4: Cấu hình mạng nâng cao (CNI, Load Balancing)

    • Lý thuyết:

      • So sánh các CNI khác nhau (Flannel, Calico, Cilium, Weave Net).

      • Cấu hình nâng cao cho CNI: BGP peering, IPAM.

      • Load balancing nâng cao: Sử dụng MetalLB, cấu hình session affinity.

    • Bài tập:

      • Cài đặt và cấu hình Cilium hoặc Weave Net làm CNI.

      • Cấu hình BGP peering cho CNI.

      • Cài đặt và cấu hình MetalLB.

      • Cấu hình session affinity cho Ingress.

  • Ngày 5: Quản lý Cluster Kubernetes HA

    • Lý thuyết:

      • Cấu hình etcd cluster nâng cao: snapshot, backup, restore.

      • Quản lý và giám sát etcd cluster.

      • Sử dụng các công cụ quản lý cluster (Rancher, Kops) để đơn giản hóa việc quản lý.

    • Bài tập:

      • Cấu hình snapshot và backup định kỳ cho etcd cluster.

      • Thực hiện restore etcd cluster từ backup.

      • Sử dụng Rancher hoặc Kops để quản lý cluster Kubernetes.

Tuần 2:

  • Ngày 6: ConfigMaps, Secrets và quản lý cấu hình (Helm, Kustomize)

    • Lý thuyết:

      • Sử dụng Helm để quản lý các ứng dụng phức tạp với nhiều chart và dependencies.

      • Tạo và quản lý Helm chart repositories.

      • Sử dụng Kustomize để tùy chỉnh các manifest Kubernetes một cách linh hoạt.

      • Sử dụng các công cụ khác như Kapitan, Jsonnet để quản lý cấu hình.

      • Quản lý secrets an toàn với các giải pháp như HashiCorp Vault, AWS Secrets Manager.

    • Bài tập:

      • Tạo một Helm chart phức tạp cho một ứng dụng microservices.

      • Tạo và quản lý một Helm chart repository riêng.

      • Sử dụng Kustomize để tùy chỉnh một Helm chart cho các môi trường khác nhau (dev, staging, production).

      • Sử dụng Kapitan hoặc Jsonnet để quản lý cấu hình cho một ứng dụng Kubernetes.

      • Tích hợp HashiCorp Vault hoặc AWS Secrets Manager để quản lý secrets.

  • Ngày 7: Scaling ứng dụng nâng cao (HPA, VPA, custom metrics)

    • Lý thuyết:

      • Sử dụng các custom metrics phức tạp (ví dụ: số lượng message trong queue, độ trễ của request) để điều khiển HPA.

      • Cấu hình VPA để tự động điều chỉnh tài nguyên cho các ứng dụng stateful.

      • Sử dụng các kỹ thuật scaling khác như cluster autoscaler, cron-based scaling.

    • Bài tập:

      • Cấu hình HPA để scale một ứng dụng dựa trên số lượng message trong queue RabbitMQ.

      • Cấu hình VPA để tự động điều chỉnh tài nguyên cho một StatefulSet Cassandra.

      • Sử dụng cluster autoscaler để tự động thêm node khi cluster hết tài nguyên.

      • Sử dụng cron-based scaling để scale ứng dụng theo thời gian trong ngày.

  • Ngày 8: Quản lý tài nguyên và Pod Scheduling (QoS, PriorityClasses, descheduler)

    • Lý thuyết:

      • Cấu hình Quality of Service (QoS) cho Pod để đảm bảo tài nguyên trong trường hợp contention.

      • Sử dụng PriorityClasses để ưu tiên các Pod quan trọng.

      • Sử dụng descheduler để tối ưu hóa việc sử dụng tài nguyên của cluster.

    • Bài tập:

      • Cấu hình QoS cho các Pod khác nhau trong một ứng dụng.

      • Tạo và sử dụng PriorityClasses để ưu tiên các Pod quan trọng.

      • Cài đặt và cấu hình descheduler để tối ưu hóa việc sử dụng tài nguyên của cluster.

  • Ngày 9: Network Policies, Service Mesh (Istio, Linkerd)

    • Lý thuyết:

      • Tạo các Network Policies phức tạp để kiểm soát chi tiết luồng traffic giữa các Pod và Namespace.

      • Giới thiệu về Service Mesh và các lợi ích của nó (observability, traffic management, security).

      • Cài đặt và cấu hình Istio hoặc Linkerd.

    • Bài tập:

      • Tạo một Network Policy để chỉ cho phép traffic từ một dải IP cụ thể.

      • Tạo một Network Policy để kiểm soát traffic giữa các microservices trong một ứng dụng.

      • Cài đặt và cấu hình Istio hoặc Linkerd.

      • Sử dụng Istio hoặc Linkerd để thực hiện traffic splitting và canary deployments.

      • Sử dụng Istio hoặc Linkerd để thu thập metrics và logs từ các microservices.

  • Ngày 10: Ingress và Ingress Controllers (custom annotations, canary deployments, rate limiting)

    • Lý thuyết:

      • Sử dụng các custom annotations để tùy chỉnh hành vi của Ingress Controller.

      • Thực hiện canary deployments và traffic splitting với Ingress.

      • Cấu hình rate limiting để bảo vệ ứng dụng khỏi các cuộc tấn công DDoS.

    • Bài tập:

      • Sử dụng custom annotations để cấu hình caching, rewriting, và redirection cho Ingress.

      • Thực hiện canary deployments và traffic splitting với Ingress.

      • Cấu hình rate limiting cho Ingress

Tuần 3:

  • Ngày 11: Cấu hình DNS (ExternalDNS, custom DNS providers)

    • Lý thuyết:

      • Sử dụng ExternalDNS để tự động quản lý DNS records cho các Ingress và Service.

      • Tích hợp ExternalDNS với các DNS providers khác nhau (AWS Route 53, Google Cloud DNS, Cloudflare).

      • Cấu hình custom DNS providers cho Kubernetes.

    • Bài tập:

      • Cài đặt và cấu hình ExternalDNS để tự động quản lý DNS records cho Ingress.

      • Tích hợp ExternalDNS với AWS Route 53 hoặc Google Cloud DNS.

      • Cấu hình một custom DNS provider cho Kubernetes.

  • Ngày 12: Cấu hình Storage (dynamic provisioning, CSI drivers, storage snapshots)

    • Lý thuyết:

      • Sử dụng dynamic provisioning để tự động tạo Persistent Volumes khi cần thiết.

      • Sử dụng các CSI drivers để tích hợp với các hệ thống lưu trữ khác nhau (Ceph, GlusterFS, NFS).

      • Tạo và quản lý storage snapshots để sao lưu và phục hồi dữ liệu.

    • Bài tập:

      • Cấu hình dynamic provisioning cho các Storage Class khác nhau.

      • Cài đặt và sử dụng CSI driver cho Ceph hoặc GlusterFS.

      • Tạo và quản lý storage snapshots cho Persistent Volumes.

  • Ngày 13: Logging và Monitoring (EFK stack, Prometheus Operator, custom dashboards)

    • Lý thuyết:

      • Cài đặt và cấu hình EFK stack (Elasticsearch, Fluentd, Kibana) để thu thập, lưu trữ và phân tích logs.

      • Sử dụng Prometheus Operator để tự động quản lý các Prometheus instances và cấu hình.

      • Tạo custom dashboards trong Grafana để trực quan hóa các metrics quan trọng.

    • Bài tập:

      • Cài đặt và cấu hình EFK stack.

      • Cài đặt và cấu hình Prometheus Operator.

      • Tạo một custom dashboard trong Grafana để hiển thị các metrics về CPU usage, memory usage, network traffic.

  • Ngày 14: Troubleshooting (debugging network issues, performance tuning, security hardening)

    • Lý thuyết:

      • Sử dụng các công cụ như tcpdump, Wireshark để debug các vấn đề về mạng.

      • Thực hiện performance tuning cho Kubernetes bằng cách tối ưu hóa cấu hình của các components và ứng dụng.

      • Thực hiện security hardening cho Kubernetes bằng cách áp dụng các best practices và cấu hình bảo mật.

    • Bài tập:

      • Sử dụng tcpdump hoặc Wireshark để debug một vấn đề về kết nối mạng giữa các Pod.

      • Tối ưu hóa cấu hình của kubelet và kube-proxy để cải thiện hiệu năng của cluster.

      • Áp dụng các best practices về security hardening cho Kubernetes.

  • Ngày 15: Bảo mật Kubernetes (Pod Security Policies, Network Policies, Image Security)

    • Lý thuyết:

      • Sử dụng Pod Security Policies (PSPs) để kiểm soát các đặc quyền của Pod.

      • Sử dụng Network Policies để kiểm soát traffic giữa các Pod và Namespace.

      • Đảm bảo tính bảo mật của images bằng cách sử dụng các công cụ quét lỗ hổng bảo mật và ký tên image.

    • Bài tập:

      • Tạo và áp dụng PSPs cho các Pod.

      • Tạo các Network Policies phức tạp để kiểm soát traffic giữa các microservices.

      • Sử dụng các công cụ như Clair, Trivy để quét lỗ hổng bảo mật trong images.

      • Ký tên image bằng các công cụ như Notary, Cosign.

Tuần 4:

  • Ngày 16: Logging và Monitoring (Phần 2)

    • Lý thuyết:

      • Triển khai kiến trúc logging phân tán với Fluent Bit và Fluentd.

      • Sử dụng các bộ lọc (filter) và bộ xử lý (parser) trong Fluentd để chuẩn hóa và làm giàu dữ liệu log.

      • Tạo các cảnh báo (alert) phức tạp trong Prometheus dựa trên các quy tắc và biểu thức.

      • Tích hợp Prometheus với các hệ thống cảnh báo bên ngoài như Alertmanager, PagerDuty, Slack.

      • Sử dụng các công cụ tracing như Jaeger để theo dõi các request trong hệ thống phân tán.

    • Bài tập:

      • Cài đặt và cấu hình Fluent Bit trên các node để thu thập logs từ các container.

      • Cấu hình Fluentd để tổng hợp và chuyển tiếp logs đến Elasticsearch.

      • Tạo một bộ lọc trong Fluentd để loại bỏ các logs không cần thiết.

      • Tạo một cảnh báo trong Prometheus để gửi thông báo khi tỷ lệ lỗi của một service vượt quá ngưỡng.

      • Tích hợp Prometheus với Alertmanager để gửi cảnh báo qua email.

      • Cài đặt và cấu hình Jaeger để theo dõi các request trong một ứng dụng microservices.

  • Ngày 17: Troubleshooting (Phần 3)

    • Lý thuyết:

      • Sử dụng các công cụ debug như strace, gdb để phân tích các vấn đề phức tạp.

      • Phân tích heap dump và thread dump để tìm ra nguyên nhân gây ra lỗi trong ứng dụng.

      • Sử dụng các kỹ thuật profiling để xác định các điểm nghẽn hiệu năng trong ứng dụng.

      • Thực hiện phân tích root cause analysis (RCA) để tìm ra nguyên nhân gốc rễ của sự cố và ngăn chặn sự cố tái diễn.

    • Bài tập:

      • Sử dụng strace để debug một vấn đề về hiệu năng của một Pod.

      • Phân tích heap dump và thread dump để tìm ra nguyên nhân gây ra lỗi "Out of Memory" trong một ứng dụng Java.

      • Sử dụng các công cụ profiling như pprof, go tool trace để xác định các điểm nghẽn hiệu năng trong một ứng dụng Go.

      • Thực hiện RCA cho một sự cố mất kết nối mạng trong cluster Kubernetes.

  • Ngày 18: Bảo mật Kubernetes (Phần 2)

    • Lý thuyết:

      • Sử dụng các công cụ quét lỗ hổng bảo mật như Aqua Security, Twistlock để kiểm tra các images và cluster.

      • Cấu hình audit logging để theo dõi các hoạt động trong cluster.

      • Sử dụng các kỹ thuật mã hóa để bảo vệ dữ liệu nhạy cảm.

      • Áp dụng các nguyên tắc least privilege và defense in depth để tăng cường bảo mật.

    • Bài tập:

      • Sử dụng Aqua Security hoặc Twistlock để quét lỗ hổng bảo mật trong các images và cluster.

      • Cấu hình audit logging để ghi lại các hoạt động của người dùng và các sự kiện quan trọng trong cluster.

      • Mã hóa các secrets và dữ liệu nhạy cảm trong etcd.

      • Áp dụng các nguyên tắc least privilege và defense in depth để bảo vệ cluster Kubernetes.

  • Ngày 19: Kiến trúc Kubernetes

    • Lý thuyết:

      • Tìm hiểu về các kiến trúc Kubernetes nâng cao như multi-cluster, hybrid cloud, edge computing.

      • Sử dụng các công cụ như KubeFed, Cluster API để quản lý các multi-cluster.

      • Tích hợp Kubernetes với các nền tảng cloud khác nhau như AWS, Azure, Google Cloud.

      • Triển khai Kubernetes trên các thiết bị edge.

    • Bài tập:

      • Cài đặt và cấu hình KubeFed để quản lý một multi-cluster.

      • Sử dụng Cluster API để tạo và quản lý các cluster Kubernetes trên AWS.

      • Tích hợp Kubernetes với AWS EKS hoặc Azure AKS.

      • Triển khai Kubernetes trên một Raspberry Pi.

Ngày 20: Ôn tập và thực hành Bài tập:

  1. Thiết lập một cluster Kubernetes HA 3 nodes từ đầu bằng kubeadm, sử dụng CRI-O làm container runtime.

  2. Cài đặt và cấu hình MetalLB và Ingress Controller trên cluster.

  3. Tạo deployment cho một ứng dụng web có kết nối tới một database sử dụng ConfigMap và Secret.

  4. Viết một NetworkPolicy để chặn tất cả các truy cập vào một namespace cụ thể, ngoại trừ các port 80 và 443.

  5. Sử dụng Prometheus và Grafana để giám sát tài nguyên sử dụng và hiệu năng của một deployment cụ thể.

  6. Tạo PodDisruptionBudget và cấu hình deployment sao cho ứng dụng luôn có ít nhất 50% số replicas khả dụng trong quá trình cập nhật hoặc bảo trì node.

  7. Sử dụng Kubernetes Auditing để theo dõi các hoạt động trong cluster và lưu logs vào một file cụ thể.

  8. Tạo một service tài khoản với quyền hạn cụ thể và sử dụng nó trong một deployment.

  9. Sử dụng Init Container để copy file cấu hình vào container chính trước khi ứng dụng khởi động.

  10. Sử dụng certbot và Let's Encrypt để tự động cấp chứng chỉ SSL cho Ingress với tên miền tùy chỉnh.

Ngày 21: Thực hành kiến trúc và cài đặt Kubernetes Bài tập:

  1. Cài đặt Kubernetes cluster với 1 master node và 2 worker nodes sử dụng containerd làm container runtime.

  2. Định cấu hình kubelet để sử dụng một DNS server riêng cho việc phân giải tên miền.

  3. Nâng cấp một cluster Kubernetes lên một phiên bản mới hơn với zero downtime.

  4. Triển khai một ứng dụng web trên Kubernetes cluster với khả năng tự động mở rộng theo CPU usage.

  5. Cài đặt và cấu hình một giải pháp CNI (ví dụ: Calico) trên cluster.

  6. Sao lưu và khôi phục etcd database.

  7. Cấu hình RBAC cho một user cụ thể với quyền chỉ đọc trên một namespace cụ thể.

  8. Sử dụng kubeadm để cài đặt một cluster với một chứng chỉ CA tùy chỉnh.

  9. Sử dụng kubeadm để cài đặt một cluster với một cấu hình kubelet tùy chỉnh.

  10. Thiết lập một cluster Kubernetes với containerd và CRI-O trên cùng một node.

Ngày 22: Thực hành quản lý tài nguyên Bài tập:

  1. Cấu hình ResourceQuota cho một namespace để giới hạn tổng số tài nguyên có thể sử dụng trong namespace đó.

  2. Tạo một LimitRange để định nghĩa giới hạn tài nguyên mặc định cho các pod trong một namespace.

  3. Tạo một pod với yêu cầu và giới hạn tài nguyên cụ thể, và quan sát hành vi khi pod vượt quá giới hạn.

  4. Sử dụng Vertical Pod Autoscaler để tự động điều chỉnh yêu cầu và giới hạn tài nguyên của một deployment dựa trên việc sử dụng thực tế.

  5. Sử dụng Horizontal Pod Autoscaler để tự động mở rộng một deployment khi CPU usage vượt quá 80%.

  6. Sử dụng Cluster Autoscaler để tự động mở rộng số lượng worker nodes khi không đủ tài nguyên để lập lịch các pod.

  7. Tạo và sử dụng một PriorityClass để ưu tiên các pod quan trọng hơn trong trường hợp tài nguyên hạn chế.

  8. Cấu hình và sử dụng Kubernetes DaemonSet để chạy một pod trên mỗi node của cluster.

  9. Sử dụng Kubernetes Jobs để chạy các tác vụ một lần và đảm bảo chúng hoàn thành thành công.

  10. Sử dụng Kubernetes CronJob để lên lịch chạy một tác vụ định kỳ, ví dụ: lấy dữ liệu backup mỗi đêm.

Ngày 23: Thực hành nâng cao Bài tập:

  1. Cấu hình và sử dụng Istio để kiểm soát lưu lượng trong một ứng dụng vi dịch trên Kubernetes.

  2. Triển khai Kubernetes cluster trên AWS sử dụng EKS.

  3. Cấu hình Kubernetes RBAC để hạn chế quyền truy cập vào Kubernetes API cho các service account khác nhau.

  4. Sử dụng Helm để đóng gói và triển khai một ứng dụng phức tạp trên Kubernetes.

  5. Cấu hình một CI/CD pipeline để tự động triển khai ứng dụng lên Kubernetes mỗi khi có thay đổi trong mã nguồn.

  6. Sử dụng Kubernetes StatefulSet để triển khai một ứng dụng yêu cầu trạng thái (stateful), chẳng hạn như MongoDB.

  7. Cấu hình Kubernetes NetworkPolicy để hạn chế lưu lượng mạng giữa các pod và namespace khác nhau.

  8. Sử dụng Kubernetes admission controller để thực thi các chính sách bảo mật trên cluster.

  9. Triển khai Kubernetes cluster trên GCP sử dụng GKE.

  10. Tích hợp Kubernetes với một hệ thống giám sát và cảnh báo bên ngoài, chẳng hạn như Prometheus và Alertmanager.

Ngày 24: Thực hành xử lý sự cố Bài tập:

  1. Một pod bị stuck ở trạng thái "Pending". Hãy tìm nguyên nhân và giải pháp khắc phục.

  2. Một pod không thể truy cập được service của pod khác trong cùng namespace. Hãy debug và tìm cách sửa.

  3. Một node trong cluster không thể kết nối được với các node khác. Hãy tìm nguyên nhân và giải pháp.

  4. Kube-proxy trên một node không hoạt động. Hãy debug và tìm cách sửa.

  5. Khi truy cập vào một pod, lỗi "Connection refused" xuất hiện. Hãy tìm nguyên nhân và cách khắc phục.

  6. Một pod bị hết tài nguyên và liên tục bị kill và restart. Hãy tìm nguyên nhân và giải pháp.

  7. Kubectl trên máy client không thể kết nối đến API server. Hãy debug và tìm cách sửa.

  8. Một pod không thể mount một PersistentVolume. Hãy tìm nguyên nhân và cách khắc phục.

  9. Ingress controller không hoạt động và không điều hướng được traffic. Hãy debug và tìm cách sửa.

  10. Một pod không thể kết nối ra ngoài internet. Hãy tìm nguyên nhân và cách khắc phục.

Ngày 25: Thực hành công cụ và kỹ năng nâng cao Bài tập:

  1. Cài đặt và cấu hình một hệ thống logging tập trung (ví dụ: EFK stack) để thu thập, lưu trữ và phân tích logs từ cluster.

  2. Thiết lập một hệ thống giám sát và cảnh báo sử dụng Prometheus và Grafana, với các cảnh báo tùy chỉnh dựa trên các metrics quan trọng.

  3. Cấu hình và triển khai một ứng dụng sử dụng Kubernetes Operator, như Prometheus Operator hoặc Elasticsearch Operator.

  4. Sử dụng Kubernetes Dynamic Volume Provisioning để tự động cung cấp và quản lý storage cho các ứng dụng.

  5. Cài đặt và sử dụng một công cụ quản lý secrets như HashiCorp Vault hoặc AWS Secrets Manager để bảo vệ các thông tin nhạy cảm.

  6. Thiết lập một pipeline CI/CD sử dụng các công cụ như Jenkins, GitLab CI/CD, hoặc Azure DevOps để tự động hóa việc kiểm tra và triển khai ứng dụng.

  7. Sử dụng Kubernetes admission controllers như PodSecurityPolicy hoặc OPA Gatekeeper để thực thi các chính sách bảo mật và tuân thủ trên toàn cluster.

  8. Cấu hình và sử dụng một service mesh như Linkerd hoặc Consul Connect để cung cấp các tính năng như mã hóa lưu lượng, xác thực, và điều khiển lưu lượng.

  9. Tích hợp Kubernetes với một nền tảng serverless như Knative hoặc OpenFaaS để chạy các ứng dụng serverless trên cluster.

  10. Sử dụng Kubernetes Federation (KubeFed) để quản lý và điều phối nhiều cluster Kubernetes từ một điểm điều khiển trung tâm.

Bài tập thêm

  1. Tạo một Role và RoleBinding để cấp quyền cho một user cụ thể trong một namespace.

  2. Sử dụng Kubeadm để cài đặt một cluster Kubernetes cơ bản với một master node và hai worker nodes.

  3. Cấu hình High Availability cho Kubernetes cluster với ba master nodes sử dụng HAProxy và Keepalived.

  4. Sử dụng Terraform để tạo và cấu hình infrastructure trên AWS cho việc triển khai Kubernetes cluster.

  5. Thực hiện nâng cấp phiên bản Kubernetes cluster từ 1.18 lên 1.19 sử dụng Kubeadm.

  6. Cấu hình etcd snapshot và backup định kỳ, sau đó thực hiện restore từ một snapshot.

  7. Tạo một Deployment với 3 replicas và thực hiện rolling update để cập nhật image của container.

  8. Tạo một ConfigMap và Secret, sau đó sử dụng chúng để cấu hình cho một ứng dụng.

  9. Mở rộng số replicas của một Deployment từ 3 lên 5 và thu nhỏ lại về 2.

  10. Tạo một Deployment với readiness và liveness probes để đảm bảo tính sẵn sàng và tự phục hồi của ứng dụng.

  11. Cấu hình resource limits và requests cho một Pod và quan sát cách chúng ảnh hưởng đến việc lập lịch Pod.

  12. Sử dụng Helm để quản lý và triển khai một ứng dụng phức tạp.

  13. Cấu hình network plugin cho cluster sử dụng Calico.

  14. Tạo một NetworkPolicy để hạn chế truy cập giữa các Pods trong cùng một namespace.

  15. Tạo một Service với type LoadBalancer và quan sát cách nó tương tác với Endpoints.

  16. Cấu hình Ingress controller (nginx) và tạo Ingress resources để expose ứng dụng ra bên ngoài.

  17. Cấu hình CoreDNS để thêm custom domain cho services trong cluster.

  18. So sánh và lựa chọn giữa Flannel và Calico cho kịch bản triển khai cụ thể.

  19. Tạo một StorageClass sử dụng AWS EBS và sử dụng nó để tạo PersistentVolumeClaim.

  20. Tạo một PersistentVolume với các access modes và reclaim policies khác nhau.

  21. Cấu hình một ứng dụng để sử dụng PersistentVolumeClaim để ghi dữ liệu.

  22. Cấu hình cluster-level logging sử dụng Elasticsearch, Fluentd và Kibana (EFK stack).

  23. Cấu hình ứng dụng để gửi logs đến Elasticsearch sử dụng Fluentd.

  24. Sử dụng Prometheus và Grafana để giám sát một ứng dụng trong cluster.

  25. Cấu hình một Pod để gửi logs stdout và stderr đến Elasticsearch.

  26. Troubleshoot một Pod không thể khởi động do lỗi ImagePullBackOff.

  27. Troubleshoot một Pod không thể truy cập đến một Service trong cùng namespace.

  28. Troubleshoot một Node không thể join vào cluster do lỗi certificate.

  29. Tạo một PodDisruptionBudget cho một ứng dụng để đảm bảo tính khả dụng trong quá trình bảo trì.

  30. Sử dụng Kubeadm để thêm một Node mới vào cluster đã có.

  31. Cấu hình RBAC để cho phép một ServiceAccount chỉ có quyền đọc trong một namespace cụ thể.

  32. Sử dụng Kubeadm để nâng cấp Kubernetes version trên một Node.

  33. Tạo một CronJob để chạy một tác vụ backup định kỳ.

  34. Sử dụng init container để thiết lập các điều kiện tiên quyết trước khi khởi động main container.

  35. Cấu hình một Deployment với readiness probe để kiểm tra kết nối database trước khi cho phép traffic.

  36. Sử dụng PodAffinity và PodAntiAffinity để đặt ràng buộc vị trí cho các Pods.

  37. Tạo một DaemonSet để chạy một agent trên tất cả các Nodes.

  38. Cấu hình NetworkPolicy để cho phép truy cập từ một namespace này sang namespace khác.

  39. Sử dụng PersistentVolume với access mode ReadWriteMany để chia sẻ dữ liệu giữa nhiều Pods.

  40. Cấu hình một Job để chạy một tác vụ backup dữ liệu sử dụng PersistentVolumeClaim.

  41. Troubleshoot một Pod bị pending do thiếu tài nguyên trên Node.

  42. Troubleshoot một Ingress không thể route traffic đến đúng Service.

  43. Troubleshoot một PersistentVolumeClaim không thể bound vì StorageClass không đúng.

  44. Tạo một StatefulSet với một headless Service để quản lý các ứng dụng stateful.

  45. Cấu hình một Deployment để sử dụng một ConfigMap để lưu trữ cấu hình ứng dụng.

  46. Sử dụng SecurityContext để đặt quyền và giới hạn cho một Pod.

  47. Tạo một ServiceAccount với quyền hạn cụ thể và sử dụng nó trong một Deployment.

  48. Sử dụng ResourceQuota để giới hạn tài nguyên có thể sử dụng trong một namespace.

  49. Cấu hình một Pod để sử dụng một EmptyDir volume để chia sẻ dữ liệu tạm thời giữa các containers.

  50. Troubleshoot một Service không thể truy cập từ bên ngoài cluster do sai cấu hình Endpoints.