Học để thi CKAD trong 25 ngày

Tuần 1: Nền tảng Container và Kubernetes

  • Ngày 1:

    • Ôn lại kiến thức Docker: image, container, Dockerfile, registry

    • Tạo và quản lý container image cơ bản, sử dụng Docker CLI

    • Tìm hiểu về Kubernetes: các thành phần chính, kiến trúc, lợi ích

    • Bài tập:

      1. Tạo một Dockerfile đơn giản từ một ứng dụng Node.js

      2. Build và chạy container từ Dockerfile vừa tạo

      3. Push image lên Docker Hub

      4. Cài đặt Minikube hoặc Kind để tạo Kubernetes cluster

      5. Khám phá Kubernetes dashboard và các tài nguyên cơ bản

  • Ngày 2:

    • Tìm hiểu về Pod, Deployment, Service, Namespace trong Kubernetes

    • Thực hành tạo Pod, Deployment và Service đơn giản

    • Làm quen với kubectl, câu lệnh cơ bản và quản lý tài nguyên

    • Bài tập:

      1. Tạo một Pod chạy ứng dụng Nginx

      2. Tạo một Deployment để quản lý Pod Nginx

      3. Tạo một Service để expose Pod Nginx

      4. Sử dụng kubectl get, describe, logs để kiểm tra Pod, Deployment, Service

      5. Tạo một Namespace mới và triển khai ứng dụng vào Namespace đó

  • Ngày 3:

    • Tìm hiểu về Persistent Volume (PV), Persistent Volume Claim (PVC)

    • Thực hành sử dụng PV và PVC để lưu trữ dữ liệu

    • Tìm hiểu ConfigMap và Secret, thực hành tạo và sử dụng

    • Bài tập:

      1. Tạo một PV sử dụng hostPath

      2. Tạo một PVC để yêu cầu dung lượng lưu trữ

      3. Tạo một Pod sử dụng PVC để mount volume

      4. Tạo một ConfigMap chứa các biến môi trường

      5. Tạo một Secret chứa thông tin nhạy cảm

  • Ngày 4:

    • Tìm hiểu về ServiceAccount và RBAC (Role-Based Access Control)

    • Thực hành phân quyền trong Kubernetes

    • Tìm hiểu LivenessProbe và ReadinessProbe, thực hành kiểm tra tình trạng Pod

    • Bài tập:

      1. Tạo một ServiceAccount mới

      2. Tạo một Role và RoleBinding để phân quyền cho ServiceAccount

      3. Tạo một Pod sử dụng ServiceAccount vừa tạo

      4. Thêm LivenessProbe và ReadinessProbe vào Pod Nginx

      5. Kiểm tra hoạt động của LivenessProbe và ReadinessProbe

  • Ngày 5:

    • Tìm hiểu về Ingress và Ingress Controller (Nginx, Traefik)

    • Thực hành cấu hình Ingress để expose ứng dụng

    • Ôn tập kiến thức tuần 1, làm các bài tập và lab thực hành

    • Bài tập:

      1. Cài đặt Nginx Ingress Controller

      2. Tạo một Ingress để expose ứng dụng Nginx

      3. Kiểm tra hoạt động của Ingress bằng cách truy cập ứng dụng qua tên miền

      4. Tạo một Ingress với nhiều rule để expose nhiều ứng dụng

      5. Tìm hiểu về các annotation của Ingress và cách sử dụng

