CI Updated Charts

Added:
  quobyte/quobyte-cluster:
    - 0.1.5
pull/540/head
Samuel Attwood 2022-10-20 22:43:14 -04:00
parent 67aa497236
commit 59f31a98f2
21 changed files with 1074 additions and 0 deletions

Binary file not shown.

View File

@ -0,0 +1,19 @@
annotations:
catalog.cattle.io/certified: partner
catalog.cattle.io/display-name: Quobyte Cluster Deployment
catalog.cattle.io/kube-version: 1.20-0 - 1.24-0
catalog.cattle.io/release-name: quobyte-cluster
apiVersion: v2
appVersion: "3"
description: Quobyte Cluster Helm Chart Deployment
home: https://www.quobyte.com
icon: https://quobyte.github.io/quobyte-k8s-resources/images/quobyte.png
keywords:
- quobyte
- storage
kubeVersion: 1.20-0 - 1.24-0
name: quobyte-cluster
sources:
- https://github.com/quobyte/quobyte-k8s-resources
type: application
version: 0.1.5

View File

@ -0,0 +1,31 @@
# Quobyte Cluster Helm Chart
This Helm Chart will install a Quobyte storage cluster.
## Preparation
You need to specify the infrastructure provider to provision
storage devices. A sample "values.yaml" looks like this:
```
quobyte:
# Name depends on the cloud environment, e.g. pd-ssd for Google Kubernetes Engine
# flashStorage: gp2 # AWS general purpose SSD
flashStorage: pd-ssd
# Storage provider depending to the cloud environment
# storageProvisioner: kubernetes.io/aws-ebs
storageProvisioner: kubernetes.io/gce-pd
```
You can inspect the values.yaml for other values to modify, but default should work.
This Helm Chart can be installed as usual:
```
helm repo add quobyte https://quobyte.github.io/quobyte-k8s-resources/helm-charts
helm repo update
helm install my-storage-cluster quobyte/quobyte-cluster
```

View File

@ -0,0 +1,26 @@
# Quobyte Storage Cluster
This Helm Chart will install a Quobyte storage cluster:
https://www.quobyte.com
Quobyte is a software defined, distributed storage system.
It allows parallel access from thousands of clients.
From a Kubernetes point of view it supports dynamic volume
provisioning with
* Multi Tenancy
* Encryption at Rest
* ReadWriteMany
To read about the full feature set have a look at the Quobyte documentation:
https://docs.quobyte.com/
or the more generic product overview:
https://www.quobyte.com/product/
For a detailed description of possbile configuration options comments and defaults in
values.yaml.

View File

@ -0,0 +1,24 @@
questions:
- variable: quobyte.storageProvisioner
default: kubernetes.io/gce-pd
required: true
type: string
label: Storage Provisioner
description: >
The provisioner Quobyte uses to provision storage devices.
For example "kubernetes.io/gce-pd" on Google GKE, "kubernetes.io/aws-ebs" on AWS.
- variable: quobyte.flashStorage
default: pd-ssd
required: true
type: string
label: Storage Class
description: >
The cloud provider storage class Quobyte uses when provisioning fast storage devices.
For example "pd-ssd" on Google GKE, "gp2" on AWS.
- variable: quobyte.replicas
default: 3
required: false
label: Service Replicas
description: >
The number of service replicas for each Quobyte service (registry, metadata, data).
Must not be greater than number of available nodes.

View File

@ -0,0 +1,10 @@
Welcome to Quobyte :)
You just installed a truly scalable storage cluster.
You can now log in to the quobyte web console. To get the
webconsole address you can get the k8s service like this:
$ kubectl get svc/quobyte-webui

View File

