# Environment setup for ISD-Argo

### **Pre-requisites**

* Kubernetes cluster 1.22.0 or later with at least 4 cores and 16 GB memory with 1 node
* Helm 3 is setup on the client system with 3.10.3 or later
* **Access**: Admin access to ONE namespace
* **Compute**:
  * **Minimum**: 4CPU, 16GB, 1 node
  * **Preferred**: 8CPU/32 GB Ram 2 Nodes
* You should have internet access and should be able to access github.com, docker.io, and quay.io.&#x20;
* Ensure that the URLs of ISD, KeyCloak, Vela are reachable from your browser. Either the DNS name server record must exist or "hosts" file must be updated. The following 3 URLs need to exist in DNS and point to Loadbalancer IP of the NGINX ingress controller.
  * Ip-address ISD.REPLACE.THIS.WITH.YOURCOMPANY.COM
  * Ip-address KEYCLOAK.REPLACE.THIS.WITH.YOURCOMPANY.COM
  * Ip-address \*.VELA.REPLACE.THIS.WITH.YOURCOMPANY.COM

    For example, “isd.isd-argo.opsmx.com”

    <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: For "<strong>ISD-Argo Installation with Argo CD and Argo Rollouts</strong>", the Argo CD URL in the DNS name server record must exist or "hosts" file must be updated.</p></div>

    * Ip-address ARGO.REPLACE.THIS.WITH.YOURCOMPANY.COM
* Vela Service requires the “Wild-card ingress” and “Wild-card TLS certificates to be provided to the ingress”. If you are using the cert-manager, please use this [**blog**](https://www.linkedin.com/pulse/wildcard-certificates-using-lets-encrypt-certbot-pallavi-udhane/) to create a Wild-card TLS certificate. Else please contact your certificate provider for the certificates for your URL equivalent for "\*.VELA.REPLACE.THIS.WITH.YOURCOMPANY.COM".
* An additional host URL may be required depending on your requirements.
  * Controller host URL
  * ArgoCD host URL

### Setup Laptop/machine used for ISD installation&#x20;

Follow the instructions that are specific to your laptop/machine operating system.

**Mac:**

* **Git** : Mac comes preinstalled with these commands
* **kubectl**: Install using instructions[ **here**](https://kubernetes.io/docs/tasks/tools/install-kubectl-macos/)**,** using homebrew is generally easier
* **Helm**: Install using instructions[ **here**](https://helm.sh/docs/intro/install/)**,** using homebrew is generally easier

**Windows:**&#x20;

* Use choco package manager to install git, kubectl, and helm.
* To install package manager execute the following command in PowerShell (running in administrator mode).

  <pre data-overflow="wrap"><code>Set-ExecutionPolicy Bypass -Scope Process -Force; `iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
  </code></pre>
* **git**: Execute this command at the power shell prompt: `choco install git`&#x20;
* **kubectl**: Execute the following command at the power shell prompt:

  <pre data-overflow="wrap"><code>choco install Kubernetes-cli
  </code></pre>
* **helm:** Execute the following command at the power shell prompt:&#x20;

  <pre data-overflow="wrap"><code>choco install kubernetes-helm
  </code></pre>

**Ubuntu/Linux:**

* **git**: Install using instructions [**here**](https://www.digitalocean.com/community/tutorials/how-to-install-git-on-ubuntu-20-04)
* **kubectl**: Install using instructions [**here**](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/), go with “**using native package manager**” if you are not sure.&#x20;
* **Helm**: Install helm using the instructions [**here**](https://helm.sh/docs/intro/install/), using a package manager is generally easier

**Verification**:&#x20;

Execute the following commands to verify that the commands are functional:

```
git -version
```

```
kubectl version
```

{% hint style="info" %}
**Note**: Please note that Kubernetes version should be >= 1.22.0-0
{% endhint %}

```
helm version
```

{% hint style="info" %}
**Note**: Please note that Helm version should be with >= 3.10.3
{% endhint %}

**Ensure working “kubectl” command:**

Execute the following commands to make sure whether “**Kubectl**” command is working

```
kubectl get no # to see the nodes
```

```
kubectl get ns # to see the namespaces
```

These commands should show some output. Kubeconfig file is not in the right place If you get the following error:&#x20;

"***The connection to the server localhost:8080 was refused - did you specify the right host or port?**"*

Rename the kubeconfig file as "config" and copy to /.kube folder in your machine. If that still does not work, try giving the –kubeconfig option to all kubectl commands. For example, refer to the following command.

```
kubectl -kubeconfig <full path to the kubeconfig file> get no
```

### Install NGINX ingress controller

If you are using any other ingress controller such as one provided by the cloud provider, you can skip this section.

* kubectl create ns ingress-nginx
* helm repo add ingress-nginx <https://kubernetes.github.io/ingress-nginx>
* helm repo update
* helm install ingress-nginx ingress-nginx/ingress-nginx -n ingress-nginx
* Check whether it is installed correctly or not, use$kubectl get svc -n ingress-nginx
* **Note down the IP Address (or hostname)** of the “ingress-nginx-controller” service in the output of the command above. This is required for making DNS or host entries as mentioned in the section below.

### **Install cert-manager**

If you create your own TLS certificates or the cluster does not have inbound port 80 access, you can skip this section.

* kubectl create namespace cert-manager
* helm repo add jetstack <https://charts.jetstack.io>
* helm repo update
* helm install cert-manager jetstack/cert-manager --set installCRDs=true -n cert-manager


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.opsmx.com/opsmx-1/opsmx-intelligent-software-delivery-isd-platform-argo/additional-resources/environment-setup-for-isd-argo.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