Tuần 2: Kubernetes Nâng cao và Mở rộng

  • Ngày 6:

    • Tìm hiểu về Custom Resource Definition (CRD) và Operators

    • Thực hành tạo CRD đơn giản và sử dụng Operator có sẵn

    • Tìm hiểu về Helm: package manager của Kubernetes

    • Bài tập:

      1. Tạo một CRD đơn giản để quản lý ứng dụng web

      2. Tìm và cài đặt một Operator có sẵn để quản lý CRD vừa tạo

      3. Tìm hiểu về Helm chart và các thành phần của chart

      4. Cài đặt một ứng dụng sử dụng Helm chart có sẵn

      5. Tạo một Helm chart đơn giản để đóng gói ứng dụng của bạn

  • Ngày 7:

    • Thực hành sử dụng Helm để cài đặt và quản lý ứng dụng

    • Tìm hiểu về NetworkPolicy và cách kiểm soát traffic trong Kubernetes

    • Thực hành tạo NetworkPolicy để giới hạn truy cập

    • Bài tập:

      1. Sử dụng Helm để nâng cấp và rollback ứng dụng

      2. Tạo một NetworkPolicy chỉ cho phép traffic từ một namespace cụ thể

      3. Tạo một NetworkPolicy chỉ cho phép traffic đến một port cụ thể

      4. Tạo một NetworkPolicy sử dụng label để chọn Pod

      5. Tìm hiểu về các loại NetworkPolicy khác nhau và cách sử dụng

  • Ngày 8:

    • Tìm hiểu các design pattern trong Kubernetes: sidecar, init container, ambassador

    • Thực hành sử dụng các pattern này để giải quyết các vấn đề cụ thể

    • Tìm hiểu về Horizontal Pod Autoscaler (HPA)

    • Bài tập:

      1. Tạo một Pod sử dụng sidecar container để logging

      2. Tạo một Pod sử dụng init container để khởi tạo database

      3. Sử dụng ambassador pattern để định tuyến traffic đến các service khác nhau

      4. Cấu hình HPA để scale Pod Nginx dựa trên CPU usage

      5. Tìm hiểu về các metric khác nhau có thể sử dụng để scale Pod

  • Ngày 9:

    • Thực hành sử dụng HPA để scale ứng dụng tự động

    • Tìm hiểu về các chiến lược deployment: rolling update, blue/green, canary

    • Thực hành các chiến lược deployment này

    • Bài tập:

      1. Thực hiện rolling update cho Deployment Nginx

      2. Thực hiện blue/green deployment cho ứng dụng mới

      3. Thực hiện canary deployment cho ứng dụng mới

      4. Tìm hiểu về các công cụ hỗ trợ deployment như Spinnaker, ArgoCD

      5. Tìm hiểu về các khái niệm liên quan đến deployment như rollout, rollback, history

  • Ngày 10:

    • Ôn tập kiến thức tuần 2, làm các bài tập và lab thực hành

    • Đọc thêm tài liệu về Kubernetes architecture và networking

    • Bài tập:

      1. Tạo một sơ đồ kiến trúc Kubernetes cluster của bạn

      2. Giải thích cách hoạt động của Kubernetes networking

      3. Tìm hiểu về các khái niệm như CNI, kube-proxy, service mesh

      4. Đọc tài liệu về Kubernetes architecture trên website của Kubernetes

      5. Tham gia các diễn đàn và cộng đồng Kubernetes để trao đổi kiến thức

Tuần 3: Kubernetes Chuyên sâu và Luyện tập

Ngày 11: Kubernetes API

  • Lý thuyết:

    • Tìm hiểu về Kubernetes API: các nhóm tài nguyên, versioning, RESTful API

    • Cách tương tác với Kubernetes API bằng curl và các thư viện client (Python, Go,...)

    • Các khái niệm quan trọng: API group, resource, verb, request/response format

  • Bài tập:

    1. Sử dụng curl để lấy danh sách Pod trong cluster

    2. Sử dụng curl để tạo một Pod mới

    3. Sử dụng curl để cập nhật một Deployment

    4. Sử dụng thư viện client Python để lấy danh sách Node

    5. Sử dụng thư viện client Go để tạo một Service

Ngày 12: Kubernetes Scheduler

  • Lý thuyết:

    • Tìm hiểu về Kubernetes scheduler: vai trò, cách hoạt động, các thành phần

    • Các thuật toán scheduling: LeastRequestedPriority, BalancedResourceAllocation, PriorityClass

    • Các yếu tố ảnh hưởng đến scheduling: resource request/limit, nodeSelector, affinity/anti-affinity

  • Bài tập:

    1. Tìm hiểu về các thuật toán scheduling khác nhau và cách cấu hình

    2. Tạo một Pod với resource request/limit và quan sát quá trình scheduling

    3. Sử dụng nodeSelector để chỉ định Pod chạy trên một node cụ thể

    4. Sử dụng affinity để đảm bảo các Pod chạy cùng nhau trên một node

    5. Sử dụng anti-affinity để đảm bảo các Pod không chạy cùng nhau trên một node