@ -0,0 +1,74 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: quobyte-api
spec:
selector:
matchLabels:
app: quobyte-api # has to match .spec.template.metadata.labels
replicas: {{ .Values.quobyte.replicas }} # by default is 4
template:
metadata:
labels:
app: quobyte-api # has to match .spec.selector.matchLabels
annotations:
timestamp: "{{ now }}"
spec:
terminationGracePeriodSeconds: 10
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet
containers:
- name: quobyte-api
image: {{ .Values.quobyte.image }}
imagePullPolicy: Always
env:
- name: NODENAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: HOST_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: QUOBYTE_DATA_PORT
value: "7863"
- name: QUOBYTE_META_PORT
value: "7862"
- name: QUOBYTE_REG_PORT
value: "7861"
- name: QUOBYTE_API_PORT
value: "7860"
- name: CLOUD_INSTALL
value: "1"
- name: QUOBYTE_SERVICE
value: api
- name: QUOBYTE_REGISTRY
value: _quobyte._tcp.quobyte.{{ .Release.Namespace }}.svc.cluster.local
- name: CLUSTER_NS
value: {{ .Release.Namespace }}
- name: LIMIT_OPEN_FILES
value: "{{ .Values.quobyte.maxopenfiles }}"
- name: LIMIT_MAX_PROCESSES
value: "{{ .Values.quobyte.maxprocs }}"
ports:
- containerPort: 7860
name: quobyteapi
{{- if .Values.nodepoolname }}
nodeSelector:
storage-node-pool: {{ .Values.nodepoolname }}
{{- end }}
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- quobyte
topologyKey: "kubernetes.io/hostname"

View File

@ -0,0 +1,17 @@
---
# This is a headless service in order to get svc entries in kube-dns
apiVersion: v1
kind: Service
metadata:
name: quobyte-api
labels:
app: quobyte-api
spec:
ports:
- port: 7860
name: "quobyte"
protocol: "TCP"
targetPort: 7860
selector:
app: quobyte-api

View File

@ -0,0 +1,157 @@
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: quobyte-data
spec:
selector:
matchLabels:
app: quobyte-data # has to match .spec.template.metadata.labels
serviceName: "quobyte-data"
replicas: {{ .Values.quobyte.replicas }} # by default is 4
template:
metadata:
labels:
app: quobyte-data # has to match .spec.selector.matchLabels
annotations:
timestamp: "{{ now }}"
spec:
terminationGracePeriodSeconds: 10
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet
initContainers:
- name: quobyte-data-pre
image: {{ .Values.quobyte.image }}
env:
- name: NODENAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: HOST_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: QUOBYTE_DATA_PORT
value: "7863"
- name: QUOBYTE_META_PORT
value: "7862"
- name: QUOBYTE_REG_PORT
value: "7861"
- name: QUOBYTE_API_PORT
value: "7860"
- name: QUOBYTE_SERVICE
value: data
- name: CLOUD_INSTALL
value: "1"
- name: CLUSTER_NS
value: {{ .Release.Namespace }}
- name: LIMIT_OPEN_FILES
value: "{{ .Values.quobyte.maxopenfiles }}"
- name: LIMIT_MAX_PROCESSES
value: "{{ .Values.quobyte.maxprocs }}"
volumeMounts:
- name: config
mountPath: /etc/quobyte
{{- range .Values.quobyte.datadisks }}
- name: {{ .name }}
mountPath: {{ .mountpoint }}
{{- end }}
command:
- /bin/sh
- -xc
- |
touch /etc/quobyte/$QUOBYTE_SERVICE.cfg
echo test.device_dir=/var/lib/quobyte/devices >> /etc/quobyte/data.cfg
echo rpc.bind.address=${MY_POD_IP} >> /etc/quobyte/data.cfg
echo hostname=${HOSTNAME} >> /etc/quobyte/data.cfg
for j in $(ls -d /var/lib/quobyte/devices/data*)
do
i=$(basename $j)
if [ ! -e /var/lib/quobyte/devices/${i}/QUOBYTE_DEV_SETUP ];then
/usr/bin/qmkdev -d -t DATA /var/lib/quobyte/devices/${i}
fi
done
containers:
- name: quobyte-data
image: {{ .Values.quobyte.image }}
imagePullPolicy: Always
env:
- name: NODENAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: HOST_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: QUOBYTE_DATA_PORT
value: "7863"
- name: QUOBYTE_META_PORT
value: "7862"
- name: QUOBYTE_REG_PORT
value: "7861"
- name: QUOBYTE_API_PORT
value: "7860"
- name: QUOBYTE_SERVICE
value: data
- name: CLOUD_INSTALL
value: "1"
- name: CLUSTER_NS
value: {{ .Release.Namespace }}
- name: QUOBYTE_REGISTRY
value: _quobyte._tcp.quobyte.{{ .Release.Namespace }}.svc.cluster.local
- name: LIMIT_OPEN_FILES
value: "{{ .Values.quobyte.maxopenfiles }}"
- name: LIMIT_MAX_PROCESSES
value: "{{ .Values.quobyte.maxprocs }}"
ports:
- containerPort: 7863
name: quobyte-data
volumeMounts:
- name: config
mountPath: /etc/quobyte
{{- range .Values.quobyte.datadisks }}
- name: {{ .name }}
mountPath: {{ .mountpoint }}
{{- end }}
{{- if .Values.nodepoolname }}
nodeSelector:
storage-node-pool: {{ .Values.nodepoolname }}
{{- end }}
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- quobyte
topologyKey: "kubernetes.io/hostname"
volumeClaimTemplates:
- metadata:
name: config
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 10Gi
{{- range .Values.quobyte.datadisks }}
- metadata:
name: {{ .name }}
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "faster"
resources:
requests:
storage: {{ .size }}
{{- end }}

View File

@ -0,0 +1,156 @@
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: quobyte-meta
spec:
selector:
matchLabels:
app: quobyte-meta # has to match .spec.template.metadata.labels
serviceName: "quobyte-meta"
replicas: {{ .Values.quobyte.replicas }} # by default is 4
template:
metadata:
labels:
app: quobyte-meta # has to match .spec.selector.matchLabels
annotations:
timestamp: "{{ now }}"
spec:
terminationGracePeriodSeconds: 10
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet
initContainers:
- name: quobyte-meta-pre
image: {{ .Values.quobyte.image }}
env:
- name: NODENAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: HOST_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: QUOBYTE_DATA_PORT
value: "7863"
- name: QUOBYTE_META_PORT
value: "7862"
- name: QUOBYTE_REG_PORT
value: "7861"
- name: QUOBYTE_API_PORT
value: "7860"
- name: QUOBYTE_SERVICE
value: metadata
- name: CLOUD_INSTALL
value: "1"
- name: CLUSTER_NS
value: {{ .Release.Namespace }}
- name: LIMIT_OPEN_FILES
value: "{{ .Values.quobyte.maxopenfiles }}"
- name: LIMIT_MAX_PROCESSES
value: "{{ .Values.quobyte.maxprocs }}"
volumeMounts:
- name: config
mountPath: /etc/quobyte
{{- range .Values.quobyte.metadatadisks }}
- name: {{ .name }}
mountPath: {{ .mountpoint }}
{{- end }}
command:
- /bin/sh
- -xc
- |
touch /etc/quobyte/$QUOBYTE_SERVICE.cfg
echo test.device_dir=/var/lib/quobyte/devices >> /etc/quobyte/metadata.cfg
echo rpc.bind.address=${MY_POD_IP} >> /etc/quobyte/metadata.cfg
echo hostname=${HOSTNAME} >> /etc/quobyte/metadata.cfg
for j in $(ls -d /var/lib/quobyte/devices/metadata*)
do
i=$(basename $j)
if [ ! -e /var/lib/quobyte/devices/${i}/QUOBYTE_DEV_SETUP ];then
/usr/bin/qmkdev -d -t METADATA /var/lib/quobyte/devices/${i}
fi
done
containers:
- name: quobyte
image: {{ .Values.quobyte.image }}
imagePullPolicy: Always
env:
- name: NODENAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: HOST_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: QUOBYTE_DATA_PORT
value: "7863"
- name: QUOBYTE_META_PORT
value: "7862"
- name: QUOBYTE_REG_PORT
value: "7861"
- name: QUOBYTE_API_PORT
value: "7860"
- name: CLOUD_INSTALL
value: "1"
- name: QUOBYTE_SERVICE
value: metadata
- name: QUOBYTE_REGISTRY
value: _quobyte._tcp.quobyte.{{ .Release.Namespace }}.svc.cluster.local
- name: CLUSTER_NS
value: {{ .Release.Namespace }}
- name: LIMIT_OPEN_FILES
value: "{{ .Values.quobyte.maxopenfiles }}"
- name: LIMIT_MAX_PROCESSES
value: "{{ .Values.quobyte.maxprocs }}"
ports:
- containerPort: 7862
name: quobyte-meta
volumeMounts:
- name: config
mountPath: /etc/quobyte
{{- range .Values.quobyte.metadatadisks }}
- name: {{ .name }}
mountPath: {{ .mountpoint }}
{{- end }}
{{- if .Values.nodepoolname }}
nodeSelector:
storage-node-pool: {{ .Values.nodepoolname }}
{{- end }}
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- quobyte
topologyKey: "kubernetes.io/hostname"
volumeClaimTemplates:
- metadata:
name: config
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 10Gi
{{- range .Values.quobyte.metadatadisks }}
- metadata:
name: {{ .name }}
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "faster"
resources:
requests:
storage: {{ .size }}
{{- end }}

View File

@ -0,0 +1,17 @@
---
# Quobyte registry service.
apiVersion: v1
kind: Service
metadata:
name: quobyte
labels:
app: quobyte
spec:
clusterIP: "None"
ports:
- port: 7861
name: "quobyte"
targetPort: 7861
selector:
app: quobyte-reg

View File

@ -0,0 +1,149 @@
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: quobyte-reg
spec:
selector:
matchLabels:
app: quobyte-reg # has to match .spec.template.metadata.labels
serviceName: "quobyte"
replicas: {{ .Values.quobyte.replicas }}
template:
metadata:
labels:
app: quobyte-reg # has to match .spec.selector.matchLabels
annotations:
timestamp: "{{ now }}"
spec:
subdomain: "quobyte"
terminationGracePeriodSeconds: 10
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet
initContainers:
- name: quobyte-reg-pre
image: {{ .Values.quobyte.image }}
env:
- name: NODENAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: QUOBYTE_DATA_PORT
value: "7863"
- name: QUOBYTE_META_PORT
value: "7862"
- name: QUOBYTE_REG_PORT
value: "7861"
- name: QUOBYTE_API_PORT
value: "7860"
- name: QUOBYTE_SERVICE
value: registry
- name: CLOUD_INSTALL
value: "1"
- name: CLUSTER_NS
value: {{ .Release.Namespace }}
- name: LIMIT_OPEN_FILES
value: "{{ .Values.quobyte.maxopenfiles }}"
- name: LIMIT_MAX_PROCESSES
value: "{{ .Values.quobyte.maxprocs }}"
volumeMounts:
- name: config
mountPath: /etc/quobyte
- name: registry
mountPath: /var/lib/quobyte/devices/registry
command:
- /bin/sh
- -xc
- |
touch /etc/quobyte/$QUOBYTE_SERVICE.cfg
echo test.device_dir=/var/lib/quobyte/devices >> /etc/quobyte/registry.cfg
echo rpc.bind.address=${MY_POD_IP} >> /etc/quobyte/registry.cfg
echo hostname=${HOSTNAME} >> /etc/quobyte/registry.cfg
NODENUM=$(echo "$NODENAME" | tr -dc "0-9")
if [ ! -e /var/lib/quobyte/devices/registry/QUOBYTE_DEV_SETUP ]; then
if [[ $NODENUM == 0 ]]; then
/usr/bin/qbootstrap -y -d /var/lib/quobyte/devices/registry
else
/usr/bin/qmkdev -d -t REGISTRY /var/lib/quobyte/devices/registry
fi
fi
containers:
- name: quobyte-reg
image: {{ .Values.quobyte.image }}
imagePullPolicy: Always
env:
- name: NODENAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: HOST_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: QUOBYTE_DATA_PORT
value: "7863"
- name: QUOBYTE_META_PORT
value: "7862"
- name: QUOBYTE_REG_PORT
value: "7861"
- name: QUOBYTE_API_PORT
value: "7860"
- name: QUOBYTE_SERVICE
value: registry
- name: CLOUD_INSTALL
value: "1"
- name: CLUSTER_NS
value: {{ .Release.Namespace }}
- name: QUOBYTE_REGISTRY
value: _quobyte._tcp.quobyte.{{ .Release.Namespace }}.svc.cluster.local
- name: LIMIT_OPEN_FILES
value: "{{ .Values.quobyte.maxopenfiles }}"
- name: LIMIT_MAX_PROCESSES
value: "{{ .Values.quobyte.maxprocs }}"
ports:
- containerPort: 7861
name: quobyte-reg
volumeMounts:
- name: config
mountPath: /etc/quobyte
- name: registry
mountPath: /var/lib/quobyte/devices/registry
{{- if .Values.nodepoolname }}
nodeSelector:
storage-node-pool: {{ .Values.nodepoolname }}
{{- end }}
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- quobyte-reg
topologyKey: "kubernetes.io/hostname"
volumeClaimTemplates:
- metadata:
name: config
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 10Gi
- metadata:
name: registry
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "faster"
resources:
requests:
storage: 25Gi

