Adv. install topic - pluggable components (#542)

* move all install comps to adv file

* recovering review comments

* filename change

* title update

* There can be multiple components in a knative package

* fix links

* new serving version

* Update install/Knative-custom-install.md

in testing I found that this is not a real namespace so removing

* Update packages in table

* review feedback, 0.2.1 eventing, eventsource lists

* edit Istio steps around admission controller

* fix indentation

* Recover networking related comments
This commit is contained in:
RichieEscarez 2018-12-26 11:40:36 -08:00 committed by Knative Prow Robot
parent c5fefdb08d
commit d04370f023
1 changed files with 316 additions and 0 deletions

View File

@ -0,0 +1,316 @@
# Performing a Custom Knative Installation
Use this guide to perform custom installations of Knative on your existing
Kubernetes clusters. Knative's pluggable components allow you to
install only what you want in each of your clusters.
The steps covered in the guide are for advanced operators who want to
customize each Knative installation. Installing individual Knative components
requires that you to run multiple and separate installation commands.
## Before you begin
* If you are new to Knative, you should instead [install one of the default
installation packages](./README.md). Follow the host specific Knative installation
instructions to help you get up and running with the least effort. Installing
a default package also ensures that you can run all the
[Knative Serving Samples](https://github.com/knative/docs/blob/master/serving/samples/README.md).
* The steps in this guide use `bash` for the MacOS or Linux environment; for Windows,
some commands might need adjustment.
* This guide assumes that you have an existing Kubernetes cluster,
on which you're comfortable installing and running _alpha_ level software.
* Kubernetes requirements:
* Your Kubernetes cluster version must be v1.10 or newer.
* Your version of the
[`kubectl` CLI tool](https://kubernetes.io/docs/tasks/tools/install-kubectl/)
must be v1.10 or newer.
## Installing Istio
Knative depends on [Istio](https://istio.io/docs/concepts/what-is-istio/) for
traffic routing and ingress. You have to option of injecting Istio sidecars and
enabling the Istio service mesh, but it's not required for certain Knative component.
You should first install the `istio-crds.yaml` package to ensure that the Istio
[Custom Resource Definitions (CRD)](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/)
are created before installing one of the Istio install packages.
### Choosing an Istio installation package
You can Istio with or without a service mesh:
* *automatic sidecar injection*: Enables the Istio service mesh by
[automatically injecting the Istio sidecars](https://istio.io/docs/setup/kubernetes/sidecar-injection/#automatic-sidecar-injection).
The sidecars are injected into each pod of your cluster as each pod is created.
* *manual sidecar injection*: Provides your Knative installation with traffic
routing and ingress, without the Istio service mesh. You do have the option of
later enabling the service mesh if you
[manually inject the Istio sidecars](https://istio.io/docs/setup/kubernetes/sidecar-injection/#manual-sidecar-injection).
If you are just getting started with Knative, you should choose automatic
sidecar injection and enable the Istio service mesh.
Due to current dependencies, some installable Knative options require the Istio
service mesh. You must install the `istio.yaml` package to enable automatic
sidecar injection to install the following options:
* [Knative Eventing](https://github.com/knative/eventing)
* [Knative Eventing Sources](https://github.com/knative/eventing-sources)
* [Observability plugins](../serving/installing-logging-metrics-traces.md)
#### Istio installation packages
| Istio Package Filename | Description |
| ---------------------- | ----------------- |
| [`istio-crds.yaml`][a] | Initially create CRDs before installing Istio. |
| [`istio.yaml`][b] | Install Istio with service mesh enabled (automatic sidecar injection). |
| [`istio-lean.yaml`][c] | Install Istio and disable the service mesh by default. |
[a]: https://github.com/knative/serving/releases/download/v0.2.3/istio-crds.yaml
[b]: https://github.com/knative/serving/releases/download/v0.2.3/istio.yaml
[c]: https://github.com/knative/serving/releases/download/v0.2.3/istio-lean.yaml
### Installing Istio installation packages
1. If you choose to install the Istio service mesh with automatic sidecar
injection, you must ensure that the
[`MutatingAdmissionWebhook` admission controller](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.10/#mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io)
is enabled on your cluster by running the following command:
```bash
kubectl api-versions | grep admissionregistration
```
Result:
```bash
admissionregistration.k8s.io/v1beta1
```
If `admissionregistration.k8s.io/v1beta1` is not listed, follow the
[Kubernetes instructions about enabling the `MutatingAdmissionWebhook` admission controller](https://kubernetes.io/docs/admin/admission-controllers/#how-do-i-turn-on-an-admission-controller).
For example, you add `--enable-admission-plugins=MutatingAdmissionWebhook`
to the `/etc/kubernetes/manifests/kube-apiserver.yaml` file.
1. Create the Istio CRDs on your cluster:
```bash
kubectl apply --filename https://github.com/knative/serving/releases/download/v0.2.3/istio-crds.yaml
```
1. Install Istio by specifying the package's path and filename in the `kubectl apply` command:
```bash
kubectl apply --filename https://github.com/knative/serving/releases/download/v0.2.3/[FILENAME].yaml
```
where `[FILENAME]` is the name of the Istio package that you want to install. Examples:
* `istio.yaml`
* `istio-lean.yaml`
1. If you chose to install the Istio service mesh with automatic sidecar injection, you must
label the default namespace with `istio-injection=enabled`:
```bash
kubectl label namespace default istio-injection=enabled
```
Important: You should set the `istio-injection` namespace, if you intend on
later enabling the Istio service mesh through manual sidecar injection.
1. View the status of your Istio installation. It might take a few
seconds so rerun the following command until all of the pods show a
`STATUS` of `Running` or `Completed`:
```bash
kubectl get pods --namespace istio-system
```
> Tip: You can append the `--watch` flag to the `kubectl get` commands to
view the pod status in realtime. You use `CTRL + C` to exit watch mode.
## Installing Knative components
You can install each Knative component independently or use the default packages
to install multiple components. The individual component packages exclude
an observability plugin but you have the option to install one later.
### Choosing Knative installation packages
The following Knative installation packages are available:
* **Multiple Component Bundle**:
* https://github.com/knative/serving/releases/download/v0.2.3/release.yaml
* https://github.com/knative/serving/releases/download/v0.2.3/release-no-mon.yaml
* https://github.com/knative/serving/releases/download/v0.2.3/release-lite.yaml
If you are new to Knative, you should install a bundle to get started. More
information about installing a bundle are in the [install guides](./README.md).
* **Build Component**:
* https://github.com/knative/build/releases/download/v0.2.0/release.yaml
* **Eventing Component**:
* https://github.com/knative/eventing/releases/download/v0.2.1/release.yaml
* https://github.com/knative/eventing/releases/download/v0.2.1/eventing.yaml
* https://github.com/knative/eventing-sources/releases/download/v0.2.1/release.yaml
* https://github.com/knative/eventing-sources/releases/download/v0.2.1/release-with-gcppubsub.yaml
* **Serving Component**:
* https://github.com/knative/serving/releases/download/v0.2.3/serving.yaml
#### Install package details and options
The following table includes details about the available Knative installation packages from the Knative repositories:
* [Serving][1]
* [Build][3]
* [Eventing][4]
* [Eventing Sources][5]
| Knative Package Filename | Serving Component | Observability Plugin* |Build Component | Eventing Component | Eventing Notes |
| ------------------------ | ----------------- | --------------------- | --------------- | ------------------ | ---------------- |
| **knative/serving** ||||||
| [`release.yaml`][1.1] | Included | [ELK stack][2] with [Prometheus][2.1] and [Grafana][2.2]* | Included | - | - |
| [`release-no-mon.yaml`][1.2] | Included | - |Included | - | - |
| [`release-lite.yaml`][1.3] | Included | [Prometheus][2.1] and [Grafana][2.2]* | Included | - | |
| [`serving.yaml`][1.4] | Included | - | - | - | - |
| [`build.yaml`][1.5] (copied from [knative/build][3]) | - | - | Included | - | - |
| **knative/build** ||||||
|[`release.yaml`][3.1] | - | - | Included | - | - |
| **knative/eventing** ||||||
| [`release.yaml`][4.1] | *Required* | - | - | Included | Includes the in-memory channel provisioner. |
| [`eventing.yaml`][4.2] | *Required* | - | - | Included | No channel provisioner. |
|[`in-memory-channel.yaml`][4.3] | *Required* | - | - | *Required* | Only the in-memory channel provisioner. |
| [`kafka.yaml`][4.4] | *Required* | - | - | *Required* | Only the Kafka channel provisioner. |
| **knative/eventing-sources** ||||||
|[`release.yaml`][5.1] | *Required* | - | - | *Required* | Source types: [Kubernetes][6], [GitHub][6.1], [Container image][6.3] |
| [`release-with-gcppubsub.yaml`][5.2] | *Required* | - | - | *Required* | Source types: [Kubernetes][6], [GitHub][6.1], [Container image][6.3], [PubSub][6.4] |
| [`message-dumper.yaml`][5.3] | *Required* | - | - | *Required* | Event logging service for debugging. |
_*_ See [Installing observability plugins](../serving/installing-logging-metrics-traces.md)
for details about the supported plugins and how to add monitoring, logging, and
tracing to your cluster.
[1]: https://github.com/knative/serving/releases/tag/v0.2.2
[1.1]: https://github.com/knative/serving/releases/download/v0.2.3/release.yaml
[1.2]: https://github.com/knative/serving/releases/download/v0.2.3/release-no-mon.yaml
[1.3]: https://github.com/knative/serving/releases/download/v0.2.3/release-lite.yaml
[1.4]: https://github.com/knative/serving/releases/download/v0.2.3/serving.yaml
[1.5]: https://github.com/knative/serving/releases/download/v0.2.3/build.yaml
[2]: https://www.elastic.co/elk-stack
[2.1]: https://prometheus.io
[2.2]: https://grafana.com
[3]: https://github.com/knative/build/releases/tag/v0.2.0
[3.1]: https://github.com/knative/build/releases/download/v0.2.0/release.yaml
[4]: https://github.com/knative/eventing/releases/tag/v0.2.1
[4.1]: https://github.com/knative/eventing/releases/download/v0.2.1/release.yaml
[4.2]: https://github.com/knative/eventing/releases/download/v0.2.1/eventing.yaml
[4.3]: https://github.com/knative/eventing/releases/download/v0.2.1/in-memory-channel.yaml
[4.4]: https://github.com/knative/eventing/releases/download/v0.2.1/kafka.yaml
[5]: https://github.com/knative/eventing-sources/releases/tag/v0.2.1
[5.1]: https://github.com/knative/eventing-sources/releases/download/v0.2.1/release.yaml
[5.2]: https://github.com/knative/eventing-sources/releases/download/v0.2.1/release-with-gcppubsub.yaml
[5.3]: https://github.com/knative/eventing-sources/releases/download/v0.2.1/message-dumper.yaml
[6]: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#event-v1-core
[6.1]: https://developer.github.com/v3/activity/events/types/
[6.3]: https://github.com/knative/docs/tree/master/eventing#containersource
[6.4]: https://cloud.google.com/pubsub/
### Installing Knative packages
**Tip**: From the table above, copy and paste the URL and package filename into
the commands below.
1. To install a Knative package by specifying the package's path and filename
in the `kubectl apply` command:
* To install an individual package:
```bash
kubectl apply --filename [INSTALL_PACKAGE]
```
* To install multiple packages, append additional `--filename [INSTALL_PACKAGE]`
flags to the `kubectl apply` command:
```bash
kubectl apply --filename [INSTALL_PACKAGE] --filename [INSTALL_PACKAGE] \
--filename [INSTALL_PACKAGE]
```
where [`INSTALL_PACKAGE`] is the URL path and filename of the a Knative installation package:
`https://github.com/knative/[COMPONENT]/releases/download/[VERSION]/[FILENAME].yaml`
and `[COMPONENT]`, `[VERSION]`, and `[FILENAME]` are the Knative component, release version, and filename of the installable resource. Examples:
* `https://github.com/knative/build/releases/download/v0.2.0/release.yaml`
* `https://github.com/knative/eventing/releases/download/v0.2.1/eventing.yaml`
* `https://github.com/knative/eventing-sources/releases/download/v0.2.1/release.yaml`
* `https://github.com/knative/serving/releases/download/v0.2.3/serving.yaml`
**Example install commands:**
* To install the Knative Serving and Build bundle:
```bash
kubectl apply --filename https://github.com/knative/serving/releases/download/v0.2.3/release.yaml
```
* To install all three Knative components without an observibility plugin:
```bash
kubectl apply --filename https://github.com/knative/build/releases/download/v0.2.0/release.yaml \
--filename https://github.com/knative/eventing/releases/download/v0.2.1/eventing.yaml \
--filename https://github.com/knative/serving/releases/download/v0.2.3/serving.yaml
```
1. Depending on what you choose to install, you view the status of your
installation by running one or more of the following commands. It
might take a few seconds so rerun the commands until all of the components
show a `STATUS` of `Running`:
```bash
kubectl get pods --namespace knative-build
kubectl get pods --namespace knative-eventing
kubectl get pods --namespace knative-sources
kubectl get pods --namespace knative-serving
```
> Tip: You can append the `--watch` flag to the `kubectl get` commands to
view the pod status in realtime. You use `CTRL + C` to exit watch mode.
1. If you installed a package that includes an observability plugin, run the following
command to ensure that the `knative-monitoring` pods show a `STATUS` of `Running`:
```bash
kubectl get pods --namespace knative-monitoring
```
You are now ready to deploy an app, create a build, or start sending and receiving
events in your Knative cluster.
## What's next
If you want to add monitoring, logging, and tracing support to your cluster, see
[Installing observability plugins](../serving/installing-logging-metrics-traces.md)
for details about the supported plugins.
Depending on the Knative components you installed, you can use the following guides
to help you get started with Knative:
* [Getting Started with Knative App Deployment](./getting-started-knative-app.md).
* [Knative Serving sample apps](../serving/samples/README.md).
* [Creating a simple Knative Build](../build/creating-builds.md).
* [Knative Build templates](https://github.com/knative/build-templates).
* [Knative Eventing overview](../eventing/README.md).
* [Knative Eventing code samples](../eventing/samples).