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.
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:
Install a minimal Argo CD by hand. Nothing exists yet to deploy it through GitOps, so this first install is manual.
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
argocdApplication appears while the components sync.
Prerequisites#
Kubernetes is deployed on
k8s-adminwith thecm-kubernetes-setupwizard, meets Shared Storage Requirements, and is reachable withkubectlfrom the active head node.ansible-core2.19 or newer is installed on the machine you run the playbooks from, which thenvidia.nmccollection requires. It provides theansible-galaxyandansible-playbookcommands 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-adminmanifests from a previous installation. Its access token needs Reporter role or higher with theread_repositoryscope 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_fqdnis the host name the Argo CD web UI and API are served on, for exampleargocd.dgx-<cluster-name>.nvidia.com. Use the same host name forargocd.fqdnand 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_passwordis the password for Argo CD’s built-inadminaccount. Sign in to the web UI and CLI asadminwith this password. The account name is fixed, so there is no username field to set.k8s_argocd_helm_chart_versionis the upstreamargo-cdHelm chart version. Set it to the same value asargocd.versionin 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_imageselects the registry for Argo CD’s bundled Redis image. Set it totrueto pull from Docker Hub when AWS ECR Public rate-limits the default pull, and setuseDockerHubRedisImage(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.