// =================================================================================================
// Deploying Istio
// =================================================================================================

== Deploying Istio

Install {istio} by following the instructions in the official https://istio.io/latest/docs/setup/getting-started[{istio} Getting started documentation^].

Run the following command to verify that the `istioctl` path was set successfully:

[role=command]
```
istioctl version
```

The output will be similar to the following example:
[source, role="no_copy"]
----
no running Istio pods in "istio-system"
1.24.2
----

Run the following command to configure the {istio} profile on {kube}:
[role=command]
```
istioctl install --set profile=demo
```

The following output appears when the installation is complete:
[source, role="no_copy"]
----
✔ Istio core installed
✔ Istiod installed
✔ Egress gateways installed
✔ Ingress gateways installed
✔ Installation complete
----

Verify that Istio was successfully deployed by running the following command:

[role=command]
```
kubectl get deployments -n istio-system
```

All the values in the `AVAILABLE` column will have a value of `1` after
the deployment is complete.

[source, role="no_copy"]
----
NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
istio-egressgateway      1/1     1            1           2m48s
istio-ingressgateway     1/1     1            1           2m48s
istiod                   1/1     1            1           2m48s
----
 
Ensure that the {istio} deployments are all available before you continue. The deployments might take a few minutes to become available. If the deployments aren't available after a few minutes, then increase the amount of memory available to your {kube} cluster. On Docker Desktop, you can increase the memory from your {docker} preferences. On {minikube}, you can increase the memory by using the `--memory` flag.

Finally, create the `istio-injection` label and set its value to `enabled`:

[role=command]
```
kubectl label namespace default istio-injection=enabled
```

Adding this label enables automatic {istio} sidecar injection. Automatic injection means that sidecars are automatically injected into your pods when you deploy your application.
