Argo CD Installation#

Argo CD manages the NVIDIA Mission Control GitOps-managed components on the k8s-admin cluster. It watches your GitOps repository, where the desired component state is published, and keeps the cluster synchronized with that state.

Overview#

Create the GitOps repository and register it with Argo CD. It holds the desired state of the GitOps-managed components. Argo CD syncs that state onto the cluster and re-applies it whenever the cluster drifts. To update a component later, publish the change to the repository and Argo CD applies it.

%%{init: {'theme': 'base', 'themeVariables': {'lineColor': '#888888', 'edgeLabelBackground': '#e8e8e8'}}}%% flowchart TB subgraph head["BCM head node"] ArgoVals["argocd-values.yaml"] subgraph ans["Ansible playbooks"] PB["deploy_k8s_argocd"] end ArgoVals -.-> PB end Git[("GitOps repository")] subgraph cluster["k8s-admin cluster"] Argo["Argo CD"] Root["root Application"] end PB -->|"installs Argo CD,<br/>registers repo + NGC credentials"| Argo PB -->|"creates"| Root Git -->|"Argo CD syncs"| Argo style head fill:#f5f5f5,stroke:#9e9e9e,stroke-width:1px style ans fill:#f1f8e9,stroke:#2e7d32,stroke-width:1px style cluster fill:#eef5ff,stroke:#1565c0,stroke-width:2px style ArgoVals fill:#fffde7,stroke:#f9a825,color:#000 style PB fill:#e8f5e9,stroke:#2e7d32,color:#000 style Git fill:#e3f2fd,stroke:#1565c0,color:#000 style Argo fill:#ef7b4d,stroke:#c5410a,color:#fff style Root fill:#ede7f6,stroke:#5e35b1,color:#000 linkStyle default stroke-width:1.5px

Argo CD models each deployable unit as an Application. NVIDIA Mission Control follows the app-of-apps pattern: a single root Application points at the component Applications, so Argo CD manages the whole set from one entry point.

Argo CD installs in two steps because it manages itself through GitOps:

  1. Install a minimal Argo CD by hand. Nothing exists yet to deploy it through GitOps, so this first install is manual.

  2. Once Argo CD is running, it applies its own full configuration from the repository, along with the other GitOps-managed components. This is why an argocd Application appears while the components sync.

Prerequisites#

  • Kubernetes is deployed on k8s-admin with the cm-kubernetes-setup wizard, meets Shared Storage Requirements, and is reachable with kubectl from the active head node.

  • ansible-core 2.19 or newer is installed on the machine you run the playbooks from, which the nvidia.nmc collection requires. It provides the ansible-galaxy and ansible-playbook commands these steps use. Refer to the Ansible installation guide.

  • The NGC CLI is installed on the same machine. Refer to the NGC CLI documentation.

  • A Git repository that you create for the cluster’s GitOps state, initialized with its default branch and no k8s-admin manifests from a previous installation. Its access token needs Reporter role or higher with the read_repository scope for Argo CD to pull, and push access for the publish step.

Install the NMC Ansible collection#

Run the playbooks from a machine that can reach the active BCM head node over SSH as root with your SSH key. That machine needs ansible-core and the NGC CLI from the preceding prerequisites. Ansible runs the tasks on the head node, where kubectl reaches k8s-admin. Run the kubectl checks on this page on the head node too.

The steps on this page and in Installing GitOps-Managed Components run Ansible playbooks. Those playbooks ship in the nvidia.nmc collection, so install it first.

Configure the NGC CLI:

ngc config set

At the prompts, select API key authentication, enter an NGC API key that has access to the NVIDIA Mission Control collection, enter nvidia for the org, and enter nv-mission-control for the team. Accept the default values for the CLI output format and accelerated computing environment (ACE).

Download the collection from NGC, locate its archive, and install it with ansible-galaxy:

ngc registry resource download-version \
  "nvidia/nv-mission-control/nmc-ansible-collections:0.2.120"
nmc_collection_archive=$(find ./nmc-ansible-collections_v0.2.120 \
  -type f -name nvidia-nmc.tar.gz)
test -f "$nmc_collection_archive" &&
  ansible-galaxy collection install "$nmc_collection_archive"

If installation does not run, check that the download completed and contains exactly one nvidia-nmc.tar.gz archive.

