Sunday, January 19, 2025

[ArgoCD] Bắt đầu với ArgoCD CLI

-

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.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories