Skip to content

Commit

Permalink
Merge pull request #23 from startechnica/mayastor
Browse files Browse the repository at this point in the history
[mayastor] Release v0.1.0
  • Loading branch information
firmansyahn authored Jun 20, 2022
2 parents c76a079 + b3ca3b0 commit bf25e60
Show file tree
Hide file tree
Showing 32 changed files with 3,835 additions and 0 deletions.
25 changes: 25 additions & 0 deletions charts/mayastor/.helmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store

# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/

# Common backup files
*.swp
*.bak
*.tmp
*~

# Various IDEs
.project
.idea/
*.tmproj
.vscode/
46 changes: 46 additions & 0 deletions charts/mayastor/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
annotations:
category: Storage
apiVersion: v2
appVersion: 1.0.2
dependencies:
- name: common
repository: https://charts.bitnami.com/bitnami
tags:
- bitnami-common
version: 1.x.x
- name: etcd
condition: etcd.enabled
repository: https://charts.bitnami.com/bitnami
tags:
- bitnami-etcd
version: 8.x.x
- name: jaeger-operator
condition: jaeger.enabled
repository: https://jaegertracing.github.io/helm-charts
version: 2.32.2
- name: loki-stack
condition: lokiStack.enabled
version: 2.6.5
repository: https://grafana.github.io/helm-charts
description: Mayastor is a cloud-native declarative data plane written in Rust.
Our goal is to abstract storage resources and their differences through the data
plane such that users only need to supply the what and do not have to worry about
the how so that individual teams stay in control.
home: https://github.com/startechnica/apps/tree/main/charts/mayastor
icon: https://openebs.io/images/seo/openebs.png
keywords:
- mayastor
- openebs
maintainers:
- name: firmansyahn
email: [email protected]
url: https://firmansyah.nainggolan.id
name: mayastor
sources:
- https://github.com/openebs/mayastor
- https://github.com/openebs/mayastor-control-plane
- https://github.com/openebs/mayastor-api
- https://openebs.io/docs/concepts/mayastor
- https://mayastor.gitbook.io
type: application
version: 0.1.0
108 changes: 108 additions & 0 deletions charts/mayastor/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
<!--- app-name: Mayastor -->

# Helm chart for Mayastor

Mayastor is a cloud-native declarative data plane written in Rust. The goal is to abstract storage resources and their differences through the data plane such that users only need to supply the what and do not have to worry about the how so that individual teams stay in control.

Mayastor also try to be as unopinionated as possible. What this means is that we try to work with the existing storage systems you might already have and unify them as abstract resources instead of swapping them out whenever the resources are local or remote.

[Overview of Mayastor](https://mayastor.gitbook.io)

**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/startechnica/apps/issues/new/choose)**

## TL;DR

```bash
$ helm repo add startechnica https://startechnica.github.io/apps
$ helm install my-release startechnica/mayastor
```

## Prerequisites

- Kubernetes 1.20+
- Helm 3.2.0+

## Installing the Chart

To install the chart with the release name `my-release` on `my-release` namespace:

```bash
$ helm repo add startechnica https://startechnica.github.io/apps
$ helm install my-release startechnica/mayastor --namespace my-release --create-namespace
```

These commands deploy Mayastor on the Kubernetes cluster in the default configuration.

> **Tip**: List all releases using `helm list -A`
## Uninstalling the Chart

To uninstall/delete the `my-release` deployment:

```bash
$ helm delete my-release --namespace my-release
```

The command removes all the Kubernetes components associated with the chart and deletes the release.

## Parameters

### Global parameters

| Name | Description | Value |
| ------------------------- | ----------------------------------------------- | ----- |
| `global.imageRegistry` | Global Docker image registry | `""` |
| `global.imagePullSecrets` | Global Docker registry secret names as an array | `[]` |

### Common parameters

| Name | Description | Value |
| ------------------- | ------------------------------------------------------------------------------------------ | --------------- |
| `nameOverride` | String to partially override mayastor.fullname template (will maintain the release name) | `""` |
| `namespaceOverride` | | `""` |
| `fullnameOverride` | String to fully override mayastor.fullname template | `""` |
| `kubeVersion` | Force target Kubernetes version (using Helm capabilities if not set) | `""` |
| `clusterDomain` | Kubernetes Cluster Domain | `cluster.local` |
| `extraDeploy` | Extra objects to deploy (value evaluated as a template) | `[]` |
| `commonLabels` | Add labels to all the deployed resources | `{}` |
| `commonAnnotations` | Add annotations to all the deployed resources | `{}` |

### I/O Engine Dataplane Deployment

### CSI Node Deployment

### CSI Controller Deployment

### Agent Core Deployment

### API Rest Deployment

### ETCD Deployment

### Setting Pod's affinity

This chart allows you to set your custom affinity using the `affinity` parameter. Find more information about Pod's affinity in the [kubernetes documentation](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity).

### Deploying extra resources

There are cases where you may want to deploy extra objects, such a ConfigMap containing your app's configuration or some extra deployment with a micro service used by your app. For covering this case, the chart allows adding the full specification of other objects using the `extraDeploy` parameter.

## Troubleshooting

Find more information about how to deal with common errors related to Startechnica's Helm charts in [this troubleshooting guide](https://startechnica.github.io/doc/troubleshoot-helm-chart-issues).

## License

