mirror of
https://github.com/open-cluster-management-io/ocm.git
synced 2026-08-23 22:26:49 +00:00
142 lines
5.7 KiB
Markdown
142 lines
5.7 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 Quick Start](https://open-cluster-management.io/getting-started/quick-start/) for more details.
|
|
|
|
2. Install ArgoCD on the hub cluster and both managed clusters.
|
|
```
|
|
for i in "hub" "cluster1" "cluster2"
|
|
do
|
|
kubectl config use-context kind-$i
|
|
kubectl create namespace argocd
|
|
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
|
|
done
|
|
```
|
|
See [ArgoCD website](https://argo-cd.readthedocs.io/en/stable/getting_started/) for more details.
|
|
|
|
1. Install the Pull controller on the hub cluster:
|
|
```
|
|
kubectl config use-context kind-hub
|
|
kubectl apply -f https://raw.githubusercontent.com/open-cluster-management-io/argocd-pull-integration/main/deploy/install.yaml
|
|
```
|
|
|
|
2. If your controller starts successfully, you should see:
|
|
```
|
|
$ kubectl config use-context kind-hub
|
|
$ kubectl -n open-cluster-management get deploy | grep pull
|
|
argocd-pull-integration-controller-manager 1/1 1 1 106s
|
|
```
|
|
|
|
3. On the Hub cluster, create ArgoCD cluster secrets that represent the managed clusters. This step can be automated with [OCM auto import controller](https://github.com/open-cluster-management-io/multicloud-integrations/).
|
|
|
|
```
|
|
kubectl config use-context kind-hub
|
|
for i in "cluster1" "cluster2"
|
|
do
|
|
cat <<EOF | kubectl apply -f -
|
|
apiVersion: v1
|
|
kind: Secret
|
|
metadata:
|
|
name: $i-secret # cluster1-secret
|
|
namespace: argocd
|
|
labels:
|
|
argocd.argoproj.io/secret-type: cluster
|
|
type: Opaque
|
|
stringData:
|
|
name: $i # cluster1
|
|
server: https://$i-control-plane:6443 # https://cluster1-control-plane:6443
|
|
EOF
|
|
done
|
|
```
|
|
|
|
4. On the Hub cluster, apply the manifests in `example/hub`:
|
|
```
|
|
kubectl config use-context kind-hub
|
|
kubectl apply -f example/hub
|
|
```
|
|
|
|
5. On the managed clusters, apply the manifests in `example/managed`:
|
|
```
|
|
for i in "cluster1" "cluster2"
|
|
do
|
|
kubectl config use-context kind-$i
|
|
kubectl apply -f example/managed
|
|
done
|
|
```
|
|
|
|
6. 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.
|
|
|
|
7. 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
|
|
```
|
|
|
|
8. 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
|
|
```
|
|
|
|
9. 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
|
|
```
|
|
|
|
10. 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)
|