This installs version 0.2.120 of the collection. The commands on the following pages call it as nvidia.nmc.

Prepare the Argo CD values file#

The deploy_k8s_argocd playbook installs Argo CD and registers your GitOps repository and NGC credentials with it. Create argocd-values.yaml and set the values it needs. This file holds the Ansible variables for the playbook, passed with -e. It is separate from the GitOps components values.yaml (Installing GitOps-Managed Components).

# Cluster identity.
nmc_cluster_name: <cluster-name>            # required; a name for your cluster, shown in the install output
k8s_cluster_name: k8s-admin                 # required; the admin Kubernetes cluster, also the folder Argo CD reads in the GitOps repository

# GitOps repository Argo CD syncs from (shared with the GitOps-components step).
gitops:
  url: https://<git-host>/<group>/<repo>.git   # required
  username: <git-username>                      # required
  password: <repo-token>                        # required
  branch: main                                  # required

# Argo CD server.
k8s_argocd_fqdn: argocd.dgx-<cluster-name>.nvidia.com            # required; host name the UI and API are served on
k8s_argocd_admin_password: <argocd-admin-password>  # required; password for the built-in 'admin' user
k8s_argocd_helm_chart_version: "9.5.20"             # empty = chart latest
k8s_argocd_use_docker_hub_redis_image: false        # optional, pull Redis from Docker Hub instead of AWS ECR Public

# NGC private Helm registry, so Argo CD can pull |nmc| charts.
k8s_argocd_ngc_helm_url: https://helm.ngc.nvidia.com/nvidia/nv-mission-control   # required
k8s_argocd_ngc_api_key: <ngc-api-key>                             # required

The Argo CD server fields:

  • k8s_argocd_fqdn is the host name the Argo CD web UI and API are served on, for example argocd.dgx-<cluster-name>.nvidia.com. Use the same host name for argocd.fqdn and the gateway certificate SAN list, both set in the GitOps-managed components values file (Installing GitOps-Managed Components). Argo CD is reached through the NVIDIA Mission Control gateway, so the UI becomes reachable once those components are installed. This host name resolves in DNS to the BCM head-node external or floating IP for the standard head-node path, or to the gateway load-balancer IP for direct access (refer to Reach the UIs). Create that record for your cluster.

  • k8s_argocd_admin_password is the password for Argo CD’s built-in admin account. Sign in to the web UI and CLI as admin with this password. The account name is fixed, so there is no username field to set.

  • k8s_argocd_helm_chart_version is the upstream argo-cd Helm chart version. Set it to the same value as argocd.version in the GitOps-managed components values file, so the initial install and the GitOps-managed Argo CD run one version. An empty value installs the chart’s latest version.

  • k8s_argocd_use_docker_hub_redis_image selects the registry for Argo CD’s bundled Redis image. Set it to true to pull from Docker Hub when AWS ECR Public rate-limits the default pull, and set useDockerHubRedisImage (Argo CD) to match.

Warning

gitops.password, k8s_argocd_admin_password, and k8s_argocd_ngc_api_key are credentials. Keep this file private and do not commit it to the GitOps repository.

Install Argo CD#

These steps start a new installation. Argo CD immediately syncs any existing manifests in its configured branch. Use a new GitOps repository or a branch without an existing k8s-admin tree so components do not start before you prepare their values and bootstrap secrets.

Before you deploy Argo CD, verify Ansible, the NGC CLI configuration, and SSH access to the active BCM head node:

ansible --version
ngc --version
ngc config current
ssh root@<head-node-ip> hostname

Confirm that the NGC configuration shows the expected org and team and that the SSH command returns the active head node’s host name.

Run the following command. It installs Argo CD, registers the repository and NGC Helm credentials, and creates the root Application. The -i "<head-node-ip>," inventory targets the active head node over SSH. Replace <head-node-ip> with the head node’s address.

ansible-playbook nvidia.nmc.deploy_k8s_argocd \
  -i "<head-node-ip>," \
  -u root \
  -e @argocd-values.yaml

Verify#

Confirm Argo CD is running and the root Application exists.

kubectl -n argocd get pods
kubectl -n argocd get application root

The Argo CD pods reach Running and the root Application is present. The root Application stays empty until you publish the GitOps-managed components.

Next step#

Continue to Installing GitOps-Managed Components to configure and deploy the GitOps-managed components.