# 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