Ngày 13: Kubernetes Controller Manager

  • Lý thuyết:

    • Tìm hiểu về Kubernetes controller manager: vai trò, cách hoạt động, các loại controller

    • Các controller quan trọng: ReplicaSetController, DeploymentController, StatefulSetController, JobController, CronJobController

    • Cách hoạt động của một controller: reconciliation loop, watch API, update object

  • Bài tập:

    1. Tìm hiểu về các loại controller khác nhau và vai trò của chúng

    2. Tạo một Deployment và quan sát quá trình hoạt động của DeploymentController

    3. Tạo một StatefulSet và quan sát quá trình hoạt động của StatefulSetController

    4. Tạo một Job và quan sát quá trình hoạt động của JobController

    5. Tạo một CronJob và quan sát quá trình hoạt động của CronJobController

Ngày 14: Kubernetes Architecture (Tổng quan)

  • Lý thuyết:

    • Ôn tập lại kiến trúc tổng quan của Kubernetes: các thành phần chính, cách chúng tương tác với nhau

    • Tìm hiểu sâu hơn về các thành phần như etcd, kube-apiserver, kube-controller-manager, kube-scheduler, kubelet, kube-proxy

    • Tìm hiểu về các khái niệm như control plane, data plane, API server, watch, informer

  • Bài tập:

    1. Vẽ sơ đồ kiến trúc Kubernetes và giải thích vai trò của từng thành phần

    2. Tìm hiểu về các cách triển khai Kubernetes khác nhau (kubeadm, kops, Rancher,...)

    3. Đọc tài liệu về Kubernetes architecture trên website của Kubernetes

    4. Tìm hiểu về các công cụ quản lý Kubernetes như Rancher, Kops

    5. Tham gia các dự án mã nguồn mở liên quan đến Kubernetes

Ngày 15: Kubernetes Networking

  • Lý thuyết:

    • Tìm hiểu về Kubernetes networking: các khái niệm cơ bản, cách hoạt động

    • Các thành phần networking quan trọng: CNI, kube-proxy, service, endpoint, ingress

    • Các loại network plugin: Flannel, Calico, Weave Net, Cilium

  • Bài tập:

    1. Tìm hiểu về các loại network plugin khác nhau và cách cấu hình

    2. Tạo một Pod và kiểm tra cách nó được gán IP

    3. Tạo một Service và kiểm tra cách nó hoạt động

    4. Tạo một Ingress và kiểm tra cách nó định tuyến traffic

    5. Tìm hiểu về các khái niệm nâng cao như service mesh, network policy

Ngày 16: Cài đặt và quản lý Kubernetes cluster

  • Mục tiêu: Làm quen với các công cụ và quy trình cài đặt, quản lý Kubernetes cluster trên các môi trường khác nhau.

  • Bài tập:

    1. Cài đặt Kubernetes trên máy local: Sử dụng Minikube hoặc kind để tạo một cluster Kubernetes đơn giản trên máy tính cá nhân.

    2. Cài đặt Kubernetes trên cloud: Sử dụng các dịch vụ Kubernetes được quản lý như Amazon EKS, Google Kubernetes Engine (GKE), hoặc Azure Kubernetes Service (AKS) để tạo một cluster trên cloud.

    3. Quản lý cluster bằng kubectl: Thực hiện các thao tác quản lý cluster cơ bản như xem thông tin node, pod, service, kiểm tra log, thực hiện các câu lệnh nâng cao.

    4. Cài đặt và sử dụng dashboard: Cài đặt Kubernetes dashboard để quản lý cluster bằng giao diện đồ họa.

    5. Tìm hiểu về các công cụ quản lý cluster khác: Nghiên cứu về Rancher, kops hoặc các công cụ khác để quản lý cluster một cách hiệu quả.

Ngày 17: Triển khai ứng dụng phức tạp

  • Mục tiêu: Thực hành triển khai các ứng dụng đa tầng, sử dụng nhiều loại tài nguyên Kubernetes.

  • Bài tập:

    1. Triển khai ứng dụng web đơn giản: Triển khai một ứng dụng web cơ bản (ví dụ: ứng dụng Node.js hoặc Python) sử dụng Deployment, Service, Ingress.

    2. Triển khai ứng dụng microservice: Triển khai một ứng dụng microservice gồm nhiều thành phần (ví dụ: frontend, backend, database), sử dụng các tài nguyên Kubernetes như Deployment, StatefulSet, ConfigMap, Secret.

    3. Sử dụng Helm: Sử dụng Helm để đóng gói và triển khai ứng dụng một cách dễ dàng và có thể tái sử dụng.

    4. Triển khai ứng dụng trên nhiều môi trường: Thực hành triển khai ứng dụng trên các môi trường khác nhau (local, cloud) để đảm bảo tính nhất quán.

    5. Tối ưu hóa ứng dụng: Sử dụng các kỹ thuật như resource request/limit, HPA, nodeSelector để tối ưu hóa hiệu suất và tài nguyên của ứng dụng.

