Trong bài viết này, chúng ta sẽ tìm hiểu cách cài đặt, cấu hình, rollback (quay lại phiên bản trước) và xóa ứng dụng Kubernetes Dashboard bằng Helm – công cụ quản lý gói mạnh mẽ dành cho Kubernetes. Kubernetes Dashboard là giao diện web chính thức, giúp quản trị viên dễ dàng giám sát và quản lý các tài nguyên trong cụm Kubernetes.
Lưu ý: Hướng dẫn này đề cập đến quy trình cài đặt phần mềm trên các cụm Kubernetes sử dụng phiên bản 2 của trình quản lý gói Helm, phiên bản này yêu cầu có Tiller. Nếu bạn đang làm việc với phiên bản 3 của Helm, hãy xem hướng dẫn Cách Cài Đặt Phần Mềm trên Cụm Kubernetes với Trình Quản Lý Gói Helm 3
Yêu cầu tiên quyết
Để thực hiện hướng dẫn này, bạn cần:
● Một cụm Kubernetes phiên bản 1.8 trở lên, đã bật tính năng kiểm soát truy cập theo vai trò (RBAC).
● Công cụ dòng lệnh kubectl đã được cài đặt trên máy tính cá nhân của bạn và được cấu hình để kết nối đến cụm của bạn. Bạn có thể đọc thêm về cách cài đặt kubectl trong tài liệu chính thức.
Bạn có thể kiểm tra kết nối với cụm của mình bằng lệnh:
kubectl cluster-info
● Nếu không có lỗi, bạn đã kết nối thành công với cụm. Nếu bạn truy cập nhiều cụm với kubectl, hãy chắc chắn rằng bạn đã chọn đúng context cụm bằng lệnh:
kubectl config get-contexts
Output CURRENT NAME CLUSTER AUTHINFO NAMESPACE * do-nyc1-k8s-example do-nyc1-k8s-example do-nyc1-k8s-example-admin docker-for-desktop docker-for-desktop-cluster docker-for-desktop
Trong ví dụ này, dấu * cho biết rằng bạn đang kết nối đến cụm do-nyc1-k8s-example
. Để chuyển đổi cụm, sử dụng lệnh:
kubectl config use-context context-name
Khi bạn đã kết nối đến cụm chính xác, hãy chuyển sang Bước 1 để bắt đầu cài đặt Helm.
Bước 1 – Cài Đặt Helm
Trước tiên, chúng ta sẽ cài đặt tiện ích dòng lệnh helm
trên máy tính cá nhân. Helm cung cấp một script hỗ trợ quá trình cài đặt trên MacOS, Windows hoặc Linux.
Chuyển đến một thư mục có quyền ghi và tải script từ kho GitHub của Helm:
cd /tmp curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > install-helm.sh
Cho phép script có thể thực thi bằng lệnh chmod
:
chmod u+x install-helm.sh
Tại thời điểm này, bạn có thể dùng trình soạn thảo văn bản yêu thích để mở script và kiểm tra nội dung nhằm đảm bảo an toàn. Khi đã hài lòng, chạy script:
./install-helm.sh
Bạn có thể được yêu cầu nhập mật khẩu. Hãy nhập mật khẩu và nhấn ENTER
.
Output helm installed into /usr/local/bin/helm Run 'helm init' to configure helm.
Tiếp theo, chúng ta sẽ hoàn tất cài đặt bằng cách cài đặt một số thành phần của Helm trên cụm của chúng ta.
Bước 2 – Cài đặt Tiller
Tiller là một thành phần đi kèm với lệnh helm
chạy trên cụm của bạn, nhận lệnh từ helm
và giao tiếp trực tiếp với API Kubernetes để thực hiện các tác vụ tạo và xoá tài nguyên.
Để cấp cho Tiller các quyền cần thiết trên cụm, chúng ta sẽ tạo một resource serviceaccount
của Kubernetes.
Lưu ý: Chúng ta sẽ gán serviceaccount này vào vai trò cluster-admin. Điều này sẽ cấp quyền siêu người dùng cho Tiller trên cụm và cho phép nó cài đặt tất cả các loại tài nguyên ở mọi namespace. Đây là cấu hình phù hợp cho việc khám phá Helm, nhưng bạn có thể muốn có cấu hình hạn chế hơn đối với một cụm Kubernetes sản xuất.
Vui lòng tham khảo tài liệu RBAC chính thức của Helm để biết thêm thông tin về cách thiết lập các kịch bản RBAC khác nhau cho Tiller.
Tạo serviceaccount
cho Tiller:
kubectl -n kube-system create serviceaccount tiller
Gán serviceaccount
tiller vào vai trò cluster-admin:
kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
Bây giờ, chạy lệnh helm init để cài đặt Tiller trên cụm, kèm theo một số tác vụ nội bộ như tải thông tin chi tiết từ repo stable:
helm init --service-account tiller
Output . . . Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster. Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy. For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation Happy Helming!
Để xác nhận Tiller đang chạy, hãy liệt kê các pod trong namespace kube-system:
kubectl get pods --namespace kube-system
Output NAME READY STATUS RESTARTS AGE . . . kube-dns-64f766c69c-rm9tz 3/3 Running 0 22m kube-proxy-worker-5884 1/1 Running 1 21m kube-proxy-worker-5885 1/1 Running 1 21m kubernetes-dashboard-7dd4fc69c8-c4gwk 1/1 Running 0 22m tiller-deploy-5c688d5f9b-lccsk 1/1 Running 0 40s
Lưu ý rằng tên pod của Tiller bắt đầu với tiền tố tiller-deploy-
.
Với việc cài đặt xong cả hai thành phần của Helm, chúng ta đã sẵn sàng sử dụng helm
để cài đặt ứng dụng đầu tiên.
Bước 3 – Cài đặt Helm Chart
Các gói phần mềm của Helm được gọi là chart. Helm được cấu hình sẵn với một kho chart được tuyển chọn có tên là stable. Bạn có thể duyệt các chart có sẵn trong repo GitHub của chúng.
Trong ví dụ này, chúng ta sẽ cài đặt Kubernetes Dashboard.
Sử dụng helm
để cài đặt gói kubernetes-dashboard
từ repo stable:
helm install stable/kubernetes-dashboard --name dashboard-demo
Output NAME: dashboard-demo LAST DEPLOYED: Wed Aug 8 20:11:07 2018 NAMESPACE: default STATUS: DEPLOYED . . .
Lưu ý dòng NAME được làm nổi bật trong kết quả trên. Ở đây, chúng ta đã chỉ định tên là dashboard-demo. Đây là tên của bản phát hành (release) của chúng ta. Một bản phát hành Helm là một lần triển khai duy nhất của một chart với một cấu hình cụ thể. Bạn có thể triển khai nhiều bản phát hành của cùng một chart, mỗi bản với cấu hình riêng.
Lưu ý dòng NAME
được làm nổi bật trong đầu ra ví dụ ở trên. Trong trường hợp này, chúng ta đã chỉ định tên là dashboard-demo
. Đây chính là tên của bản phát hành (release) của chúng ta. Một bản phát hành Helm là một lần triển khai duy nhất của một chart với một cấu hình cụ thể. Bạn có thể triển khai nhiều bản phát hành của cùng một chart, mỗi bản có cấu hình riêng.
Nếu bạn không chỉ định tên bản phát hành của mình bằng tùy chọn --name
, Helm sẽ tự động tạo một tên ngẫu nhiên cho bạn.
Chúng ta có thể yêu cầu Helm liệt kê các bản phát hành trên cụm này:
helm list
Output NAME REVISION UPDATED STATUS CHART NAMESPACE dashboard-demo 1 Wed Aug 8 20:11:11 2018 DEPLOYED kubernetes-dashboard-0.7.1 default
Chúng ta có thể sử dụng kubectl để xác nhận rằng một dịch vụ mới đã được triển khai trên cụm:
kubectl get services
Output NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE dashboard-demo-kubernetes-dashboard ClusterIP 10.32.104.73 <none> 443/TCP 51s kubernetes ClusterIP 10.32.0.1 <none> 443/TCP 34m
Lưu ý rằng theo mặc định, tên dịch vụ tương ứng với bản phát hành của chúng ta là sự kết hợp của tên release và tên chart.
Với việc ứng dụng đã được triển khai, hãy chuyển sang dùng Helm để thay đổi cấu hình và cập nhật việc triển khai.
Bước 4 – Cập nhật một bản phát hành
Lệnh helm upgrade
có thể được dùng để nâng cấp một bản phát hành bằng chart mới hoặc cập nhật các tùy chọn cấu hình của nó.
Chúng ta sẽ thực hiện một thay đổi đơn giản cho bản phát hành dashboard-demo
nhằm minh họa quá trình cập nhật và quay lại (rollback): thay đổi tên của dịch vụ dashboard
từ dashboard-demo-kubernetes-dashboard
thành chỉ dashboard.
Chart kubernetes-dashboard
cung cấp tùy chọn cấu hình fullnameOverride
để điều khiển tên dịch vụ. Hãy chạy lệnh helm upgrade
với tùy chọn này:
helm upgrade dashboard-demo stable/kubernetes-dashboard --set fullnameOverride="dashboard"
Bạn sẽ thấy đầu ra tương tự như bước cài đặt ban đầu.
Kiểm tra xem các dịch vụ trên Kubernetes đã phản ánh giá trị cập nhật hay chưa bằng lệnh:
kubectl get services
Output NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.32.0.1 <none> 443/TCP 36m dashboard ClusterIP 10.32.198.148 <none> 443/TCP 40s
Tên dịch vụ đã được cập nhật thành giá trị mới.
Lưu ý: Tại thời điểm này, bạn có thể muốn mở Kubernetes Dashboard trên trình duyệt và kiểm tra. Để thực hiện, chạy lệnh sau:
kubectl proxyLệnh này tạo một proxy cho phép bạn truy cập tài nguyên cụm từ máy tính cá nhân. Dựa theo hướng dẫn trước, dịch vụ dashboard của bạn có tên là kubernetes-dashboard và đang chạy trong namespace mặc định. Bạn có thể truy cập dashboard tại:
http://localhost:8001/api/v1/namespaces/default/services/https:dashboard:/proxy/Nếu cần, hãy thay thế tên dịch vụ và namespace cho phù hợp với cấu hình của bạn.
Tiếp theo, chúng ta sẽ xem khả năng quay lại (rollback) của Helm.
Bước 5 – Quay lại một bản phát hành
Khi chúng ta cập nhật bản phát hành dashboard-demo
ở bước trước, một phiên bản (revision) mới đã được tạo ra. Helm lưu lại tất cả các chi tiết của các bản phát hành trước đó để có thể quay lại nếu cần.
Sử dụng lệnh helm list
để kiểm tra lại bản phát hành:
helm list
Output NAME REVISION UPDATED STATUS CHART NAMESPACE dashboard-demo 2 Wed Aug 8 20:13:15 2018 DEPLOYED kubernetes-dashboard-0.7.1 default
Cột REVISION
cho biết bây giờ đây là bản phát hành thứ hai.
Sử dụng lệnh helm rollback
để quay lại phiên bản đầu tiên:
helm rollback dashboard-demo 1
Bạn sẽ thấy đầu ra như sau, cho biết quá trình quay lại đã thành công:
Output Rollback was a success! Happy Helming!
Nếu bạn chạy lại lệnh kubectl get services
, bạn sẽ nhận thấy tên dịch vụ đã chuyển trở lại giá trị ban đầu. Helm đã triển khai lại ứng dụng với cấu hình của phiên bản 1.
Tiếp theo, chúng ta sẽ tìm hiểu cách xoá bản phát hành với Helm.
Bước 6 – Xoá một bản phát hành
Các bản phát hành của Helm có thể bị xoá bằng lệnh helm delete:
helm delete dashboard-demo
Output release "dashboard-demo" deleted
Mặc dù bản phát hành đã bị xoá và ứng dụng dashboard không còn chạy, Helm vẫn lưu giữ thông tin các phiên bản cũ nếu bạn muốn triển khai lại. Nếu bạn cố gắng cài đặt một bản phát hành mới có tên dashboard-demo
ngay lập tức, bạn sẽ gặp lỗi:
Error: a release named dashboard-demo already exists.
Nếu bạn sử dụng cờ –deleted để liệt kê các bản phát hành đã xoá, bạn sẽ thấy rằng bản phát hành vẫn tồn tại:
helm list --deleted
Output NAME REVISION UPDATED STATUS CHART NAMESPACE dashboard-demo 3 Wed Aug 8 20:15:21 2018 DELETED kubernetes-dashboard-0.7.1 default
Để xoá hoàn toàn bản phát hành và xóa sạch các phiên bản cũ, sử dụng cờ --purge
với lệnh helm delete
:
helm delete dashboard-demo --purge
Bây giờ bản phát hành đã được xoá hoàn toàn và bạn có thể sử dụng lại tên bản phát hành này.
Kết luận
Qua hướng dẫn này, bạn đã nắm vững cách cài đặt và sử dụng Helm – công cụ quản lý gói mạnh mẽ dành cho Kubernetes. Chúng ta đã thiết lập thành công tiện ích dòng lệnh Helm cùng với Tiller, thành phần quan trọng giúp giao tiếp với cụm Kubernetes.
Bên cạnh đó, bạn đã tìm hiểu cách cài đặt, nâng cấp, quay lại phiên bản trước và xóa các Helm chart, cũng như cách quản lý các bản phát hành trong Kubernetes một cách hiệu quả. Những kỹ thuật này giúp bạn dễ dàng triển khai và duy trì các ứng dụng phức tạp trên Kubernetes, giảm thiểu lỗi cấu hình và tiết kiệm thời gian trong quá trình vận hành.
Với Helm, bạn có thể nhanh chóng áp dụng các bản cập nhật, rollback khi cần thiết và đảm bảo tính linh hoạt trong môi trường Kubernetes. Tiếp theo, bạn có thể khám phá thêm cách tạo Helm chart tùy chỉnh, tích hợp CI/CD với Helm hoặc triển khai các ứng dụng quy mô lớn một cách tự động hóa.Để biết thêm thông tin về Helm và các chart của Helm, vui lòng xem tài liệu chính thức của Helm.