---
title: Installation with Ansible
description: Install Istio with the included Ansible playbook.
weight: 40
keywords: [kubernetes,ansible]
---

Instructions for the installation and configuration of Istio using Ansible.

## Prerequisites

The following instructions require [Ansible 2.4](https://docs.ansible.com/ansible/latest/intro_installation.html). Additionally Kubernetes **1.7.3 or newer** is required.

The following prerequisites must be met if using OpenShift.

* Minimum Version: **3.7.0**
* **oc** configured to be able to access the cluster
* User has logged in to the cluster
* User has `admin` role on OpenShift

## Deploy with Ansible

**Important**: All execution of the Ansible playbooks must take place in the `install/ansible` path of Istio.

This playbook will download and install Istio locally on your machine. To deploy the default settings of
Istio on OpenShift, the following command may be used:

```command
$ ansible-playbook main.yml
```

## Customization with Ansible

The Ansible playbook ships with reasonable defaults.

The currently exposed options are:

| Parameter | Description | Values | Default |
| --- | --- | --- | --- |
| `cluster_flavour` | Define the target cluster type | `k8s` or `ocp` | `ocp` |
| `github_api_token` | A valid GitHub API authentication token used for authenticating with GitHub | A valid GitHub API token | empty |
| `cmd_path` | Override the path to `kubectl` or `oc` | A valid path to a `kubectl` or `oc` binary | `$PATH/oc` |
| `istio.release_tag_name` | Istio release version to install | Any valid Istio release version | the latest Istio release version |
| `istio.dest` | The directory of the target machine where Istio will be installed | Any directory with read+write permissions | `~/.istio` |
| `istio.auth` | Install with mutual TLS | `true` or `false` | `false` |
| `istio.namespace` | Kubernetes namespace where Istio will be installed | any namespace may be specified | `istio-system` |
| `istio.addon` | Istio addons to install | array containing any of `grafana`, `prometheus`, `zipkin`, `jaeger`, or `servicegraph` | all addons are enabled by default |
| `istio.delete_resources` | Delete resources created under Istio namespace | `true` or `false` | false |
| `istio.samples` | Array containing the names of the samples that should be installed | `bookinfo`, `helloworld`, `httpbin`, `sleep` | none |

## Default installation

Operator installs Istio using all defaults on OpenShift:

```command
$ ansible-playbook main.yml
```

## Operational overrides

There may be circumstances in which defaults require overrides.

The following commands describe how an operator could use overrides with this Ansible playbook:

Operator installs Istio on Kubernetes:

```command
$ ansible-playbook main.yml -e '{"cluster_flavour": "k8s"}'
```

Operator installs Istio on Kubernetes and the path to `kubectl` is explicitly set:

```command
$ ansible-playbook main.yml -e '{"cluster_flavour": "k8s", "cmd_path": "~/kubectl"}'
```

Operator installs Istio on OpenShift with settings other than the default:

```command
$ ansible-playbook main.yml -e '{"istio": {"release_tag_name": "0.6.0", "auth": true, "delete_resources": true}}'
```

Operator installs Istio on OpenShift with customized addons:

```command
$ ansible-playbook main.yml -e '{"istio": {"delete_resources": true, "addon": ["grafana", "prometheus", "jaeger"]}}'
```

Operator installs Istio on OpenShift and additionally wants to deploy some of the samples:

```command
$ ansible-playbook main.yml -e '{"istio": {"samples": ["helloworld", "bookinfo"]}}'
```

> When Jaeger is enabled, Zipkin is disabled even when Zipkin is selected in the addons.

## Uninstalling

If a different version of Istio is desired, delete the `istio-system` namespace before executing the playbook.
In this case, the `istio.delete_resources` flag does not need to be set.

Setting `istio.delete_resources` to true will delete the Istio control plane from the cluster.

> In order to avoid any inconsistencies, this flag should only be used to reinstall the same version of Istio on a cluster.