Ngày 18: Xử lý lỗi và sự cố

  • Mục tiêu: Nắm vững các kỹ thuật xử lý lỗi và sự cố thường gặp trong Kubernetes.

  • Bài tập:

    1. Debug Pod: Sử dụng các công cụ như kubectl logs, kubectl describe, kubectl exec để kiểm tra và gỡ lỗi các vấn đề của Pod (ví dụ: Pod không khởi động được, Pod bị crash).

    2. Debug Service: Kiểm tra và gỡ lỗi các vấn đề liên quan đến Service (ví dụ: không thể truy cập ứng dụng qua Service, Service không load balancing).

    3. Debug Ingress: Kiểm tra và gỡ lỗi các vấn đề liên quan đến Ingress (ví dụ: không thể truy cập ứng dụng qua Ingress, Ingress không định tuyến đúng).

    4. Xử lý node bị down: Thực hành các bước xử lý khi một node trong cluster bị down, đảm bảo ứng dụng vẫn hoạt động bình thường.

    5. Khôi phục dữ liệu: Thực hành các bước khôi phục dữ liệu từ Persistent Volume khi xảy ra sự cố.

Ngày 19: Giám sát và logging

  • Mục tiêu: Tìm hiểu và sử dụng các công cụ giám sát và logging để theo dõi và quản lý Kubernetes cluster.

  • Bài tập:

    1. Cài đặt và sử dụng Prometheus: Cài đặt Prometheus và Grafana để thu thập và hiển thị các chỉ số giám sát của cluster và ứng dụng.

    2. Cài đặt và sử dụng Elasticsearch, Fluentd, Kibana (EFK): Cài đặt EFK stack để thu thập, lưu trữ và phân tích log của cluster và ứng dụng.

    3. Tạo dashboard giám sát: Sử dụng Grafana để tạo các dashboard tùy chỉnh để hiển thị các chỉ số quan trọng của cluster và ứng dụng.

    4. Phân tích log: Sử dụng Kibana để tìm kiếm và phân tích log để phát hiện và gỡ lỗi các vấn đề.

    5. Cảnh báo: Cấu hình cảnh báo để nhận thông báo khi có sự cố hoặc các chỉ số vượt ngưỡng.

Ngày 20: Bảo mật Kubernetes

  • Mục tiêu: Tìm hiểu và áp dụng các biện pháp bảo mật cho Kubernetes cluster.

  • Bài tập:

    1. Cấu hình RBAC: Thực hành phân quyền bằng RBAC để kiểm soát truy cập vào các tài nguyên Kubernetes.

    2. Sử dụng NetworkPolicy: Tạo NetworkPolicy để kiểm soát lưu lượng mạng giữa các Pod và namespace.

    3. Bảo mật image: Sử dụng các công cụ quét image để phát hiện và loại bỏ các lỗ hổng bảo mật trong image.

    4. Cấu hình Pod Security Policy: Tìm hiểu và cấu hình Pod Security Policy để kiểm soát các hành vi của Pod (ví dụ: chạy với quyền root, sử dụng host network).

    5. Cập nhật Kubernetes: Thường xuyên cập nhật Kubernetes lên phiên bản mới nhất để vá các lỗ hổng bảo mật.

Ngày 21: Container và Pod

  1. Tạo một container image từ Dockerfile và push lên Docker Hub.

  2. Sửa đổi một container image có sẵn và push phiên bản mới lên registry.

  3. Tạo một Pod với hai container sử dụng mẫu init container.

  4. Tạo một Pod với hai container sử dụng mẫu sidecar.

  5. Tạo một Pod với hai container sử dụng mẫu adapter.

  6. Tạo một Pod với hai container sử dụng mẫu ambassador.

  7. Tạo một Job để chạy một tác vụ một lần.

  8. Tạo một CronJob để chạy một tác vụ theo lịch.

  9. Sử dụng Volume để chia sẻ dữ liệu giữa các container trong một Pod.

  10. Sử dụng EmptyDir Volume để lưu trữ dữ liệu tạm thời.

  11. Sử dụng HostPath Volume để truy cập tệp trên node.

  12. Sử dụng PersistentVolume và PersistentVolumeClaim để lưu trữ dữ liệu liên tục.

  13. Khám phá và sử dụng một Custom Resource Definition (CRD).

  14. Tạo và sử dụng một Pod với ServiceAccount.

  15. Đặt Resource Requests và Limits cho một container.

Ngày 22: Deployment và Configuration

  1. Tạo một Deployment và thực hiện cập nhật rolling update.

  2. Thực hiện rollback một Deployment.

  3. Mở rộng (scale) một Deployment.

  4. Sử dụng Blue/Green Deployment để triển khai phiên bản mới.

  5. Sử dụng Canary Deployment để triển khai phiên bản mới.

  6. Tạo và sử dụng một ConfigMap để lưu trữ cấu hình.

  7. Tạo và sử dụng một Secret để lưu trữ thông tin nhạy cảm.

  8. Cấu hình Liveness Probe cho một container.

  9. Cấu hình Readiness Probe cho một container.

  10. Cấu hình Startup Probe cho một container.

  11. Sử dụng Helm để triển khai một ứng dụng có sẵn.

  12. Tạo một Helm Chart để đóng gói ứng dụng của bạn.

  13. Sử dụng Helm để quản lý môi trường (dev, staging, prod).

  14. Cấu hình Resource Quotas cho một namespace.

  15. Cấu hình và sử dụng HorizontalPodAutoscaler (HPA).

Ngày 23: Network và Security

  1. Expose một ứng dụng sử dụng ClusterIP Service.

  2. Expose một ứng dụng sử dụng NodePort Service.

  3. Expose một ứng dụng sử dụng LoadBalancer Service.

  4. Cấu hình Ingress để expose nhiều ứng dụng.

  5. Cấu hình TLS cho Ingress.

  6. Triển khai một ứng dụng với nhiều replica và cân bằng tải sử dụng Service.

  7. Cấu hình NetworkPolicy để hạn chế truy cập giữa các Pod.

  8. Cấu hình NetworkPolicy dựa trên label selector.

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

  10. Cấu hình và sử dụng PodSecurityPolicy.

  11. Cấu hình và sử dụng SecurityContext cho Pod và Container.

  12. Sử dụng RBAC để phân quyền truy cập tài nguyên.

  13. Tạo một Role và RoleBinding.

  14. Tạo một ClusterRole và ClusterRoleBinding.

  15. Sử dụng ServiceAccount trong Pod để truy cập Kubernetes API.

Ngày 24: Monitoring và Logging

  1. Sử dụng kubectl để xem log của một Pod.

  2. Sử dụng kubectl để xem log của một container cụ thể trong Pod.

  3. Triển khai EFK stack (Elasticsearch, Fluentd, Kibana) để thu thập và phân tích log.

  4. Cấu hình Fluentd để thu thập log từ các container.

  5. Sử dụng Kibana để tìm kiếm và phân tích log.

  6. Cài đặt và cấu hình Prometheus để giám sát các chỉ số của cluster và ứng dụng.

  7. Cấu hình Prometheus để thu thập metrics từ các Pod.

  8. Sử dụng Grafana để trực quan hóa các metrics thu thập bởi Prometheus.

  9. Tạo dashboard Grafana để hiển thị các chỉ số quan trọng.

  10. Cấu hình cảnh báo Prometheus dựa trên các quy tắc.

  11. Sử dụng kubectl để kiểm tra trạng thái và thông tin của các tài nguyên (Pod, Deployment, Service, ...).

  12. Sử dụng kubectl để debug khi có sự cố (kiểm tra log, mô tả tài nguyên, thực thi lệnh trong container).

  13. Sử dụng kubectl để truy cập vào một Pod để debug.

  14. Giám sát việc sử dụng tài nguyên (CPU, memory) của các Pod và Node.

  15. Phân tích và giải quyết các vấn đề phổ biến (Pod pending, Pod crashloopbackoff, Node NotReady, ...).