Copyright &copy; 2022 Startechnica

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
9 changes: 9 additions & 0 deletions charts/mayastor/archive/CSIDriver.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{{- if .Values.csiDriver.create -}}
apiVersion: storage.k8s.io/v1
kind: CSIDriver
metadata:
name: io.openebs.csi-mayastor
spec:
podInfoOnMount: {{ .Values.csiDriver.podInfoOnMount }}
attachRequired: {{ .Values.csiDriver.attachRequired }}
{{- end }}
140 changes: 140 additions & 0 deletions charts/mayastor/archive/DaemonSet.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: {{ printf "%s" (include "common.names.fullname" .) }}
namespace: {{ include "common.names.namespace" . | quote }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
openebs.io/engine: io-engine
app.kubernetes.io/component: mayastor
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" (dict "value" .Values.commonLabels "context" $) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" (dict "value" .Values.commonAnnotations "context" $) | nindent 4 }}
{{- end }}
spec:
revisionHistoryLimit: 2
selector:
matchLabels: {{- include "common.labels.matchLabels" . | nindent 6 }}
app.kubernetes.io/component: mayastor
updateStrategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
minReadySeconds: 10
template:
metadata:
{{- if .Values.podAnnotations }}
annotations:
{{- include "common.tplvalues.render" (dict "value" .Values.podAnnotations "context" $) | nindent 8 }}
{{- end }}
labels: {{- include "common.labels.standard" . | nindent 8 }}
app.kubernetes.io/component: mayastor
{{- if .Values.podLabels }}
{{- include "common.tplvalues.render" (dict "value" .Values.podLabels "context" $) | nindent 8 }}
{{- end }}
spec:
# To resolve services from mayastor's namespace
dnsPolicy: ClusterFirstWithHostNet
hostNetwork: true
{{- include "mayastor.imagePullSecrets" . | nindent 6 }}
{{- if .Values.nodeSelector }}
nodeSelector: {{- include "common.tplvalues.render" (dict "value" .Values.nodeSelector "context" $) | nindent 8 }}
{{- end }}
serviceAccountName: {{ include "mayastor.serviceAccountName" . }}
{{- if .Values.tolerations }}
tolerations: {{- include "common.tplvalues.render" (dict "value" .Values.tolerations "context" .) | nindent 8 }}
{{- end }}
{{- if .Values.topologySpreadConstraints }}
topologySpreadConstraints: {{- include "common.tplvalues.render" (dict "value" .Values.topologySpreadConstraints "context" .) | nindent 8 }}
{{- end }}
containers:
- name: mayastor
image: {{ include "mayastor.image" . }}
imagePullPolicy: {{ .Values.image.pullPolicy | quote }}
env:
- name: NVMF_TCP_MAX_QUEUE_DEPTH
value: "32"
- name: MY_NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: RUST_LOG
value: info,mayastor={{ .Values.mayastorLogLevel }}
- name: RUST_BACKTRACE
value: full
{{- if .Values.diagnosticMode.enabled }}
command: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.command "context" $) | nindent 12 }}
{{- else if .Values.command }}
command: {{- include "common.tplvalues.render" (dict "value" .Values.command "context" $) | nindent 12 }}
{{- else }}
command:
- mayastor
{{- end }}
{{- if .Values.diagnosticMode.enabled }}
args: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.args "context" $) | nindent 12 }}
{{- else if .Values.args }}
args: {{- include "common.tplvalues.render" (dict "value" .Values.args "context" $) | nindent 12 }}
{{- else }}
args:
# The -l argument accepts cpu-list. Indexing starts at zero.
# For example -l 1,2,10-20 means use core 1, 2, 10 to 20.
# Note: Ensure that the CPU resources are updated accordingly.
# If you use 2 CPUs, the CPU: field should also read 2.
- "-N$(MY_NODE_NAME)"
- "-g$(MY_POD_IP)"
- "-y/var/local/mayastor/config.yaml"
- "-l{{ include "mayastorCpuSpec" . }}"
- "-pmayastor-etcd"
{{- end }}
securityContext:
privileged: true
resources:
# NOTE: Each container must have mem/cpu limits defined in order to
# belong to Guaranteed QoS class, hence can never get evicted in case of
# pressure unless they exceed those limits. limits and requests must be the same.
limits:
cpu: "{{ .Values.mayastorCpuCount }}"
memory: "1Gi"
hugepages-2Mi: "{{ max .Values.mayastorHugePagesGiB 2 }}Gi"
requests:
cpu: "{{ .Values.mayastorCpuCount }}"
memory: "1Gi"
hugepages-2Mi: "{{ max .Values.mayastorHugePagesGiB 2 }}Gi"
ports:
- containerPort: 10124
name: mayastor
protocol: TCP
volumeMounts:
- name: device
mountPath: /dev
- name: run-udev
mountPath: /run/udev
- name: dshm
mountPath: /dev/shm
- name: configlocation
mountPath: /var/local/mayastor/
volumes:
- name: device
hostPath:
path: /dev
type: Directory
- name: run-udev
hostPath:
path: /run/udev
type: Directory
- name: dshm
emptyDir:
medium: Memory
sizeLimit: "1Gi"
- name: hugepage
emptyDir:
medium: HugePages
- name: configlocation
hostPath:
path: /var/local/mayastor/
type: DirectoryOrCreate
Loading

0 comments on commit bf25e60

Please sign in to comment.