Files
open-cluster-management/solutions/deploy-argocd-apps-pull/getting-started.md
Mike Ng efda02e946
Scorecard supply-chain security / Scorecard analysis (push) Failing after 3m20s
Post / coverage (push) Failing after 26m0s
Post / images (amd64) (push) Failing after 3m12s
Post / images (arm64) (push) Failing after 3m9s
Post / image manifest (push) Has been skipped
Post / trigger clusteradm e2e (push) Has been skipped
Close stale issues and PRs / stale (push) Successful in 54s
docs: update argocd apps pull solution using the clusteradm CLI for easier setup (#982)
Signed-off-by: Mike Ng <ming@redhat.com>
2025-05-06 14:42:34 +00:00

115 lines
4.9 KiB
Markdown

# Getting Started
### Prerequisites
- [kind](https://kind.sigs.k8s.io) must be installed on your local machine. The Kubernetes version must be >= 1.19. See the [kind user guide](https://kind.sigs.k8s.io/docs/user/quick-start/#creating-a-cluster) for more details.
- Download and install [clusteradm](https://github.com/open-cluster-management-io/clusteradm/releases). For Linux OS, run the following commands:
```
wget -qO- https://github.com/open-cluster-management-io/clusteradm/releases/latest/download/clusteradm_linux_amd64.tar.gz | sudo tar -xvz -C /usr/local/bin/
sudo chmod +x /usr/local/bin/clusteradm
```
- The [kubectl](https://kubernetes.io/docs/reference/kubectl/) cli, which should be compatible with your Kubernetes version. See [install and setup](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/#before-you-begin) for more info.
### Steps
1. Setup an OCM Hub cluster and registered an OCM Managed cluster.
```
curl -L https://raw.githubusercontent.com/open-cluster-management-io/OCM/main/solutions/setup-dev-environment/local-up.sh | bash
```
See [Open Cluster Management (OCM) Quick Start](https://open-cluster-management.io/getting-started/quick-start/) for more details.
1. Install Argo CD on the Hub cluster.
```
kubectl config use-context kind-hub
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
```
See [Argo CD website](https://argo-cd.readthedocs.io/en/stable/getting_started/) for more details.
1. Install the OCM Argo CD add-on on the Hub cluster:
```
kubectl config use-context kind-hub
clusteradm install hub-addon --names argocd
```
If your hub controller starts successfully, you should see:
```
$ kubectl -n argocd get deploy argocd-pull-integration
NAME READY UP-TO-DATE AVAILABLE AGE
argocd-pull-integration 1/1 1 1 55s
```
1. Enable the add-on for your choice of managed clusters:
```
kubectl config use-context kind-hub
clusteradm addon enable --names argocd --clusters cluster1,cluster2
```
Replace `cluster1` and `cluster2` with your managed cluster names.
If your add-on starts successfully, you should see:
```
$ kubectl -n cluster1 get managedclusteraddon argocd
NAME AVAILABLE DEGRADED PROGRESSING
argocd True False
```
1. On the Hub cluster, apply the `guestbook-app-set` manifest:
```
kubectl config use-context kind-hub
kubectl apply -f example/guestbook-app-set.yaml
```
**Note:** The Application template inside the ApplicationSet must contain the following content:
```
labels:
apps.open-cluster-management.io/pull-to-ocm-managed-cluster: 'true'
annotations:
argocd.argoproj.io/skip-reconcile: 'true'
apps.open-cluster-management.io/ocm-managed-cluster: '{{name}}'
```
The label allows the pull model controller to select the Application for processing.
The `skip-reconcile` annotation is to prevent the Application from reconciling on the Hub cluster.
The `ocm-managed-cluster` annotation is for the ApplicationSet to generate multiple Application based on each cluster generator targets.
1. When this guestbook ApplicationSet reconciles, it will generate an Application for the registered managed clusters. For example:
```
$ kubectl config use-context kind-hub
$ kubectl -n argocd get appset
NAME AGE
guestbook-app 84s
$ kubectl -n argocd get app
NAME SYNC STATUS HEALTH STATUS
cluster1-guestbook-app
cluster2-guestbook-app
```
1. On the Hub cluster, the pull controller will wrap the Application with a ManifestWork. For example:
```
$ kubectl config use-context kind-hub
$ kubectl -n cluster1 get manifestwork
NAME AGE
cluster1-guestbook-app-d0e5 2m41s
```
1. On a managed cluster, you should see that the Application is pulled down successfully. For example:
```
$ kubectl config use-context kind-cluster1
$ kubectl -n argocd get app
NAME SYNC STATUS HEALTH STATUS
cluster1-guestbook-app Synced Healthy
$ kubectl -n guestbook get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
guestbook-ui 1/1 1 1 7m36s
```
1. On the Hub cluster, the status controller will sync the dormant Application with the ManifestWork status feedback. For example:
```
$ kubectl config use-context kind-hub
$ kubectl -n argocd get app
NAME SYNC STATUS HEALTH STATUS
cluster1-guestbook-app Synced Healthy
cluster2-guestbook-app Synced Healthy
```
If you have issues or need help troubleshooting, check out the [troubleshooting guide](./troubleshooting.md)