Ngày 25: Best Practices và Ôn tập

  1. Áp dụng các best practices khi viết Dockerfile (giảm kích thước image, nguyên tắc least privilege, ...).

  2. Áp dụng các best practices về bảo mật (hạn chế sử dụng quyền root, mã hóa secrets, quét lỗ hổng, ...).

  3. Áp dụng các best practices về resource management (đặt requests và limits, sử dụng HPA, ...).

  4. Tạo template cho các tài nguyên Kubernetes (sử dụng Helm, Kustomize, ...).

  5. Tổ chức và cấu trúc các manifest file.

  6. Sử dụng các công cụ để validate (kiểm tra tính hợp lệ) của các manifest.

  7. Sử dụng các công cụ để quản lý và áp dụng các thay đổi trên các tài nguyên Kubernetes.

  8. Phân quyền và quản lý truy cập cho nhiều người dùng và nhóm.

  9. Thiết lập CI/CD pipeline để build, test và deploy ứng dụng lên Kubernetes.

  10. Thực hành các tình huống xử lý sự cố và khắc phục.

  11. Ôn tập các lệnh kubectl thông dụng.

  12. Ôn tập các khái niệm quan trọng (Pod, Deployment, Service, ConfigMap, Secret, Volume, ...).

  13. Thực hành làm một bài thi thử CKAD.

  14. Rà soát và đánh giá kết quả bài thi thử, xác định các điểm cần cải thiện.

  15. Tổng kết và xây dựng kế hoạch ôn tập cho kỳ thi CKAD.

Bài tập thêm

  1. Tạo một Dockerfile để xây dựng một container image cho ứng dụng Node.js.

  2. Tạo một container image và push nó lên Docker Hub.

  3. Tạo một Job để thực hiện một tác vụ và đảm bảo rằng nó chạy thành công.

  4. Tạo một CronJob để chạy một tác vụ vào mỗi giờ.

  5. Tạo một Pod với hai container, một container chạy ứng dụng chính và một container chạy như một sidecar để ghi log.

  6. Tạo một Pod với một init container để thiết lập cấu hình trước khi ứng dụng chính bắt đầu.

  7. Sử dụng một EmptyDir volume để chia sẻ dữ liệu giữa các container trong một Pod.

  8. Sử dụng một PersistentVolume và PersistentVolumeClaim để lưu trữ dữ liệu cho một Pod.

  9. Khám phá và sử dụng một Custom Resource Definition (CRD) có sẵn.

  10. Tạo một ServiceAccount và sử dụng nó trong một Pod.

  11. Cấu hình RBAC để giới hạn quyền truy cập vào một namespace cụ thể.

  12. Định nghĩa resource requests và limits cho một container.

  13. Tạo và sử dụng một ResourceQuota để giới hạn tài nguyên sử dụng trong một namespace.

  14. Tạo và sử dụng một ConfigMap để lưu trữ cấu hình cho một ứng dụng.

  15. Tạo và sử dụng một Secret để lưu trữ thông tin nhạy cảm cho một ứng dụng.

  16. Định nghĩa một SecurityContext cho một Pod hoặc Container.

  17. Sử dụng Deployment để triển khai một ứng dụng với chiến lược blue/green.

  18. Sử dụng Deployment để triển khai một ứng dụng với chiến lược canary.

  19. Thực hiện một bản cập nhật rolling update cho một Deployment.

  20. Sử dụng Helm để triển khai một chart có sẵn.

  21. Tạo một chart Helm để đóng gói một ứng dụng.

  22. Định nghĩa và sử dụng Liveness, Readiness và Startup Probes cho một container.

  23. Sử dụng Prometheus để giám sát một ứng dụng đang chạy trong cluster.

  24. Sử dụng Elasticsearch và Kibana để thu thập và trực quan hóa log từ các container.

  25. Sử dụng kubectl để truy cập và lấy log từ một container cụ thể.

  26. Sử dụng kubectl để debug một Pod bằng cách chạy một container tạm thời và gắn kết với nó.

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

  28. Tạo một Service để expose một ứng dụng trong cluster.

  29. Khắc phục sự cố khi không thể truy cập vào một ứng dụng thông qua Service.

  30. Cấu hình một Ingress để expose một ứng dụng ra bên ngoài cluster.

  31. Sử dụng Init Container để delay việc khởi động một Pod cho đến khi một điều kiện được đáp ứng.

  32. Sử dụng PodAffinity và PodAntiAffinity để đặt ràng buộc trong việc lập lịch Pod.

  33. Sử dụng NodeSelector để đặt ràng buộc một Pod chạy trên một Node cụ thể.

  34. Sử dụng PodDisruptionBudget để đảm bảo tính sẵn sàng của ứng dụng trong quá trình cập nhật hoặc bảo trì.

  35. Sử dụng HorizontalPodAutoscaler để tự động mở rộng số lượng Pod dựa trên mức sử dụng CPU.