Skip to content

Commit

Permalink
Update kubernetes_deployment.md
Browse files Browse the repository at this point in the history
fixes: kserve#383

Signed-off-by: Rajakavitha Kodhandapani <[email protected]>
  • Loading branch information
Rajakavitha1 authored Sep 23, 2024
1 parent 6aa3ac6 commit c1c0171
Showing 1 changed file with 38 additions and 54 deletions.
92 changes: 38 additions & 54 deletions docs/admin/kubernetes_deployment.md
Original file line number Diff line number Diff line change
@@ -1,52 +1,54 @@
# Kubernetes Deployment Installation Guide
KServe supports `RawDeployment` mode to enable `InferenceService` deployment with Kubernetes resources [`Deployment`](https://kubernetes.io/docs/concepts/workloads/controllers/deployment), [`Service`](https://kubernetes.io/docs/concepts/services-networking/service), [`Ingress`](https://kubernetes.io/docs/concepts/services-networking/ingress) and [`Horizontal Pod Autoscaler`](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale). Comparing to serverless deployment it unlocks Knative limitations such as mounting multiple volumes, on the other hand `Scale down and from Zero` is not supported in `RawDeployment` mode.

Kubernetes 1.22 is the minimally required version and please check the following recommended Istio versions for the corresponding
Kubernetes version.

## Recommended Version Matrix
| Kubernetes Version | Recommended Istio Version |
|:-------------------|:--------------------------|
| 1.27 | 1.18, 1.19 |
| 1.28 | 1.19, 1.20 |
| 1.29 | 1.20, 1.21 |

## 1. Install Istio

The minimally required Istio version is 1.13 and you can refer to the [Istio install guide](https://istio.io/latest/docs/setup/install).

Once Istio is installed, create `IngressClass` resource for istio.
```yaml
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: istio
spec:
controller: istio.io/ingress-controller
```
!!! note
Istio ingress is recommended, but you can choose to install with other [Ingress controllers](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/) and create `IngressClass` resource for your Ingress option.



## 2. Install Cert Manager
## 1. Install Cert Manager
The minimally required Cert Manager version is 1.9.0 and you can refer to [Cert Manager installation guide](https://cert-manager.io/docs/installation/).

!!! note
Cert manager is required to provision webhook certs for production grade installation, alternatively you can run self signed certs generation script.

## 3. Install KServe
## 2. Install KServe
!!! note
The default KServe deployment mode is `Serverless` which depends on Knative. The following step changes the default deployment mode to `RawDeployment` before installing KServe.

The default KServe deployment mode is `Serverless` which depends on Knative. The following step changes the default deployment mode to `RawDeployment` before installing KServe and the `RawDeployment` mode does not have any dependecy on Knative.

**i. Install KServe**
**i. Create a yaml file**
Open an editor of your choice and create `kustomization.yaml` file.
```
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

namespace: kserve

resources:
- https://github.com/kserve/kserve/releases/download/v0.13.0/kserve.yaml

patches:
- target:
kind: ConfigMap
name: inferenceservice-config
patch: |
- path: /data/deploy
op: replace
value: |-
{
"defaultDeploymentMode": "RawDeployment"
}
- path: /data/ingress
op: replace
value: |-
{
"disableIstioVirtualHost": true,
"disableIngressCreation": true,
"ingressDomain": "svc.cluster.local",
"ingressGateway" : "disabled",
"ingressService" : "disabled"
}

**ii. Install KServe**

=== "kubectl"
```bash
kubectl apply -f https://github.com/kserve/kserve/releases/download/v0.13.0/kserve.yaml
kubectl apply -f kustomization.yaml
```

Install KServe default serving runtimes:
Expand All @@ -55,21 +57,3 @@ Install KServe default serving runtimes:
```bash
kubectl apply -f https://github.com/kserve/kserve/releases/download/v0.13.0/kserve-cluster-resources.yaml
```

**ii. Change default deployment mode and ingress option**

First in ConfigMap `inferenceservice-config` modify the `defaultDeploymentMode` in the `deploy` section,

=== "kubectl"
```bash
kubectl patch configmap/inferenceservice-config -n kserve --type=strategic -p '{"data": {"deploy": "{\"defaultDeploymentMode\": \"RawDeployment\"}"}}'
```

then modify the `ingressClassName` in `ingress` section to point to `IngressClass` name created in [step 1](#1-install-istio).
```yaml
ingress: |-
{
"ingressClassName" : "your-ingress-class",
}
```

0 comments on commit c1c0171

Please sign in to comment.