View File

@ -0,0 +1,137 @@
{{- if .Values.quobyte.s3.enabled }}
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: quobyte-s3
spec:
selector:
matchLabels:
app: quobyte-s3 # has to match .spec.template.metadata.labels
serviceName: "quobyte"
replicas: {{ .Values.quobyte.replicas }} # by default is 4
template:
metadata:
labels:
app: quobyte-s3 # has to match .spec.selector.matchLabels
annotations:
timestamp: "{{ now }}"
spec:
terminationGracePeriodSeconds: 10
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet
initContainers:
- name: quobyte-s3-pre
image: {{ .Values.quobyte.image }}
env:
- name: NODENAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: HOST_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: QUOBYTE_DATA_PORT
value: "7863"
- name: QUOBYTE_META_PORT
value: "7862"
- name: QUOBYTE_REG_PORT
value: "7861"
- name: QUOBYTE_API_PORT
value: "7860"
- name: QUOBYTE_SERVICE
value: s3
- name: CLOUD_INSTALL
value: "1"
- name: CLUSTER_NS
value: {{ .Release.Namespace }}
- name: LIMIT_OPEN_FILES
value: "{{ .Values.quobyte.maxopenfiles }}"
- name: LIMIT_MAX_PROCESSES
value: "{{ .Values.quobyte.maxprocs }}"
- name: QUOBYTE_S3_HOSTNAME
value: "{{ .Values.s3.dnsname }}"
volumeMounts:
- name: config-s3
mountPath: /etc/quobyte
command:
- /bin/sh
- -xc
- |
touch /etc/quobyte/$QUOBYTE_SERVICE.cfg
echo test.device_dir=/var/lib/quobyte/devices >> /etc/quobyte/s3.cfg
echo rpc.bind.address=${MY_POD_IP} >> /etc/quobyte/s3.cfg
echo hostname=${HOSTNAME} >> /etc/quobyte/s3.cfg
containers:
- name: quobyte-s3
image: {{ .Values.quobyte.image }}
imagePullPolicy: Always
env:
- name: NODENAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: HOST_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: QUOBYTE_DATA_PORT
value: "7863"
- name: QUOBYTE_META_PORT
value: "7862"
- name: QUOBYTE_REG_PORT
value: "7861"
- name: QUOBYTE_API_PORT
value: "7860"
- name: QUOBYTE_SERVICE
value: s3
- name: CLOUD_INSTALL
value: "1"
- name: CLUSTER_NS
value: {{ .Release.Namespace }}
- name: LIMIT_OPEN_FILES
value: "{{ .Values.quobyte.maxopenfiles }}"
- name: LIMIT_MAX_PROCESSES
value: "{{ .Values.quobyte.maxprocs }}"
- name: QUOBYTE_SERVICE
value: s3
- name: QUOBYTE_S3_HOSTNAME
value: "{{ .Values.s3.dnsname }}"
ports:
- containerPort: 80
name: quobyte-s3
volumeMounts:
- name: config-s3
mountPath: /etc/quobyte
{{- if .Values.nodepoolname }}
nodeSelector:
storage-node-pool: {{ .Values.nodepoolname }}
{{- end }}
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- quobyte
topologyKey: "kubernetes.io/hostname"
volumeClaimTemplates:
- metadata:
name: config-s3
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 10Gi
{{- end }}

View File

@ -0,0 +1,8 @@
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: faster
provisioner: {{ .Values.quobyte.storageProvisioner }}
parameters:
type: {{ .Values.quobyte.flashStorage }}

View File

