zhanghongtong a7d92b69bc Update chart version 5 роки тому
..
templates bff88c104e Add Secret to chart 5 роки тому
.helmignore bc20f11110 add helm chart 5 роки тому
Chart.yaml a7d92b69bc Update chart version 5 роки тому
README.md 35eb07e1e3 add docs for docker and k8s 5 роки тому
README_zh.md 4a2f42253e Fix #53 and update chart readme 5 роки тому
values.yaml bff88c104e Add Secret to chart 5 роки тому

README.md

Kuiper can be deployed at k3s/k8s cluster through Helm chart. Below takes k3s as an example for demonstrating how to deploy at k3s.

Prepare

## K8S can skip this step $ export KUBECONFIG=/etc/rancher/k3s/k3s.yaml


## Get Kuiper Helm Chart

+ With any approaches in below to get Kuiper Helm Chart, here uses `git clone` to get Helm chart.

  + Git clone

    ```shell
    $ git clone https://github.com/emqx/kuiper
    $ cd kuiper/deploy/chart/kuiper
    ```

  + Helm repo (TODO)

    + Add Helm repo

      ```shell
      $ helm repo add emqx https://repos.emqx.io/charts
      ```

    + Search Kuiper

      ```shell
      helm search kuiper
      NAME          CHART VERSION   APP VERSION     DESCRIPTION
      emqx/kuiper   0.0.3           0.0.3           A lightweight IoT edge analytic software
      ```

+ By edit  `values.yaml` file or use command `helm install --set` to edit ``Kuiper Helm Chart`` configurations.

  ##### Kuiper Helm Chart Configurations 

  | Parameters                     | Descriptions                                         | Default Value            |
  | ------------------------------ | ---------------------------------------------------- | ------------------------ |
  | `replicaCount`                 | Deployed Kuiper instance number                      | 1                        |
  | `image.repository`             | Docker image name                                    | emqx/kuiper              |
  | `image.pullPolicy`             | Pull policy                                          | IfNotPresent             |
  | `persistence.enabled`          | Enable PVC                                           | false                    |
  | `persistence.storageClass`     | Storage class name                                   | `nil`                    |
  | `persistence.existingClaim`    | PV name                                              | ""                       |
  | `persistence.accessMode`       | PVC access mode                                      | ReadWriteOnce            |
  | `persistence.size`             | PVC size                                             | 20Mi                     |
  | `resources`                    | CPU/Memory                                           | {}                       |
  | `nodeSelector`                 | Node selector                                        | {}                       |
  | `tolerations`                  | Tolerations                                          | []                       |
  | `affinity`                     | Affinity                                             | {}                       |
  | `mqtt.servers`                 | MQTT broker address                                  | `[tcp://127.0.0.1:1883]` |
  | `mqtt.qos`                     | QoS of message subscription                          | 1                        |
  | `mqtt.sharedSubscription`      | Use shared subscription or not                       | true                     |
  | `mqtt.username`                | MQTT connection user name                            |                          |
  | `mqtt.password`                | MQTT connection password                             |                          |
  | `mqtt.certificationSecretName` | Secret resource name created for certification file. |                          |
  | `mqtt.privateKeySecretName`    | Secret resource name created fro private key file    |                          |
  | `mqtt.certificationPath`       | Certification path for MQTT connection               |                          |
  | `mqtt.privateKeyPath`          | Private key path for MQTT connection                 |                          |

## Deploy Kuiper through Helm

#### Deploy Kuiper quickly

+ Deploy Kuiper through Helm

  ```shell
  $ helm install my-kuiper .
  NAME: my-kuiper
  LAST DEPLOYED: Mon Dec  9 09:56:32 2019
  NAMESPACE: default
  STATUS: deployed
  REVISION: 1
  TEST SUITE: None
  • Deployment is successful
  $ kubectl get pods
  NAME       READY   STATUS    RESTARTS   AGE
  my-kuiper-0   1/1     Running   0          19s
  
  $ kubectl exec -it  my-kuiper-0 sh
  /kuiper # ./bin/cli
  Connecting to 127.0.0.1:20498...

Deploy persisted Kuiper

  • Kuiper realized persisted pods through creating PVC resources and mount /kuiper/data directory. Before deploying Kuiper, user need to create PVC or Storage Classes resource in Kubernetes.

  • Open and edit values.yaml file, set persistence.enabled=true

    • If user deploys PVC resource, , then setpersistence.existingClaim=your_pv_name
    • If user deploys Storage Classes resource, then set persistence.storageClass=your_storageClass_name
  • Deploy Kuiper through Helm

  $ helm install my-kuiper .
  NAME: my-kuiper
  LAST DEPLOYED: Mon Dec  9 09:56:32 2019
  NAMESPACE: default
  STATUS: deployed
  REVISION: 1
  TEST SUITE: None
  • Deployment is successful
  $ kubectl get pods
  NAME       READY   STATUS    RESTARTS   AGE
  my-kuiper-0   1/1     Running   0          19s
  
  $ kubectl exec -it  my-kuiper-0 sh
  /kuiper # ./bin/cli
  Connecting to 127.0.0.1:20498...

Deploy Kuiper and using SSL certification and key

  • Use command kubectl create secret , create certification & private keys to Secret resources, the usage of command kubectl create secret is listed as in below:
  $ kubectl create secret generic your-secret-name --from-file=/path/to/file

Create Secret resource for certification file:

  $ kubectl create secret generic client-cert --from-file=certs/client-cert.pem

Create Secret for private key file:

  $ kubectl create secret generic client-key --from-file=certs/client-key.pem

Review Secret resources

  $ kubectl get secret
  NAME                                         TYPE                                  DATA   AGE
  client-cert                                  Opaque                                1      25m
  client-key                                   Opaque                                1      24m
  • Open and edit values.yaml file

    • Set mqtt.certificationSecretName certification Secret resource: mqtt.certificationSecretName: client-cert
    • Set mqtt.privateKeySecretName private key Secret resource:mqtt.privateKeySecretName: client-key
    • Set certification file path: mqtt.certificationPath: /var/kuiper/certificate.pem
    • Set private key file path: mqtt.privateKeyPath: /var/kuiper/private.pem.key
  • Deploy Kuiper through Helm

  $ helm install my-kuiper .
  NAME: my-kuiper
  LAST DEPLOYED: Mon Dec  9 09:56:32 2019
  NAMESPACE: default
  STATUS: deployed
  REVISION: 1
  TEST SUITE: None
  • Deployment is successful
  $ kubectl get pods
  NAME       READY   STATUS    RESTARTS   AGE
  my-kuiper-0   1/1     Running   0          19s
  
  $ kubectl exec -it my-kuiper-0 -- ls -al /var/kuiper
  total 8
  drwxr-xr-x    4 root     root          4096 Dec 10 02:23 .
  drwxr-xr-x    1 root     root          4096 Dec 10 02:23 ..
  drwxrwxrwt    3 root     root           100 Dec 10 02:23 certificate.pem
  drwxrwxrwt    3 root     root           100 Dec 10 02:23 private.pem.key
  
  $ kubectl exec -it  my-kuiper-0 sh
  /kuiper # ./bin/cli
  Connecting to 127.0.0.1:20498...