--- title: Standalone Operator Install [Experimental] description: Instructions to install Istio in a Kubernetes cluster using the Istio operator. weight: 25 keywords: [kubernetes, operator] aliases: --- {{< boilerplate experimental-feature-warning >}} This guide installs Istio using the standalone Istio [operator](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/). The only dependencies required are a supported Kubernetes cluster and the `kubectl` command. To install Istio for production use, we recommend [installing with {{< istioctl >}}](/docs/setup/install/istioctl/) instead. ## Prerequisites 1. Perform any necessary [platform-specific setup](/docs/setup/platform-setup/). 1. Check the [Requirements for Pods and Services](/docs/ops/prep/requirements/). 1. Deploy the Istio operator: {{< text bash >}} $ kubectl apply -f https://preliminary.istio.io/operator.yaml {{< /text >}} This command runs the operator by creating the following resources in the `istio-operator` namespace: - The operator custom resource definition - The operator controller deployment - A service to access operator metrics - Necessary Istio operator RBAC rules ## Install To install the Istio `demo` [configuration profile](/docs/setup/additional-setup/config-profiles/) using the operator, run the following command: {{< text bash >}} $ kubectl apply -f - <}} The controller will detect the `IstioControlPlane` resource and then install the Istio components corresponding to the specified (`demo`) configuration. You can confirm the Istio control plane services have been deployed with the following commands: {{< text bash >}} $ kubectl get svc -n istio-system NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE grafana ClusterIP 172.21.211.123 3000/TCP 2m istio-citadel ClusterIP 172.21.177.222 8060/TCP,15014/TCP 2m istio-egressgateway ClusterIP 172.21.113.24 80/TCP,443/TCP,15443/TCP 2m istio-galley ClusterIP 172.21.132.247 443/TCP,15014/TCP,9901/TCP 2m istio-ingressgateway LoadBalancer 172.21.144.254 52.116.22.242 15020:31831/TCP,80:31380/TCP,443:31390/TCP,31400:31400/TCP,15029:30318/TCP,15030:32645/TCP,15031:31933/TCP,15032:31188/TCP,15443:30838/TCP 2m istio-pilot ClusterIP 172.21.105.205 15010/TCP,15011/TCP,8080/TCP,15014/TCP 2m istio-policy ClusterIP 172.21.14.236 9091/TCP,15004/TCP,15014/TCP 2m istio-sidecar-injector ClusterIP 172.21.155.47 443/TCP,15014/TCP 2m istio-telemetry ClusterIP 172.21.196.79 9091/TCP,15004/TCP,15014/TCP,42422/TCP 2m jaeger-agent ClusterIP None 5775/UDP,6831/UDP,6832/UDP 2m jaeger-collector ClusterIP 172.21.135.51 14267/TCP,14268/TCP 2m jaeger-query ClusterIP 172.21.26.187 16686/TCP 2m kiali ClusterIP 172.21.155.201 20001/TCP 2m prometheus ClusterIP 172.21.63.159 9090/TCP 2m tracing ClusterIP 172.21.2.245 80/TCP 2m zipkin ClusterIP 172.21.182.245 9411/TCP 2m {{< /text >}} {{< text bash >}} $ kubectl get pods -n istio-system NAME READY STATUS RESTARTS AGE grafana-f8467cc6-rbjlg 1/1 Running 0 1m istio-citadel-78df5b548f-g5cpw 1/1 Running 0 1m istio-egressgateway-78569df5c4-zwtb5 1/1 Running 0 1m istio-galley-74d5f764fc-q7nrk 1/1 Running 0 1m istio-ingressgateway-7ddcfd665c-dmtqz 1/1 Running 0 1m istio-pilot-f479bbf5c-qwr28 1/1 Running 0 1m istio-policy-6fccc5c868-xhblv 1/1 Running 2 1m istio-sidecar-injector-78499d85b8-x44m6 1/1 Running 0 1m istio-telemetry-78b96c6cb6-ldm9q 1/1 Running 2 1m istio-tracing-69b5f778b7-s2zvw 1/1 Running 0 1m kiali-99f7467dc-6rvwp 1/1 Running 0 1m prometheus-67cdb66cbb-9w2hm 1/1 Running 0 1m {{< /text >}} ## Update Now, with the controller running, you can change the Istio configuration by editing or replacing the `IstioControlPlane` resource. The controller will detect the change and respond by updating the Istio installation correspondingly. For example, you can switch the installation to the `default` profile with the following command: {{< text bash >}} $ kubectl apply -f - <}} You can also enable or disable specific features or components. For example, to disable the telemetry feature: {{< text bash >}} $ kubectl apply -f - <}} Refer to the [`IstioControlPlane` API](/docs/reference/config/istio.operator.v1alpha12.pb/) for the complete set of configuration settings. ## Uninstall Delete the Istio operator and Istio deployment: {{< text bash >}} $ kubectl -n istio-operator get IstioControlPlane example-istiocontrolplane -o=json | jq '.metadata.finalizers = null' | kubectl delete -f - $ kubectl delete ns istio-operator --grace-period=0 --force $ kubectl delete ns istio-system --grace-period=0 --force {{< /text >}}