@ -0,0 +1,78 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: quobyte-web
spec:
selector:
matchLabels:
app: quobyte-web # has to match .spec.template.metadata.labels
##replicas: {{ .Values.quobyte.replicas }} # by default is 4
replicas: 1 # by default is 4
template:
metadata:
labels:
app: quobyte-web # has to match .spec.selector.matchLabels
annotations:
timestamp: "{{ now }}"
spec:
terminationGracePeriodSeconds: 10
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet
containers:
- name: quobyte-web
image: {{ .Values.quobyte.image }}
imagePullPolicy: Always
env:
- name: NODENAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: HOST_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: QUOBYTE_DATA_PORT
value: "7863"
- name: QUOBYTE_META_PORT
value: "7862"
- name: QUOBYTE_REG_PORT
value: "7861"
- name: QUOBYTE_API_PORT
value: "7860"
- name: QUOBYTE_SERVICE
value: webconsole
- name: QUOBYTE_WEBCONSOLE_PORT
value: "{{ .Values.quobyte.webconsoleport }}"
- name: CLOUD_INSTALL
value: "1"
- name: QUOBYTE_REGISTRY
value: _quobyte._tcp.quobyte.{{ .Release.Namespace }}.svc.cluster.local
- name: CLUSTER_NS
value: {{ .Release.Namespace }}
- name: LIMIT_OPEN_FILES
value: "{{ .Values.quobyte.maxopenfiles }}"
- name: LIMIT_MAX_PROCESSES
value: "{{ .Values.quobyte.maxprocs }}"
ports:
- containerPort: 8080
name: quobyte-web
{{- if .Values.nodepoolname }}
nodeSelector:
storage-node-pool: {{ .Values.nodepoolname }}
{{- end }}
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- quobyte
topologyKey: "kubernetes.io/hostname"

View File

@ -0,0 +1,18 @@
---
apiVersion: v1
kind: Service
metadata:
name: quobyte-webui
{{- if .Values.quobyte.lbinternal }}
annotations:
cloud.google.com/load-balancer-type: "Internal"
{{- end }}
spec:
type: LoadBalancer
selector:
app: quobyte-web
ports:
- protocol: TCP
port: 8080
targetPort: 8080

View File

@ -0,0 +1,75 @@
# Name of the nodepool in which the Quobyte services will be deployed.
# A separate nodepool can be used for performance isolation to avoid
# other workloads from impacting your storage.
# You can create a nodepool by labeling worker nodes
# "kubectl label nodes <your-node-name> storage-node-pool=quobyte"
## nodepoolname: quobyte
# Configuration for the Quobyte services, i.e. the Quobyte cluster providing storage.
quobyte:
# Loadbalancer to make the Quobyte webconsole accessible.
# If set to true an internal IP will be used, if set to false an external IP will be used
# the exact semantics of internal/external depend on your k8s config or provider.
lbinternal: false
# Configuration for the persistent disks used by the Quobyte services.
# This is *not* the configuration for the CSI plugin and the storage classes
# to consume the Quobyte storage!
# Name depends on the cloud environment, e.g. pd-ssd for Google Kubernetes Engine
# flashStorage: gp2 # AWS general purpose SSD
flashStorage: pd-ssd
# Storage provider depending to the cloud environment
# storageProvisioner: kubernetes.io/aws-ebs
storageProvisioner: kubernetes.io/gce-pd
# Minimum number of replicas per Quobyte services, minimum is 3.
# Your nodepool must have at least 3 nodes.
replicas: 3
# Data disks attached to each Quobyte data services, minimum is one data disk,
# maximum is 16. Please note that adding more data disks will increase capacity,
# but not necessarily the performance of your Quobyte cluster.
# The name MUST start with "data".
# The mount point MUST start with "/var/lib/quobyte/devices/data..." and the last
# part MUST match the disk name. E.g. if the name is "data5" the mountpoint
# must be "/var/lib/quobyte/devices/data5".
# The minimum capacity of a disk must be 100Gi, recommended size depends on the
# cloud environment, e.g. 840Gi for Google Persistent SSDs.
datadisks:
- name: data0
mountpoint: /var/lib/quobyte/devices/data0
size: "840Gi"
- name: data1
mountpoint: /var/lib/quobyte/devices/data1
size: "840Gi"
# Metadata disks attached to each Quobyte metadata service, minimum is one
# metadata disk. Similar to datadisks, names MUST start with "metadata".
# Minimum capacity is 100Gi, recommended size depends on the cloud environment.
# Please make sure to use SSDs or media with similar peformance characteristics.
metadatadisks:
- name: metadata0
mountpoint: /var/lib/quobyte/devices/metadata0
size: "100Gi"
# Set enabled to start the Quobyte S3 service. Requires a properly
# configured domain name.
# As S3 is an HTTP-based protocol, it requires a correct DNS hostname setup.
# Generally the S3 service will be available under a specific hostname such as s3.example.com.
# Buckets can be addressed as a subdomain of the host e.g., <bucket name>.s3.example.com.
#
# HTTP requires a setup of both the S3 hostname and a wildcard hostname for subdomains in your DNS
# infrastructure which points to the machine or machines running the S3 Proxy.
# So at a minimum, there are two CNAME records that point to a machine running the S3 proxy
s3:
enabled: false
dnsname: s3.example.com
webconsoleport: 8080
image: quay.io/quobyte/quobyte-server:3
# Maximum number of open file descriptors per container,
# must be set to 999,999 or more.
maxopenfiles: "1048576"
# Maximum number of processes, must be set to 16,000 or more.
maxprocs: "16384"

