Bài viết này mình sẽ hướng dẫn cài đặt và sử dụng ArgoCD cli để quản lý các ứng dụng được triển khai trong cluster bằng công cụ ArgoCD. Ưu điểm của bản cli là có thể là được những tính năng mà bản web không có, ví dụ như tạo account mới, thay đổi mật khẩu hoặc thêm 1 cụm Kubernetes mới và nhiều tính năng nữa.
Chúng ta bắt đầu thực hành thôi.
Hiện tại mình đang có 1 cụm Kubernetes có 3 master, 5 worker, 3 loadbalancer thông tin như dưới, cụm này đã được triển khai ArgoCD bản web trước đó.
root@loadbalancer3:~# kubectl get no,po,svc -n argocd -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
node/master1 Ready control-plane,master 5d4h v1.23.8 192.168.13.207 <none> Ubuntu 18.04.6 LTS 4.15.0-191-generic containerd://1.6.8
node/master2 Ready control-plane,master 5d4h v1.23.8 192.168.13.208 <none> Ubuntu 18.04.6 LTS 4.15.0-192-generic containerd://1.6.8
node/master3 Ready control-plane,master 5d4h v1.23.8 192.168.13.209 <none> Ubuntu 18.04.6 LTS 4.15.0-192-generic containerd://1.6.8
node/worker1 Ready <none> 5d4h v1.23.8 192.168.13.210 <none> Ubuntu 18.04.6 LTS 4.15.0-192-generic containerd://1.6.8
node/worker2 Ready <none> 5d4h v1.23.8 192.168.13.211 <none> Ubuntu 18.04.6 LTS 4.15.0-191-generic containerd://1.6.8
node/worker3 Ready <none> 5d4h v1.23.8 192.168.13.212 <none> Ubuntu 18.04.6 LTS 4.15.0-192-generic containerd://1.6.8
node/worker4 Ready <none> 5d4h v1.23.8 192.168.13.213 <none> Ubuntu 18.04.6 LTS 4.15.0-191-generic containerd://1.6.8
node/worker5 Ready <none> 5d4h v1.23.8 192.168.13.214 <none> Ubuntu 18.04.6 LTS 4.15.0-192-generic containerd://1.6.8
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/argocd-application-controller-0 1/1 Running 0 15m 10.244.189.91 worker2 <none> <none>
pod/argocd-applicationset-controller-547665bdfd-dlhch 1/1 Running 0 15m 10.244.189.90 worker2 <none> <none>
pod/argocd-dex-server-865966bc45-blklp 1/1 Running 0 15m 10.244.235.153 worker1 <none> <none>
pod/argocd-notifications-controller-c47c9f869-cvlkh 1/1 Running 0 15m 10.244.42.90 worker5 <none> <none>
pod/argocd-redis-896595fb7-lfpjl 1/1 Running 0 15m 10.244.42.89 worker5 <none> <none>
pod/argocd-repo-server-678c6cc99c-mb6dj 1/1 Running 0 15m 10.244.182.26 worker3 <none> <none>
pod/argocd-server-686df46bd5-t478z 1/1 Running 0 15m 10.244.235.154 worker1 <none> <none>
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/argocd-applicationset-controller ClusterIP 10.96.129.7 <none> 7000/TCP,8080/TCP 15m app.kubernetes.io/name=argocd-applicationset-controller
service/argocd-dex-server ClusterIP 10.97.158.64 <none> 5556/TCP,5557/TCP,5558/TCP 15m app.kubernetes.io/name=argocd-dex-server
service/argocd-metrics ClusterIP 10.111.171.96 <none> 8082/TCP 15m app.kubernetes.io/name=argocd-application-controller
service/argocd-notifications-controller-metrics ClusterIP 10.109.203.48 <none> 9001/TCP 15m app.kubernetes.io/name=argocd-notifications-controller
service/argocd-redis ClusterIP 10.106.254.32 <none> 6379/TCP 15m app.kubernetes.io/name=argocd-redis
service/argocd-repo-server ClusterIP 10.109.53.41 <none> 8081/TCP,8084/TCP 15m app.kubernetes.io/name=argocd-repo-server
service/argocd-server NodePort 10.106.7.236 <none> 80:30007/TCP,443:30008/TCP 15m app.kubernetes.io/name=argocd-server
service/argocd-server-metrics ClusterIP 10.97.17.212 <none> 8083/TCP 15m app.kubernetes.io/name=argocd-server
Truy cập https://github.com/argoproj/argo-cd/, đây là kho Repository Github của ArgoCD, chọn phiên bản mới nhất hiện tại là v2.4.12.
Xác định hệ điều hành đang chạy cụm Kubernetes, copy link và download về server.
Sau khi hoàn thành download ta phân quyền thực thi cho nó và di chuyển nó vào /usr/local/bin/
wget https://github.com/argoproj/argo-cd/releases/download/v2.4.12/argocd-linux-amd64 -O argocd
chmod +x argocd
mv argocd /usr/local/bin/
Verify ứng dụng.
which argocd
/usr/local/bin/argocd
Hoàn thành cài đặt ArgoCD CLI, ta thử dùng bằng cách chạy 1 lệnh trợ giúp như dưới. Kết quả trả về là các hướng dẫn cách sử dụng các command của ArgoCD.
root@loadbalancer3:~# argocd help
argocd controls a Argo CD server
Usage:
argocd [flags]
argocd [command]
Available Commands:
account Manage account settings
admin Contains a set of commands useful for Argo CD administrators and requires direct Kubernetes access
app Manage applications
cert Manage repository certificates and SSH known hosts entries
cluster Manage cluster credentials
completion output shell completion code for the specified shell (bash or zsh)
context Switch between contexts
gpg Manage GPG keys used for signature verification
help Help about any command
login Log in to Argo CD
logout Log out from Argo CD
proj Manage projects
relogin Refresh an expired authenticate token
repo Manage repository connection parameters
repocreds Manage repository connection parameters
version Print version information
Muốn thực thi được ở bản cli chúng ta cũng cần phải login vào ArgoCD.
Đầu tiên ta phải xác định được địa chỉ của server ArgoCD trước. Nhìn ở bảng kết quả dưới ta thấy ArgoCD đang được triển khai ở worker1 có địa chỉ ip lad 192.168.13.210 và cổng expose là 3007, như vậy địa chỉ server của ArgoCD là 192.168.13.210:30007
Kêt quả login vào ArgoCD CLI đã thành công
root@loadbalancer3:~# argocd login 192.168.13.210:30007
WARNING: server is not configured with TLS. Proceed (y/n)? y
Username: admin
Password:
'admin:login' logged in successfully
Context '192.168.13.210:30007' updated
Thử list cluster hiện có ta thấy chỉ có 1 cluster duy nhất
root@loadbalancer3:~# argocd cluster list
SERVER NAME VERSION STATUS MESSAGE PROJECT
https://kubernetes.default.svc in-cluster Unknown Cluster has no applications and is not being monitored.
Điều này trùng khớp khi xem trên bản web.
List các project bằng cli ta thấy xuất hiện 1 project default duy nhất
root@loadbalancer3:~# argocd proj list
NAME DESCRIPTION DESTINATIONS SOURCES CLUSTER-RESOURCE-WHITELIST NAMESPACE-RESOURCE-BLACKLIST SIGNATURE-KEYS ORPHANED-RESOURCES
default *,* * */* <none> <none> disabled
Verìy lại trên web, ta cũng chỉ thấy 1 project default
List repo trên cli, kết quả không có repo nào cả
root@loadbalancer3:~# argocd repo list
TYPE NAME REPO INSECURE OCI LFS CREDS STATUS MESSAGE PROJECT
Kết quả repo trống ở trên phiên bản web.
List app trên cli, kết quả không có app được triển khai
root@loadbalancer3:~# argocd app list
NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGET
Verify lại bằng giao diện web cũng cho kết quả trống.
Được rồi, bây giờ ta logout ArgoCD CLI rồi tiến hành thực hiện 1 command thử nhé.
root@loadbalancer3:~# argocd logout 192.168.13.210:30007
Logged out from '192.168.13.210:30007'
Kết quả khi thực hiện 1 command báo lỗi khi chúng ta logout
root@loadbalancer3:~# argocd app list
FATA[0000] rpc error: code = Unauthenticated desc = no session information
Ta cũng có thể login với các phần mở rộng như ở dưới
root@loadbalancer3:~# argocd login 192.168.13.210:30007 --insecure --username admin --password t5GG6ucaLAqnDzSb
WARNING: server is not configured with TLS. Proceed (y/n)? y
'admin:login' logged in successfully
Context '192.168.13.210:30007' updated
Ta hãy thử tạo 1 project có tên my-project bằng cli và verify lại bằng phiên bản web
root@loadbalancer3:~# argocd proj create my-project
root@loadbalancer3:~# argocd proj list
NAME DESCRIPTION DESTINATIONS SOURCES CLUSTER-RESOURCE-WHITELIST NAMESPACE-RESOURCE-BLACKLIST SIGNATURE-KEYS ORPHANED-RESOURCES
default *,* * */* <none> <none> disabled
my-project <none> <none> <none> <none> <none> disabled
Kết quả đã có 1 project mới tên là my-project ở phiên bản web.
Như mình đã nói ở trên, ở phiên bản web sẽ không có chức năng thay đổi mật khẩu hay tạo thêm username mới, muốn làm được điều này ta phải sử dụng phiên bản cli.
Command dưới cho ta thấy được thông tin của account
root@loadbalancer3:~# argocd account get-user-info
Logged In: true
Username: admin
Issuer: argocd
Groups:
Mình thử thay đổi mật khẩu cho account admin nhé (tính năng này không thể thực hiện trên giao diện web)
root@loadbalancer3:~# argocd account update-password
*** Enter password of currently logged in user (admin):
*** Enter new password for user admin:
*** Confirm new password for user admin:
Password updated
Context '192.168.13.210:30007' updated
root@loadbalancer3:~# argocd logout 192.168.13.210:30007
Logged out from '192.168.13.210:30007'
Sau đo login bằng mật khẩu mới
root@loadbalancer3:~# argocd login 192.168.13.210:30007 --insecure --username admin --password Hoanghd90
WARNING: server is not configured with TLS. Proceed (y/n)? y
'admin:login' logged in successfully
Context '192.168.13.210:30007' updated
Bây giờ ta hãy thử triển khai 1 ứng dụng bằng cli và xem kết quả.
Ta có thể dùng command argocd app create –help | more để có thể xem được ví dụ mẫu cú pháp triển khai 1 ứng dụng bằng cli như dưới
root@loadbalancer3:~# argocd app create --help | more
Create an application
Usage:
argocd app create APPNAME [flags]
Examples:
# Create a directory app
argocd app create guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --directory-recurse
# Create a Jsonnet app
argocd app create jsonnet-guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path jsonnet-guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --jsonnet-ext-str replicas=2
# Create a Helm app
argocd app create helm-guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path helm-guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --helm-set replicaCount=2
# Create a Helm app from a Helm repo
argocd app create nginx-ingress --repo https://charts.helm.sh/stable --helm-chart nginx-ingress --revision 1.24.3 --dest-namespace default --dest-server https://kubernetes.default.svc
# Create a Kustomize app
argocd app create kustomize-guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path kustomize-guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --kustomize-image gcr.io/h
eptio-images/ks-guestbook-demo:0.1
# Create a app using a custom tool:
argocd app create kasane --repo https://github.com/argoproj/argocd-example-apps.git --path plugins/kasane --dest-namespace default --dest-server https://kubernetes.default.svc --config-management-plugin kasane
Dùng lệnh sau để show được địa chỉ server Kubernetes. Như kết quả dưới thì hiện tại mình chỉ có 1 cụm Kubernetes duy nhất có địa chỉ https://kubernetes.default.svc
root@loadbalancer3:~# argocd cluster list
SERVER NAME VERSION STATUS MESSAGE PROJECT
https://kubernetes.default.svc in-cluster Unknown Cluster has no applications and is not being monitored.
Ta triển khai ứng dụng theo cú pháp sau
argocd app create <tên ứng dụng> --repo <repository> --path <path> --dest-namespace <namespace> --dest-server <địa chỉ server cụm Kubernetes>
Và dưới đây là thông tin triển khai ứng dụng của mình
root@loadbalancer3:~# argocd app create app-prometheus-create-cli --repo https://github.com/hoanghd164/argocd.git --path kustomize-prometheus --dest-namespace default --dest-server https://kubernetes.default.svc
application 'app-prometheus-create-cli' created
Đã có 1 ứng dụng mới tên app-prometheus-create-cli nhưng trạng thái sync đang là OutOfSync, ta qua bước tiếp theo để tiến hành sync ứng dụng.
root@loadbalancer3:~# argocd app list
NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGET
app-prometheus-create-cli https://kubernetes.default.svc default default OutOfSync Missing <none> <none> https://github.com/hoanghd164/argocd.git kustomize-prometheus
Sử dụng command dưới để tiến hành sync ứng dụng
root@loadbalancer3:~# argocd app sync app-prometheus-create-cli
TIMESTAMP GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE
2022-09-21T09:40:42+00:00 Service default kustomize-prometheus OutOfSync Missing
2022-09-21T09:40:42+00:00 apps Deployment default kustomize-prometheus OutOfSync Missing
2022-09-21T09:40:42+00:00 networking.k8s.io Ingress default kustomize-prometheus OutOfSync Missing
2022-09-21T09:40:43+00:00 Service default kustomize-prometheus Synced Progressing
2022-09-21T09:40:43+00:00 networking.k8s.io Ingress default kustomize-prometheus OutOfSync Missing ingress.networking.k8s.io/kustomize-prometheus created
2022-09-21T09:40:43+00:00 Service default kustomize-prometheus Synced Progressing service/kustomize-prometheus created
2022-09-21T09:40:43+00:00 apps Deployment default kustomize-prometheus OutOfSync Missing deployment.apps/kustomize-prometheus created
2022-09-21T09:40:43+00:00 Service default kustomize-prometheus Synced Healthy service/kustomize-prometheus created
2022-09-21T09:40:43+00:00 apps Deployment default kustomize-prometheus Synced Progressing deployment.apps/kustomize-prometheus created
2022-09-21T09:40:43+00:00 networking.k8s.io Ingress default kustomize-prometheus Synced Progressing ingress.networking.k8s.io/kustomize-prometheus created
Name: app-prometheus-create-cli
Project: default
Server: https://kubernetes.default.svc
Namespace: default
URL: http://192.168.13.210:30007/applications/app-prometheus-create-cli
Repo: https://github.com/hoanghd164/argocd.git
Target:
Path: kustomize-prometheus
SyncWindow: Sync Allowed
Sync Policy: <none>
Sync Status: Synced to (e2dac7f)
Health Status: Progressing
Operation: Sync
Sync Revision: e2dac7f23c236c2938f530b3dc0a02ba7ee17bca
Phase: Succeeded
Start: 2022-09-21 09:40:42 +0000 UTC
Finished: 2022-09-21 09:40:43 +0000 UTC
Duration: 1s
Message: successfully synced (all tasks run)
GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE
Service default kustomize-prometheus Synced Healthy service/kustomize-prometheus created
apps Deployment default kustomize-prometheus Synced Progressing deployment.apps/kustomize-prometheus created
networking.k8s.io Ingress default kustomize-prometheus Synced Healthy ingress.networking.k8s.io/kustomize-prometheus created
Kết quả sau khi sync, trạng thái sync là Synced
root@loadbalancer3:~# argocd app list
NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGET
app-prometheus-create-cli https://kubernetes.default.svc default default Synced Healthy <none> <none> https://github.com/hoanghd164/argocd.git kustomize-prometheus
Kiểm tra trên ArgoCD phiên bản web ta cũng đã thấy ứng dụng sync thành công ở trạng thai Synced
Ta có thể xem chi tiết thông tin ứng dụng đã triển khai bằng command dưới
root@loadbalancer3:~# argocd app get app-prometheus-create-cli
Name: app-prometheus-create-cli
Project: default
Server: https://kubernetes.default.svc
Namespace: default
URL: http://192.168.13.210:30007/applications/app-prometheus-create-cli
Repo: https://github.com/hoanghd164/argocd.git
Target:
Path: kustomize-prometheus
SyncWindow: Sync Allowed
Sync Policy: <none>
Sync Status: Synced to (e2dac7f)
Health Status: Healthy
GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE
Service default kustomize-prometheus Synced Healthy service/kustomize-prometheus created
apps Deployment default kustomize-prometheus Synced Healthy deployment.apps/kustomize-prometheus created
networking.k8s.io Ingress default kustomize-prometheus Synced Healthy ingress.networking.k8s.io/kustomize-prometheus created
Hoặc xem resource của ứng dụng và nhiều chức năng các nữa, các bạn tự tìm hiểu tiếp nhé
root@loadbalancer3:~# argocd app resources app-prometheus-create-cli
GROUP KIND NAMESPACE NAME ORPHANED
Service default kustomize-prometheus No
apps Deployment default kustomize-prometheus No
networking.k8s.io Ingress default kustomize-prometheus No
Trên đây mình đã hướng dẫn cách triển khải ArgoCD phiên bản cli và triển khai 1 ứng dụng đơn giản. Để sử dụng được thông thạo thì các bạn cần đọc thêm tài liệu nhé.
Cảm ơn các bạn đã theo dõi.