7. Kubernetes on the Cloud
Mục lục
- 1. Tổng quan: Các lựa chọn deploy Kubernetes lên Cloud
- 2. Demo: Deploy Voting App lên Google Kubernetes Engine (GKE)
- 3. Demo: Deploy Voting App lên AWS EKS
- 4. Demo: Deploy Voting App lên Azure AKS
Kubernetes on the Cloud
1. Tổng quan: Các lựa chọn deploy Kubernetes lên Cloud
Trong phần này, chúng ta sẽ xem qua các lựa chọn khác nhau để deploy một Kubernetes cluster lên cloud. Trong phạm vi khóa học dành cho người mới bắt đầu này, chỉ xem hình thức đơn giản nhất để bắt đầu với Kubernetes trên từng nền tảng cloud: Google Cloud, AWS, và Azure.
Với mục đích production, có rất nhiều cách để bắt đầu với một Kubernetes cluster, cả trong môi trường private lẫn public cloud. Có thể phân loại chúng thành 2 nhóm: self-hosted hay turnkey solutions, và hosted hay managed solutions.
Turnkey solutions là hình thức tự provision các VM cần thiết, rồi dùng một số tool hoặc script để cấu hình Kubernetes cluster trên đó. Kết cục là phải tự chịu trách nhiệm bảo trì các VM đó — patch, upgrade,... Nhưng việc provision cluster và quản lý vòng đời (lifecycle) của cluster phần lớn được đơn giản hóa nhờ các tool và script có sẵn. Ví dụ, deploy 1 Kubernetes cluster trên AWS có thể làm dễ dàng bằng các tool như kops hay KubeOne,... Trong khóa Certified Kubernetes Administrators (CKA), có phần thực hành setup Kubernetes cluster bằng tool kubeadm.
Hosted solutions hay managed solutions giống như một dạng "Kubernetes as a service" — cluster cùng các VM cần thiết được provider deploy sẵn, và Kubernetes cũng được provider cấu hình. Các VM do provider bảo trì. Ví dụ, Google Container Engine, hay Google Kubernetes Engine (GKE), cho phép provision 1 Kubernetes cluster chỉ trong vài phút với vài cú click, mà không cần tự cấu hình gì cả. Trong các môi trường này, thường sẽ không có quyền truy cập vào master node, hoặc nhiều khả năng không truy cập được vào chính các VM đó để thực hiện bất kỳ thay đổi cấu hình nào trên master node — version Kubernetes và master node đều do provider quản lý.
💡 Hình dung như thế này: Turnkey solution giống như tự mua đất, tự xây nhà, rồi tự sửa ống nước hay đường điện mỗi khi hỏng — toàn quyền kiểm soát, nhưng cũng tự gánh mọi việc bảo trì. Managed solution giống như thuê 1 căn hộ chung cư có ban quản lý lo sẵn toàn bộ hạ tầng (điện, nước, thang máy) — chỉ cần dọn đồ vào ở (deploy ứng dụng của mình lên) mà không cần đụng tới phần móng nhà (control plane, master node).
Đó là những gì phần này của khóa học sẽ đề cập. Cụ thể, sẽ xem cách deploy ứng dụng voting mẫu (example voting application) lên Google Kubernetes Engine trên Google Cloud, Azure Kubernetes Service, và giải pháp AWS EKS. Lưu ý mỗi nền tảng này đều xứng đáng có hẳn 1 khóa học riêng, và ở đây chỉ xem cách đơn giản nhất để bắt đầu. Phần lớn các khái niệm đã học xuyên suốt khóa học này về Kubernetes không thay đổi và áp dụng được cho bất kỳ môi trường Kubernetes nào trong số này. Tất cả những gì cần làm là provision 1 managed Kubernetes cluster, rồi tái sử dụng lại các file Deployment và Service definition đã tạo trước đó, và xem cách deploy cùng một ứng dụng đó trên tất cả các nền tảng khác nhau này.
Cũng lưu ý đây không phải là demo deploy 1 Kubernetes cluster ở mức production-grade — để làm điều đó, cần hiểu rõ các khái niệm được thảo luận trong các khóa CKA và CKAD. Đây chỉ là hướng dẫn cơ bản để deploy cùng một ứng dụng trong môi trường học tập trên các nền tảng cloud khác nhau, theo hình thức đơn giản nhất.
2. Demo: Deploy Voting App lên Google Kubernetes Engine (GKE)
Trước khi bắt đầu, cần có quyền truy cập vào một Google Cloud account. Google cung cấp bản dùng thử miễn phí 12 tháng kèm $300 credit, đủ để theo hết hướng dẫn này. Ngoài ra cần hiểu cơ bản về GCP console và cách dùng shell, vì các bước cấu hình sẽ thực hiện trực tiếp trên cloud console.
Tạo cluster. Sau khi đăng nhập GCP console, tìm đến project của bạn — trong ví dụ này dùng project tên "Example Voting App". Các bước để cấu hình GKE:
- Click vào navigation menu ở góc trên bên trái.
- Trong mục Compute, chọn Kubernetes Engine.
- Trong phần Kubernetes Engine, click Create Cluster.
Cluster Settings:
- Đổi tên cluster thành "Example Voting App".
- Dùng giá trị mặc định cho location type và zone.
- Với master version, có thể chọn 1 version cố định hoặc 1 release channel để tự động upgrade — với demo này, giữ nguyên mặc định.
Còn có các tùy chọn khác cho worker node như cấu hình VM type hoặc size, nhưng giá trị mặc định là đủ dùng cho hướng dẫn này.
Sau khi cấu hình xong, click Create để bắt đầu provision cluster. Quá trình này thường mất từ 5 đến 10 phút, có thể theo dõi tiến trình bằng cách click nút Refresh. Khi cluster setup hoàn tất, sẽ thấy dấu tích xanh (green check mark) bên cạnh tên cluster.
Kết nối tới cluster. Cách đơn giản nhất để kết nối tới cluster là click nút Connect. Click Connect sẽ hiện ra command cần thiết để cấu hình kubectl bằng Cloud Shell. Sau khi Cloud Shell mở ra (có thể phóng to cửa sổ cho tiện), chạy command được cung cấp:
gcloud container clusters get-credentials example-voting-app --zone us-central1-c --project example-voting-app-283506
Command này cập nhật cấu hình kubectl để có thể tương tác với GKE cluster. Để xác nhận kết nối, chạy:
kubectl get nodes
Output sẽ tương tự như sau:
NAME STATUS ROLES AGE VERSION
gke-example-voting-app-default-pool-e388a8c8-46b0 Ready <none> 86s v1.14.10-gke.36
gke-example-voting-app-default-pool-e388a8c8-bjx4 Ready <none> 95s v1.14.10-gke.36
gke-example-voting-app-default-pool-e388a8c8-rp73 Ready <none> 94s v1.14.10-gke.36
Đủ 3 node, cả 3 đều Ready — đúng số lượng node mặc định của cluster vừa tạo. Cột ROLES để trống (<none>) vì đây là managed cluster: GKE không lộ role master/worker theo cách hiển thị như cluster tự dựng bằng kubeadm.
Deploy ứng dụng. Bắt đầu bằng cách clone repository, sau đó vào đúng thư mục chứa Kubernetes specifications:
git clone <repository-url>
cd example-voting-app
cd k8s-specifications
ls
Sẽ thấy các file tương tự:
postgres-deploy.yaml redis-deploy.yaml result-app-deploy.yaml voting-app-deploy.yaml worker-app-deploy.yaml
postgres-service.yaml redis-service.yaml result-app-service.yaml voting-app-service.yaml
Cập nhật Service definitions. Để ứng dụng hoạt động trơn tru trong môi trường cloud, có 1 thay đổi nhỏ trong các service definition. Ví dụ, file voting service YAML giờ dùng LoadBalancer thay vì NodePort:
apiVersion: v1
kind: Service
metadata:
name: voting-service
labels:
name: voting-service
app: demo-voting-app
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 80
selector:
name: voting-app-pod
app: demo-voting-app
type đổi từ NodePort sang LoadBalancer — trên các managed cloud được hỗ trợ (GCP, AWS, Azure), LoadBalancer sẽ tự động provision 1 load balancer thật của cloud provider thay vì chỉ mở 1 port cố định trên từng node (khái niệm LoadBalancer Service đã giới thiệu ở Part 5, mục 5). Cập nhật tương tự cũng áp dụng cho service của result app.
Tạo Kubernetes objects. Tạo các Kubernetes object theo đúng thứ tự dưới đây để đảm bảo quản lý dependency:
- Deploy voting application và service tương ứng.
- Deploy Redis (cả deployment và service).
- Deploy PostgreSQL (cả deployment và service).
- Deploy worker application.
- Deploy result application và service tương ứng.
Có thể tạo từng object riêng lẻ:
kubectl create -f voting-app-deploy.yaml
kubectl create -f voting-app-service.yaml
kubectl create -f redis-deploy.yaml
kubectl create -f redis-service.yaml
kubectl create -f postgres-deploy.yaml
kubectl create -f postgres-service.yaml
kubectl create -f worker-app-deploy.yaml
kubectl create -f result-app-deploy.yaml
kubectl create -f result-app-service.yaml
Hoặc tạo tất cả object cùng lúc:
kubectl create -f .
Sau khi chạy các command tạo object, kiểm tra xem deployment và service đã được tạo thành công chưa:
kubectl get deployments,svc
Output sẽ tương tự như sau:
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.extensions/postgres-deploy 1/1 1 1 34s
deployment.extensions/redis-deploy 1/1 1 1 43s
deployment.extensions/result-app-deploy 1/1 1 1 20s
deployment.extensions/voting-app-deploy 1/1 1 1 52s
deployment.extensions/worker-app-deploy 0/1 1 0 26s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/db ClusterIP 10.71.3.164 <none> 5432/TCP 30s
service/kubernetes ClusterIP 10.71.0.1 <none> 443/TCP 5m58s
service/redis ClusterIP 10.71.2.124 <none> 6379/TCP 39s
service/result-service LoadBalancer 10.71.3.179 <pending> 80:30764/TCP 13s
service/voting-service LoadBalancer 10.71.0.147 <pending> 80:31036/TCP 48s
Cột READY của worker-app-deploy đang là 0/1 — worker vừa mới tạo, container còn đang khởi động nên chưa kịp sẵn sàng, chạy lại lệnh sau vài giây sẽ thấy chuyển thành 1/1. Cả 2 service LoadBalancer (result-service, voting-service) đều hiện EXTERNAL-IP là <pending>.
💡 Lưu ý external IP của load balancer ban đầu có thể hiện
<pending>. Chờ vài phút rồi chạy lại command để xác nhận IP đã được gán.
Kiểm tra cấu hình Load Balancer. Sau khi mọi deployment đã ready và pod đang chạy, kiểm tra cấu hình load balancer trong GCP console. Vào mục Services & Ingress trong phần Kubernetes Engine — ở đây sẽ thấy các internal service (như PostgreSQL và Redis) cũng như các front-end service dùng load balancer gốc (native) của cloud provider. Click vào từng service để xem chi tiết ClusterIP, load balancer IP, và URL endpoint, đảm bảo mọi status đều là OK.
Kiểm tra ứng dụng. Sau khi load balancer được gán external IP, mở 1 tab trình duyệt mới, truy cập external IP của voting service để load giao diện voting application. Mở thêm 1 tab khác để xem results application.
Cast 1 vote và quan sát kết quả cập nhật động theo tỷ lệ phần trăm vote. Tiếp tục vote sẽ liên tục cập nhật kết quả hiển thị.
3. Demo: Deploy Voting App lên AWS EKS
Trước khi bắt đầu, cần đảm bảo đã đáp ứng các yêu cầu sau:
- Một AWS account đang hoạt động (người dùng mới có thể dùng thử miễn phí qua AWS Free Tier).
- Đã cài đặt utility kubectl.
- Kiến thức AWS cơ bản để cấu hình cluster role cho EKS, tạo IAM role cho node group, thiết lập VPC, và tạo EC2 key pair (key pair hữu ích cho việc SSH nếu cần).
- AWS CLI đã được cài đặt và cấu hình sẵn với credentials.
Cài đặt và cấu hình AWS CLI. Đầu tiên, xác nhận AWS CLI đã được cài đặt bằng cách chạy:
aws --version
Nếu chưa có AWS CLI, cài đặt bằng 1 trong các cách sau:
Trên macOS:
curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg AWSCLIV2.pkg -target /
Dùng pip3:
pip3 install awscli --upgrade --user
Sau khi cài đặt, đảm bảo AWS CLI đã được cấu hình đúng với credentials.
Cài đặt kubectl. Vì kubectl đã được cài sẵn, có thể kiểm tra version và cập nhật PATH nếu cần. Trước tiên, di chuyển binary vào 1 thư mục trong home và cập nhật PATH:
mkdir -p $HOME/bin && mv ./kubectl $HOME/bin/ && export PATH=$PATH:$HOME/bin
(Tùy chọn) Để thêm $HOME/bin vào PATH vĩnh viễn, thêm dòng sau vào file khởi tạo shell (ví dụ ~/.bash_profile):
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bash_profile
Cuối cùng, kiểm tra version của kubectl client để đảm bảo đã sẵn sàng — trên kubectl hiện tại chỉ cần chạy kubectl version --client (flag --short của lệnh gốc đã bị remove từ kubectl v1.28, xem ghi chú ở Nguồn tham khảo), output mặc định giờ đã ở dạng rút gọn tương đương:
kubectl version --client
Tạo EKS cluster. Trước khi tạo cluster, xác nhận đã thiết lập IAM role cần thiết cho EKS cluster và chuẩn bị sẵn 1 VPC (hoặc có thể dùng default VPC). Các bước thực hiện:
- Đăng nhập AWS account, vào Services.
- Tìm EKS và chọn service.
- Click Create cluster và cấu hình cluster:
- Cluster Configuration: Đặt tên cho cluster (ví dụ
example-voting-app) và giữ nguyên Kubernetes version mặc định (ví dụ 1.16). Chọn IAM role phù hợp cho cluster. - Click Next.
- Cluster Configuration: Đặt tên cho cluster (ví dụ
- Networking Configuration: Chọn default VPC trong region hiện tại (ví dụ US West 2 (Oregon 2)) và chọn tất cả subnet có sẵn.
- Tiếp tục qua các trang review bằng cách click Next, sau đó click Create. Quá trình tạo có thể mất tới 10 phút.
Khi status của cluster chuyển thành active (xuất hiện dấu tích), có thể tiếp tục thêm node group.
Thêm Node Group. Node group đại diện cho tập hợp các worker node chạy workload của ứng dụng. Để thêm node group, thực hiện các bước sau:
- Trong mục Compute của EKS cluster, click Add node group.
- Đặt tên cho node group (ví dụ
demo-workers) và chọn EKS node IAM role đã tạo trước đó. - Chọn default subnet (hoặc chọn subnet tương ứng với network setup của bạn).
- Tùy chọn: chọn 1 EC2 key pair nếu muốn cho phép SSH vào worker node.
- Trong mục Compute Configuration, xem lại các cài đặt như AMI type, instance type, và disk size. Giá trị mặc định thường là chấp nhận được.
- Thiết lập các tham số auto scaling (minimum, maximum, và desired number of nodes), review lại cấu hình, và click Create. Quá trình provisioning có thể mất vài phút.
Khi status của node group là active và các worker node đã hiển thị (dưới dạng EC2 instance), cluster đã được thiết lập đầy đủ.
Cấu hình kubectl cho EKS cluster. kubectl trên máy local có thể đang được cấu hình cho 1 cluster khác (ví dụ Minikube). Để chuyển sang AWS EKS cluster mới, cập nhật file kubeconfig bằng AWS CLI. Thay region và cluster name tương ứng:
aws eks --region us-west-2 update-kubeconfig --name example-voting-app
Command này thêm 1 context mới vào file kubeconfig (thường nằm ở ~/.kube/config) và tự chuyển context hiện tại sang context vừa thêm. Muốn xác nhận đúng kubectl đang trỏ vào context nào (ví dụ để chắc chắn không còn trỏ nhầm sang Minikube), liệt kê toàn bộ context có trong kubeconfig:
kubectl config get-contexts
# Output minh họa
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
minikube minikube minikube
* example-voting-app.us-west-2.eksctl.io example-voting-app.us-west-2.eksctl.io example-voting-app.us-west-2.eksctl.io
(Output minh họa — cấu trúc và tên field đúng theo lệnh thật, tên context cụ thể chỉ mang tính ví dụ.) Dấu * ở cột CURRENT đánh dấu context đang active — nếu vẫn thấy * ở dòng minikube thay vì dòng EKS, chuyển context thủ công bằng:
kubectl config use-context example-voting-app.us-west-2.eksctl.io
Kiểm tra cấu hình bằng cách liệt kê node:
kubectl get nodes
Sẽ thấy danh sách worker node. Lưu ý rằng trong các managed Kubernetes service như EKS, master node do AWS quản lý và không thể SSH vào cũng như không dùng để chạy workload.
Deploy ứng dụng. Bắt đầu bằng cách clone GitHub repository:
# git clone https://github.com/kODEKLOUDHUB/example-voting-app.git
Cloning into 'example-voting-app'...
remote: Enumerating objects: 12, done.
remote: Counting objects: 100% (12/12), done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 872 (delta 5), reused 11 (delta 5), pack-reused 860
Receiving objects: 100% (872/872), 958.67 KiB | 1.25 MiB/s, done.
Resolving deltas: 100% (307/307), done.
# cd example-voting-app/k8s-specifications
Bên trong thư mục k8s-specifications, sẽ thấy nhiều file YAML định nghĩa deployment và service:
postgres-deploy.yaml redis-deploy.yaml voting-app-deploy.yaml
postgres-service.yaml result-app-deploy.yaml voting-app-service.yaml
worker-app-deploy.yaml
Deploy các Kubernetes resource theo đúng thứ tự sau:
-
Voting App Deployment và Service:
kubectl create -f voting-app-deploy.yamlkubectl create -f voting-app-service.yaml -
Redis Deployment và Service:
kubectl create -f redis-deploy.yamlkubectl create -f redis-service.yaml -
PostgreSQL Deployment và Service:
kubectl create -f postgres-deploy.yamlkubectl create -f postgres-service.yaml -
Worker và Results App Deployments và Services:
kubectl create -f worker-app-deploy.yamlkubectl create -f result-app-deploy.yaml
Sau khi deploy xong các resource này, kiểm tra status bằng cách chạy:
kubectl get deployments,svc
Output sẽ tương tự như sau:
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/postgres-deploy 1/1 1 1 26s
deployment.apps/redis-deploy 1/1 1 1 34s
deployment.apps/result-app-deploy 1/1 1 1 13s
deployment.apps/voting-app-deploy 1/1 1 1 43s
deployment.apps/worker-app-deploy 0/1 1 0 18s
NAME TYPE CLUSTER-IP PORT(S) AGE
service/db ClusterIP 10.100.250.53 <none> 22s
service/kubernetes ClusterIP 10.100.0.1 443/TCP 22m
service/redis ClusterIP 10.100.46.144 443/TCP 30s
service/result-service LoadBalancer 10.100.222.36 <port-info> 9s
service/voting-service LoadBalancer 10.100.173.35 <port-info> 39s
Giống hệt tình huống ở GKE, worker-app-deploy đang 0/1 vì container còn đang khởi động — chạy lại lệnh sau vài giây sẽ thấy đủ 1/1. voting-service và result-service đều là LoadBalancer, PORT(S) hiện <port-info> cho tới khi AWS provision xong Elastic Load Balancer và gán được port/URL thật.
Sau khi tất cả deployment (kể cả worker application) đã có đủ số pod ready, truy cập ứng dụng bằng Load Balancer URL được cung cấp cho voting-service và result-service. Mở URL của voting service trên trình duyệt để xem giao diện voting — 1 trang "Cats vs Dogs!" với nút vote cho phép đổi lựa chọn vote. Vote cho lựa chọn yêu thích và xác nhận kết quả cập nhật đúng theo lựa chọn đó.
Cleanup. Sau khi xem xét ứng dụng xong, đảm bảo xóa EKS cluster và mọi resource đã deploy để tránh phát sinh chi phí không cần thiết.
4. Demo: Deploy Voting App lên Azure AKS
Trước khi bắt đầu, đảm bảo đã có 1 Azure account đang hoạt động. Nếu mới dùng Azure, tận dụng 12 tháng truy cập miễn phí và làm quen với các cấu hình Azure cơ bản.
Truy cập Azure Dashboard. Sau khi đăng nhập vào Azure account, sẽ thấy 1 dashboard hiển thị nhiều service khác nhau. Trong demo này, dùng tài khoản "KodeKloud free account". Để tìm Azure Kubernetes Service (AKS), tìm kiếm "AKS" hoặc chọn trực tiếp từ danh sách service có sẵn.
Tạo Kubernetes cluster. Vì chưa có cluster nào, cần thêm 1 cluster mới. Việc này sẽ đưa tới màn hình "Create Kubernetes cluster". Đảm bảo đã chọn đúng subscription, đặc biệt nếu đang dùng free-tier subscription.
- Resource Group: Tạo 1 resource group mới. Với mục đích demo, đặt tên là "voting app resource group".
- Cluster Name: Chọn 1 tên dễ nhận biết như "example voting app".
- Kubernetes Version: Giữ nguyên version mặc định (ví dụ 1.16).
- Node Configuration: Vì đây là demo free-tier, chọn 1 node cho node size và giữ nguyên các tùy chọn còn lại ở giá trị mặc định.
Trong mục Authentication settings, chọn tùy chọn tạo mới 1 service principal. Service principal này cho phép AKS quản lý các cloud resource liên quan một cách liền mạch.
Sau khi xác nhận cấu hình, click Review and create. Khi nút Create khả dụng, click vào để bắt đầu quá trình deploy. Quá trình bắt đầu bằng việc provision resource group, sau đó tạo Kubernetes cluster. Hãy kiên nhẫn chờ vì toàn bộ quá trình deploy có thể mất một khoảng thời gian.
Sau khi deploy thành công, Azure sẽ hiển thị thông báo xác nhận (ví dụ resource group "votingapp-resourcegroup").
Kết nối tới cluster bằng Azure Cloud Shell. Để tìm lại resource vừa tạo, gõ "voting app" vào thanh tìm kiếm của Azure. Sẽ thấy cả Kubernetes service lẫn cluster đã tạo. Tiếp theo, truy cập cluster bằng Azure Cloud Shell — xuất hiện ở phần dưới màn hình. Nếu được yêu cầu, làm theo các bước để tạo storage cho Cloud Shell.
Trong lúc Cloud Shell khởi tạo, xem qua các command cần thiết để kết nối tới AKS cluster — đây mới là preview cú pháp, chưa thật sự chạy ở bước này:
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
kubectl get nodes
# Expected Output
NAME STATUS ROLES AGE VERSION
aks-agentpool-14693408-0 Ready agent 15m v1.11.5
Giống với AWS EKS, cột ROLES ở đây hiện agent (thay vì <none> như GKE) — đây là cách AKS gọi tên vai trò của worker node, chỉ là quy ước đặt tên khác nhau giữa các provider, bản chất vẫn là node chạy workload.
Ngoài ra, có thể gặp 1 đoạn snippet trong file cấu hình Kubernetes như:
apiVersion: apps/v1
Azure Cloud Shell đã cài sẵn kubectl client, nên có thể nhanh chóng cấp quyền truy cập vào cluster.
Cấu hình kubectl trong Cloud Shell. Trong cửa sổ Cloud Shell, chạy command sau để cấu hình kubectl. Thay "myResourceGroup" và "myAKSCluster" bằng tên resource group và cluster thực tế của bạn:
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Sau khi chạy command, sẽ thấy các message tương tự:
Your cloud drive has been created in:
Subscription ID: a9415065-9776-4bf1-9708-80832eb4365d
Resource group: cloud-shell-storage-eus
Storage account: cs21032002001aa74
File share: cs-vpalazhica-gmail-com-10032002001aa74
Initializing your account for Cloud Shell...
Requesting a Cloud Shell...Succeeded.
Connecting terminal...
Welcome to Azure Cloud Shell
Type "az" to use Azure CLI
Type "help" to learn about Cloud Shell
aed2c8b3-0ba6-4e8f-b3b3-630db5d6Azure:~$
Sau khi cấu hình xong, xác nhận kết nối bằng cách chạy:
kubectl get nodes
Ví dụ, output có thể hiện như sau:
NAME STATUS ROLES AGE VERSION
aks-agentpool-29238863-vms00000 Ready agent 6m12s v1.16.10
Deploy ứng dụng Voting App. Với single-node cluster đã sẵn sàng, giờ deploy voting application. Thực hiện theo các bước sau:
-
Clone repository: Clone GitHub repository chứa các file YAML của ứng dụng.
git clone https://github.com/kodekloudhub/example-voting-app.gitcd example-voting-app/k8s-specifications/ -
Deploy các thành phần của ứng dụng: Chạy các command dưới đây theo đúng thứ tự liệt kê để deploy toàn bộ service và deployment cần thiết:
kubectl create -f voting-app-deploy.yamlkubectl create -f voting-app-service.yamlkubectl create -f redis-deploy.yamlkubectl create -f redis-service.yamlkubectl create -f postgres-deploy.yamlkubectl create -f postgres-service.yamlkubectl create -f result-app-deploy.yaml # Deploys the result app if provided. -
Xác minh deployment: Kiểm tra status của deployment và service bằng:
kubectl get deployments,svcOutput thông thường sẽ như sau:
NAME READY UP-TO-DATE AVAILABLE AGEdeployment.apps/postgres-deploy 1/1 1 1 96sdeployment.apps/redis-deploy 1/1 1 1 104sdeployment.apps/result-app-deploy 1/1 1 1 83sdeployment.apps/voting-app-deploy 1/1 1 1 112sdeployment.apps/worker-app-deploy 1/1 1 1 88sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/db ClusterIP 10.0.43.213 <none> 5432/TCP 93sservice/kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 11mservice/redis ClusterIP 10.0.180.53 <none> 6379/TCP 101sservice/result-service LoadBalancer 10.1.1.176 52.152.245.94 80:30219/TCP 79sservice/voting-service LoadBalancer 10.0.100.120 52.152.240.186 80:32245/TCP 109s
Khác với 2 demo trước, cả 5 deployment ở đây đều đã 1/1 ngay từ lần kiểm tra đầu — kể cả worker-app-deploy. result-service và voting-service đều đã có EXTERNAL-IP thật (52.152.245.94, 52.152.240.186), nghĩa là Azure Load Balancer đã provision xong.
💡 Trong 1 số trường hợp, service của result app có thể ban đầu hiện trạng thái pending trong khi load balancer đang được provision. Chờ vài phút để quá trình này hoàn tất.
Kiểm tra deploy. Sau khi mọi deployment đã được xác nhận (mỗi cái hiện 1 trên 1 pod ready) và load balancer cho cả voting service lẫn result service đã được provision, có thể test ứng dụng:
- Mở trình duyệt ở 1 tab mới để truy cập voting application bằng external IP được cung cấp cho "voting-service".
- Tương tự, mở 1 tab khác để truy cập results application bằng external IP của "result-service".
Vote trên ứng dụng và quan sát kết quả cập nhật theo thời gian thực. Điều này xác nhận các ứng dụng đang hoạt động đúng.
Clean up. Sau khi hoàn tất demo và buổi học, nhớ xóa cluster và dọn dẹp resource để tránh phát sinh chi phí ngoài dự kiến.
Nguồn tham khảo
Nguồn gốc: Khóa "Kubernetes for the Absolute Beginners - Hands-on Tutorial" — module "Kubernetes on the Cloud", bài mở đầu tổng quan (overview) của module, "Kubernetes on GCP GKE", "Kubernetes on AWS EKS", và "Kubernetes on Azure AKS", nền tảng KodeKloud.
Đính chính/cập nhật (fact-check):
- Flag
--shortcủa lệnhkubectl version(dùng trong demo EKS) đã bị remove hẳn khỏi kubectl từ v1.28, output mặc định giờ đã ở dạng rút gọn tương đương — 2026, kubernetes/kubectl#1216 - API
extensions/v1beta1cho Deployment (khớp với outputdeployment.extensions/...trong demo GKE) đã bị remove hẳn từ Kubernetes 1.16, thay bằngapps/v1(đã stable từ 1.9) — outputdeployment.apps/...ở demo EKS/AKS phản ánh đúng cluster chạy K8s mới hơn — 2019, Kubernetes blog: Deprecated APIs Removed In 1.16, Deprecated API Migration Guide