View File

@ -5254,6 +5254,30 @@ entries:
urls:
- assets/portworx/portworx-essentials-2.9.100.tgz
version: 2.9.100
quobyte-cluster:
- annotations:
catalog.cattle.io/certified: partner
catalog.cattle.io/display-name: Quobyte Cluster Deployment
catalog.cattle.io/kube-version: 1.20-0 - 1.24-0
catalog.cattle.io/release-name: quobyte-cluster
apiVersion: v2
appVersion: "3"
created: "2022-10-20T22:43:10.454029-04:00"
description: Quobyte Cluster Helm Chart Deployment
digest: 8bdba16d91129ae9cba6fa3c6540d2cabb179ebc1764f6231e5f9fedd79f41bc
home: https://www.quobyte.com
icon: https://quobyte.github.io/quobyte-k8s-resources/images/quobyte.png
keywords:
- quobyte
- storage
kubeVersion: 1.20-0 - 1.24-0
name: quobyte-cluster
sources:
- https://github.com/quobyte/quobyte-k8s-resources
type: application
urls:
- assets/quobyte/quobyte-cluster-0.1.5.tgz
version: 0.1.5
redpanda:
- annotations:
artifacthub.io/images: |

View File

@ -0,0 +1,26 @@
# Quobyte Storage Cluster
This Helm Chart will install a Quobyte storage cluster:
https://www.quobyte.com
Quobyte is a software defined, distributed storage system.
It allows parallel access from thousands of clients.
From a Kubernetes point of view it supports dynamic volume
provisioning with
* Multi Tenancy
* Encryption at Rest
* ReadWriteMany
To read about the full feature set have a look at the Quobyte documentation:
https://docs.quobyte.com/
or the more generic product overview:
https://www.quobyte.com/product/
For a detailed description of possbile configuration options comments and defaults in
values.yaml.

View File

@ -0,0 +1,24 @@
questions:
- variable: quobyte.storageProvisioner
default: kubernetes.io/gce-pd
required: true
type: string
label: Storage Provisioner
description: >
The provisioner Quobyte uses to provision storage devices.
For example "kubernetes.io/gce-pd" on Google GKE, "kubernetes.io/aws-ebs" on AWS.
- variable: quobyte.flashStorage
default: pd-ssd
required: true
type: string
label: Storage Class
description: >
The cloud provider storage class Quobyte uses when provisioning fast storage devices.
For example "pd-ssd" on Google GKE, "gp2" on AWS.
- variable: quobyte.replicas
default: 3
required: false
label: Service Replicas
description: >
The number of service replicas for each Quobyte service (registry, metadata, data).
Must not be greater than number of available nodes.

View File

@ -0,0 +1,4 @@
HelmRepo: https://quobyte.github.io/quobyte-k8s-resources/helm-charts
HelmChart: quobyte-cluster
Vendor: Quobyte
DisplayName: Quobyte