github.com/argoproj/argo-cd/v2@v2.10.9/docs/getting_started.md (about)

     1  # Getting Started
     2  
     3  !!! tip
     4      This guide assumes you have a grounding in the tools that Argo CD is based on. Please read [understanding the basics](understand_the_basics.md) to learn about these tools.
     5  
     6  ## Requirements
     7  
     8  * Installed [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) command-line tool.
     9  * Have a [kubeconfig](https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/) file (default location is `~/.kube/config`).
    10  * CoreDNS. Can be enabled for microk8s by `microk8s enable dns && microk8s stop && microk8s start`
    11  
    12  ## 1. Install Argo CD
    13  
    14  ```bash
    15  kubectl create namespace argocd
    16  kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
    17  ```
    18  
    19  This will create a new namespace, `argocd`, where Argo CD services and application resources will live.
    20  
    21  !!! warning
    22      The installation manifests include `ClusterRoleBinding` resources that reference `argocd` namespace. If you are installing Argo CD into a different
    23      namespace then make sure to update the namespace reference.
    24  
    25  If you are not interested in UI, SSO, multi-cluster features then you can install [core](operator-manual/installation.md#core) Argo CD components only:
    26  
    27  ```bash
    28  kubectl create namespace argocd
    29  kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/core-install.yaml
    30  ```
    31  
    32  This default installation will have a self-signed certificate and cannot be accessed without a bit of extra work.
    33  Do one of:
    34  
    35  * Follow the [instructions to configure a certificate](operator-manual/tls.md) (and ensure that the client OS trusts it).
    36  * Configure the client OS to trust the self signed certificate.
    37  * Use the --insecure flag on all Argo CD CLI operations in this guide.
    38  
    39  Use `argocd login --core` to [configure](./user-guide/commands/argocd_login.md) CLI access and skip steps 3-5.
    40  
    41  ## 2. Download Argo CD CLI
    42  
    43  Download the latest Argo CD version from [https://github.com/argoproj/argo-cd/releases/latest](https://github.com/argoproj/argo-cd/releases/latest). More detailed installation instructions can be found via the [CLI installation documentation](cli_installation.md).
    44  
    45  Also available in Mac, Linux and WSL Homebrew:
    46  
    47  ```bash
    48  brew install argocd
    49  ```
    50  
    51  ## 3. Access The Argo CD API Server
    52  
    53  By default, the Argo CD API server is not exposed with an external IP. To access the API server,
    54  choose one of the following techniques to expose the Argo CD API server:
    55  
    56  ### Service Type Load Balancer
    57  Change the argocd-server service type to `LoadBalancer`:
    58  
    59  ```bash
    60  kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
    61  ```
    62  
    63  ### Ingress
    64  Follow the [ingress documentation](operator-manual/ingress.md) on how to configure Argo CD with ingress.
    65  
    66  ### Port Forwarding
    67  Kubectl port-forwarding can also be used to connect to the API server without exposing the service.
    68  
    69  ```bash
    70  kubectl port-forward svc/argocd-server -n argocd 8080:443
    71  ```
    72  
    73  The API server can then be accessed using https://localhost:8080
    74  
    75  
    76  ## 4. Login Using The CLI
    77  
    78  The initial password for the `admin` account is auto-generated and stored as
    79  clear text in the field `password` in a secret named `argocd-initial-admin-secret`
    80  in your Argo CD installation namespace. You can simply retrieve this password
    81  using the `argocd` CLI:
    82  
    83  ```bash
    84  argocd admin initial-password -n argocd
    85  ```
    86  
    87  !!! warning
    88      You should delete the `argocd-initial-admin-secret` from the Argo CD
    89      namespace once you changed the password. The secret serves no other
    90      purpose than to store the initially generated password in clear and can
    91      safely be deleted at any time. It will be re-created on demand by Argo CD
    92      if a new admin password must be re-generated.
    93  
    94  Using the username `admin` and the password from above, login to Argo CD's IP or hostname:
    95  
    96  ```bash
    97  argocd login <ARGOCD_SERVER>
    98  ```
    99  
   100  !!! note
   101      The CLI environment must be able to communicate with the Argo CD API server. If it isn't directly accessible as described above in step 3, you can tell the CLI to access it using port forwarding through one of these mechanisms: 1) add `--port-forward-namespace argocd` flag to every CLI command; or 2) set `ARGOCD_OPTS` environment variable: `export ARGOCD_OPTS='--port-forward-namespace argocd'`.
   102  
   103  Change the password using the command:
   104  
   105  ```bash
   106  argocd account update-password
   107  ```
   108  
   109  ## 5. Register A Cluster To Deploy Apps To (Optional)
   110  
   111  This step registers a cluster's credentials to Argo CD, and is only necessary when deploying to
   112  an external cluster. When deploying internally (to the same cluster that Argo CD is running in),
   113  https://kubernetes.default.svc should be used as the application's K8s API server address.
   114  
   115  First list all clusters contexts in your current kubeconfig:
   116  ```bash
   117  kubectl config get-contexts -o name
   118  ```
   119  
   120  Choose a context name from the list and supply it to `argocd cluster add CONTEXTNAME`. For example,
   121  for docker-desktop context, run:
   122  ```bash
   123  argocd cluster add docker-desktop
   124  ```
   125  
   126  The above command installs a ServiceAccount (`argocd-manager`), into the kube-system namespace of
   127  that kubectl context, and binds the service account to an admin-level ClusterRole. Argo CD uses this
   128  service account token to perform its management tasks (i.e. deploy/monitoring).
   129  
   130  !!! note
   131      The rules of the `argocd-manager-role` role can be modified such that it only has `create`, `update`, `patch`, `delete` privileges to a limited set of namespaces, groups, kinds.
   132      However `get`, `list`, `watch` privileges are required at the cluster-scope for Argo CD to function.
   133  
   134  ## 6. Create An Application From A Git Repository
   135  
   136  An example repository containing a guestbook application is available at
   137  [https://github.com/argoproj/argocd-example-apps.git](https://github.com/argoproj/argocd-example-apps.git) to demonstrate how Argo CD works.
   138  
   139  ### Creating Apps Via CLI
   140  
   141  First we need to set the current namespace to argocd running the following command:
   142  
   143  ```bash
   144  kubectl config set-context --current --namespace=argocd
   145  ```
   146  
   147  Create the example guestbook application with the following command:
   148  
   149  ```bash
   150  argocd app create guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path guestbook --dest-server https://kubernetes.default.svc --dest-namespace default
   151  ```
   152  
   153  ### Creating Apps Via UI
   154  
   155  Open a browser to the Argo CD external UI, and login by visiting the IP/hostname in a browser and use the credentials set in step 4.
   156  
   157  After logging in, click the **+ New App** button as shown below:
   158  
   159  ![+ new app button](assets/new-app.png)
   160  
   161  Give your app the name `guestbook`, use the project `default`, and leave the sync policy as `Manual`:
   162  
   163  ![app information](assets/app-ui-information.png)
   164  
   165  Connect the [https://github.com/argoproj/argocd-example-apps.git](https://github.com/argoproj/argocd-example-apps.git) repo to Argo CD by setting repository url to the github repo url, leave revision as `HEAD`, and set the path to `guestbook`:
   166  
   167  ![connect repo](assets/connect-repo.png)
   168  
   169  For **Destination**, set cluster URL to `https://kubernetes.default.svc` (or `in-cluster` for cluster name) and namespace to `default`:
   170  
   171  ![destination](assets/destination.png)
   172  
   173  After filling out the information above, click **Create** at the top of the UI to create the `guestbook` application:
   174  
   175  ![destination](assets/create-app.png)
   176  
   177  
   178  ## 7. Sync (Deploy) The Application
   179  
   180  ### Syncing via CLI
   181  
   182  Once the guestbook application is created, you can now view its status:
   183  
   184  ```bash
   185  $ argocd app get guestbook
   186  Name:               guestbook
   187  Server:             https://kubernetes.default.svc
   188  Namespace:          default
   189  URL:                https://10.97.164.88/applications/guestbook
   190  Repo:               https://github.com/argoproj/argocd-example-apps.git
   191  Target:
   192  Path:               guestbook
   193  Sync Policy:        <none>
   194  Sync Status:        OutOfSync from  (1ff8a67)
   195  Health Status:      Missing
   196  
   197  GROUP  KIND        NAMESPACE  NAME          STATUS     HEALTH
   198  apps   Deployment  default    guestbook-ui  OutOfSync  Missing
   199         Service     default    guestbook-ui  OutOfSync  Missing
   200  ```
   201  
   202  The application status is initially in `OutOfSync` state since the application has yet to be
   203  deployed, and no Kubernetes resources have been created. To sync (deploy) the application, run:
   204  
   205  ```bash
   206  argocd app sync guestbook
   207  ```
   208  
   209  This command retrieves the manifests from the repository and performs a `kubectl apply` of the
   210  manifests. The guestbook app is now running and you can now view its resource components, logs,
   211  events, and assessed health status.
   212  
   213  ### Syncing via UI
   214  
   215  ![guestbook app](assets/guestbook-app.png)
   216  ![view app](assets/guestbook-tree.png)
   217