mirror of
https://github.com/helm/charts.git
synced 2026-08-23 22:37:45 +00:00
Adding JFrog Distribution (#5631)
* added JFrog Distribution * Fixed version * removed extra empty line * using secret for connection string * removed unused condition * chart.name from template * removed resource value and added new apiVersion * removed extra spaces * removed default token * fullnameOverride for distribution * removed unused condition. * Changing default external port to 80 * removed post install hook. * removed hardcoded password and made it required * added token for testing * removed non overriding values
This commit is contained in:
committed by
k8s-ci-robot
parent
9f6323dd90
commit
145a8d6690
@@ -0,0 +1,21 @@
|
||||
# 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
|
||||
@@ -0,0 +1,18 @@
|
||||
apiVersion: v1
|
||||
description: A Helm chart for JFrog Distribution
|
||||
home: https://jfrog.com/platform/
|
||||
icon: https://raw.githubusercontent.com/JFrogDev/artifactory-dcos/master/images/jfrog_med.png
|
||||
keywords:
|
||||
- distribution
|
||||
- jfrog
|
||||
maintainers:
|
||||
- email: jainishs@jfrog.com
|
||||
name: jainishshah17
|
||||
- email: eldada@jfrog.com
|
||||
name: eldada
|
||||
name: distribution
|
||||
sources:
|
||||
- https://bintray.com/jfrog/product/distribution/view
|
||||
- https://github.com/JFrogDev
|
||||
version: 0.3.0
|
||||
appVersion: 1.0.0
|
||||
@@ -0,0 +1,99 @@
|
||||
# JFrog Distribution Helm Chart
|
||||
|
||||
## Prerequisites Details
|
||||
|
||||
* Kubernetes 1.8+
|
||||
|
||||
## Chart Details
|
||||
This chart will do the following:
|
||||
|
||||
* Deploy Mongodb database.
|
||||
* Deploy a Redis.
|
||||
* Deploy a distributor.
|
||||
* Deploy a distribution.
|
||||
|
||||
## Requirements
|
||||
- A running Kubernetes cluster
|
||||
- Dynamic storage provisioning enabled
|
||||
- Default StorageClass set to allow services using the default StorageClass for persistent storage
|
||||
- A running Artifactory Enterprise Plus
|
||||
- [Kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) installed and setup to use the cluster
|
||||
- [Helm](https://helm.sh/) installed and setup to use the cluster (helm init)
|
||||
|
||||
## Installing the Chart
|
||||
To install the chart with the release name `distribution`:
|
||||
```
|
||||
helm install --name distribution incubator/distribution
|
||||
```
|
||||
|
||||
### Accessing Distribution
|
||||
**NOTE:** It might take a few minutes for Distribution's public IP to become available, and the nodes to complete initial setup.
|
||||
Follow the instructions outputted by the install command to get the Distribution IP and URL to access it.
|
||||
|
||||
### Updating Distribution
|
||||
Once you have a new chart version, you can update your deployment with
|
||||
```
|
||||
helm upgrade distribution incubator/distribution
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
The following table lists the configurable parameters of the distribution chart and their default values.
|
||||
|
||||
| Parameter | Description | Default |
|
||||
|----------------------------------------------|--------------------------------------------|------------------------------------|
|
||||
| `imagePullSecrets` | Docker registry pull secret | |
|
||||
| `mongodb.enabled` | Enable Mongodb | `true` |
|
||||
| `mongodb.image.tag` | Mongodb docker image tag | `3.6.3` |
|
||||
| `mongodb.image.pullPolicy` | Mongodb Container pull policy | `IfNotPresent` |
|
||||
| `mongodb.persistence.enabled` | Mongodb persistence volume enabled | `true` |
|
||||
| `mongodb.persistence.existingClaim` | Use an existing PVC to persist data | `nil` |
|
||||
| `mongodb.persistence.storageClass` | Storage class of backing PVC | `generic` |
|
||||
| `mongodb.persistence.size` | Mongodb persistence volume size | `10Gi` |
|
||||
| `mongodb.livenessProbe.initialDelaySeconds` | Mongodb delay before liveness probe is initiated | `40` |
|
||||
| `mongodb.readinessProbe.initialDelaySeconds` | Mongodb delay before readiness probe is initiated | `30` |
|
||||
| `mongodb.mongodbExtraFlags` | MongoDB additional command line flags | `["--wiredTigerCacheSizeGB=1"]` |
|
||||
| `mongodb.usePassword` | Enable password authentication | `false` |
|
||||
| `mongodb.mongodbDatabase` | Mongodb Database for distribution | `bintray` |
|
||||
| `mongodb.mongodbRootPassword` | Mongodb Database Password for root user | ` ` |
|
||||
| `mongodb.mongodbUsername` | Mongodb Database Mission Control User | `distribution` |
|
||||
| `mongodb.mongodbPassword` | Mongodb Database Password for Mission Control user | ` ` |
|
||||
| `redis.enabled` | Enable Redis | `true` |
|
||||
| `redis.redisPassword` | Redis password | ` ` |
|
||||
| `redis.master.port` | Redis Port | `6379` |
|
||||
| `redis.persistence.enabled` | Use a PVC to persist data | `true` |
|
||||
| `redis.persistence.existingClaim` | Use an existing PVC to persist data | `nil` |
|
||||
| `redis.persistence.storageClass` | Storage class of backing PVC | `generic` |
|
||||
| `redis.persistence.size` | Size of data volume | `10Gi` |
|
||||
| `distribution.name` | Distribution name | `distribution` |
|
||||
| `distribution.image.pullPolicy` | Container pull policy | `IfNotPresent` |
|
||||
| `distribution.image.repository` | Container image | `docker.jfrog.io/jf-distribution` |
|
||||
| `distribution.image.version` | Container image tag | `1.0.0` |
|
||||
| `distribution.service.type` | Distribution service type | `LoadBalancer` |
|
||||
| `distribution.externalPort` | Distribution service external port | `80` |
|
||||
| `distribution.internalPort` | Distribution service internal port | `8080` |
|
||||
| `distribution.env.artifactoryUrl` | Distribution Environment Artifactory URL | ` ` |
|
||||
| `distribution.persistence.mountPath` | Distribution persistence volume mount path | `"/jf-distribution"` |
|
||||
| `distribution.persistence.enabled` | Distribution persistence volume enabled | `true` |
|
||||
| `distribution.persistence.storageClass` | Storage class of backing PVC | `nil` |
|
||||
| `distribution.persistence.existingClaim` | Provide an existing PersistentVolumeClaim | `nil` |
|
||||
| `distribution.persistence.accessMode` | Distribution persistence volume access mode| `ReadWriteOnce` |
|
||||
| `distribution.persistence.size` | Distribution persistence volume size | `50Gi` |
|
||||
| `distributor.name` | Distribution name | `distribution` |
|
||||
| `distributor.image.pullPolicy` | Container pull policy | `IfNotPresent` |
|
||||
| `distributor.image.repository` | Container image | `docker.jfrog.io/jf-distribution` |
|
||||
| `distributor.image.version` | Container image tag | `1.0.0` |
|
||||
| `distributor.token` | Distributor token | ` ` |
|
||||
| `distributor.persistence.mountPath` | Distributor persistence volume mount path | `"/bt-distributor"` |
|
||||
| `distributor.persistence.existingClaim` | Provide an existing PersistentVolumeClaim | `nil` |
|
||||
| `distributor.persistence.storageClass` | Storage class of backing PVC | `nil (uses alpha storage class annotation)` |
|
||||
| `distributor.persistence.enabled` | Distributor persistence volume enabled | `true` |
|
||||
| `distributor.persistence.accessMode` | Distributor persistence volume access mode | `ReadWriteOnce` |
|
||||
| `distributor.persistence.size` | Distributor persistence volume size | `50Gi` |
|
||||
|
||||
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`.
|
||||
|
||||
## Useful links
|
||||
- https://www.jfrog.com/confluence/display/EP/Getting+Started
|
||||
- https://www.jfrog.com/confluence/display/DIST/Installing+Distribution
|
||||
- https://www.jfrog.com/confluence/
|
||||
@@ -0,0 +1,12 @@
|
||||
# CI values for Distribution
|
||||
|
||||
|
||||
mongodb:
|
||||
mongodbRootPassword: password
|
||||
mongodbPassword: password
|
||||
|
||||
redis:
|
||||
redisPassword: "password"
|
||||
|
||||
distributor:
|
||||
token: "eyJ2ZXIiOiIyIiwidHlwIjoiSldUIiwiYWxnIjoiUlMyNTYiLCJraWQiOiJ6WWFWQjVFRlpkOXlpbWtCNkZTbDAtSWFhMHRPWldLX293c1BTVTNTZmdNIn0.eyJzdWIiOiJJTlRFUk5BTCIsInNjcCI6ImFwcGxpZWQtcGVybWlzc2lvbnNcL3N5c3RlbSIsImF1ZCI6ImpmZHNAMDFjN3pxd2FnOWNmNTAwd2FnOXZhcTF3cjkiLCJpc3MiOiJqZmRzQDAxYzd6cXdhZzljZjUwMHdhZzl2YXExd3I5IiwiZXhwIjoyNDY3NjI1MDczLCJpYXQiOjE1MjE1NDUwNzMsImp0aSI6IjE0ZjJjN2IxLTMzYzQtNDA0Yy04YTllLTJmZjU2OGFjODRlOSJ9.ACfT3pfu4wTTt1wOkyqwYCp9UUVWNwMLl3ZyuO-igDR9N_G-G3oMkuCFekAzgOrTcbGjrXTDMNwoRyYhHUs4wtYxM9yAA-u72EhVz10stL9B0d2JUOamc8xJaLvQDhL38TYiTjdgNVsy726qgxzX2xnx1M8VSp9Qnw7r2ZGBQ6LjrESIUZb8IXy-93oxYqDSkWvjOJZiNQXhJBgOzhzq3r-buaGgxOMoC7DduCctCT0FIxd1jrsZPUnpH3YGE374j7YGcGBdy7eQj-skM3YircJVgk6XFYJBKZBJ8pX3NLZznirG2m9QbhLCRhH1T6B4g-HZvy251wz3QBUdmzO6Cg"
|
||||
@@ -0,0 +1,9 @@
|
||||
dependencies:
|
||||
- name: mongodb
|
||||
repository: https://kubernetes-charts.storage.googleapis.com/
|
||||
version: 2.0.5
|
||||
- name: redis
|
||||
repository: https://kubernetes-charts.storage.googleapis.com/
|
||||
version: 1.1.21
|
||||
digest: sha256:beb9912728c7d372ddc2ba5b5c4dcee718bd78f65219c1d6831377aad227d471
|
||||
generated: 2018-05-11T08:38:33.357628483-07:00
|
||||
@@ -0,0 +1,9 @@
|
||||
dependencies:
|
||||
- name: mongodb
|
||||
version: 2.0.5
|
||||
repository: https://kubernetes-charts.storage.googleapis.com/
|
||||
condition: mongodb.enabled
|
||||
- name: redis
|
||||
version: 1.1.21
|
||||
repository: https://kubernetes-charts.storage.googleapis.com/
|
||||
condition: redis.enabled
|
||||
@@ -0,0 +1,27 @@
|
||||
Congratulations. You have just deployed JFrog Distribution!
|
||||
|
||||
1. Get the Distribution URL by running these commands:
|
||||
|
||||
{{- if contains "NodePort" .Values.distribution.service.type }}
|
||||
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "distribution.fullname" . }})
|
||||
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||
echo http://$NODE_IP:$NODE_PORT/
|
||||
|
||||
{{- else if contains "LoadBalancer" .Values.distribution.service.type }}
|
||||
|
||||
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
|
||||
You can watch the status of the service by running 'kubectl get svc -w {{ template "distribution.fullname" . }}'
|
||||
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "distribution.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
|
||||
echo http://$SERVICE_IP:{{ .Values.distribution.externalPort }}/
|
||||
|
||||
{{- else if contains "ClusterIP" .Values.distribution.service.type }}
|
||||
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "component={{ .Values.distribution.name }}" -o jsonpath="{.items[0].metadata.name}")
|
||||
echo http://127.0.0.1:{{ .Values.distribution.externalPort }}
|
||||
kubectl port-forward --namespace {{ .Release.Namespace }} $POD_NAME {{ .Values.distribution.externalPort }}:{{ .Values.distribution.internalPort }}
|
||||
|
||||
{{- end }}
|
||||
|
||||
2. Open Distribution in your browser
|
||||
Default credential for Distribution:
|
||||
user: admin
|
||||
password: password
|
||||
@@ -0,0 +1,87 @@
|
||||
{{/* vim: set filetype=mustache: */}}
|
||||
|
||||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "distribution.name" -}}
|
||||
{{- default .Chart.Name .Values.distribution.name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
The distributor name
|
||||
*/}}
|
||||
{{- define "distributor.name" -}}
|
||||
{{- default .Chart.Name .Values.distributor.name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create a default fully qualified distribution name.
|
||||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||
If release name contains chart name it will be used as a full name.
|
||||
*/}}
|
||||
{{- define "distribution.fullname" -}}
|
||||
{{- if .Values.distribution.fullnameOverride -}}
|
||||
{{- .Values.distribution.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- else -}}
|
||||
{{- $name := default .Chart.Name .Values.distribution.name -}}
|
||||
{{- if contains $name .Release.Name -}}
|
||||
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- else -}}
|
||||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
|
||||
{{/*
|
||||
Create a default fully qualified distributor name.
|
||||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||
If release name contains chart name it will be used as a full name.
|
||||
*/}}
|
||||
{{- define "distributor.fullname" -}}
|
||||
{{- if .Values.distributor.fullnameOverride -}}
|
||||
{{- .Values.distributor.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- else -}}
|
||||
{{- $name := default .Chart.Name .Values.distributor.name -}}
|
||||
{{- if contains $name .Release.Name -}}
|
||||
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- else -}}
|
||||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Set the final MongoDB connection URL
|
||||
*/}}
|
||||
{{- define "mongodb.url" -}}
|
||||
{{- $mongoDatabase := .Values.mongodb.mongodbDatabase -}}
|
||||
{{- $mongoUser := .Values.mongodb.mongodbUsername -}}
|
||||
{{- $mongoPassword := required "A valid .Values.mongodb.mongodbPassword entry required!" .Values.mongodb.mongodbPassword -}}
|
||||
{{- printf "%s://%s:%s@%s-%s/%s" "mongodb" $mongoUser $mongoPassword .Release.Name "mongodb:27017" $mongoDatabase | b64enc | quote -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Set the final MongoDB audit URL
|
||||
*/}}
|
||||
{{- define "mongodb.audit.url" -}}
|
||||
{{- $mongoUser := .Values.mongodb.mongodbUsername -}}
|
||||
{{- $mongoPassword := required "A valid .Values.mongodb.mongodbPassword entry required!" .Values.mongodb.mongodbPassword -}}
|
||||
{{- printf "%s://%s:%s@%s-%s/%s" "mongodb" $mongoUser $mongoPassword .Release.Name "mongodb:27017" "audit?maxpoolsize=500" | b64enc | quote -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Set the final Redis connection URL
|
||||
*/}}
|
||||
{{- define "redis.url" -}}
|
||||
{{- $redisPassword := required "A valid .Values.redis.redisPassword entry required!" .Values.redis.redisPassword -}}
|
||||
{{- $redisPort := .Values.redis.master.port -}}
|
||||
{{- printf "%s://:%s@%s-%s:%g" "redis" $redisPassword .Release.Name "redis" $redisPort | b64enc | quote -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create chart name and version as used by the chart label.
|
||||
*/}}
|
||||
{{- define "distribution.chart" -}}
|
||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,116 @@
|
||||
apiVersion: apps/v1beta2
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ template "distribution.fullname" . }}
|
||||
labels:
|
||||
app: {{ template "distribution.name" . }}
|
||||
chart: {{ template "distribution.chart" . }}
|
||||
component: {{ .Values.distribution.name }}
|
||||
heritage: {{ .Release.Service }}
|
||||
release: {{ .Release.Name }}
|
||||
spec:
|
||||
replicas: {{ .Values.distribution.replicaCount }}
|
||||
selector:
|
||||
matchLabels:
|
||||
app: {{ template "distribution.name" . }}
|
||||
release: {{ .Release.Name }}
|
||||
component: {{ .Values.distribution.name }}
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: {{ template "distribution.name" . }}
|
||||
component: {{ .Values.distribution.name }}
|
||||
release: {{ .Release.Name }}
|
||||
spec:
|
||||
{{- if .Values.imagePullSecrets }}
|
||||
imagePullSecrets:
|
||||
- name: {{ .Values.imagePullSecrets }}
|
||||
{{- end }}
|
||||
initContainers:
|
||||
- name: "init-data"
|
||||
image: "{{ .Values.initContainerImage }}"
|
||||
command:
|
||||
- '/bin/sh'
|
||||
- '-c'
|
||||
- >
|
||||
until nc -z -w 2 {{ .Release.Name }}-mongodb 27017 && echo {{ .Release.Name }}-mongodb ok; do sleep 2; done;
|
||||
until nc -z -w 2 {{ .Release.Name }}-redis {{ .Values.redis.master.port }} && echo {{ .Release.Name }}-redis ok; do sleep 2; done;
|
||||
containers:
|
||||
- name: {{ .Values.distribution.name }}
|
||||
image: '{{ .Values.distribution.image.repository }}:{{ .Values.distribution.image.version }}'
|
||||
imagePullPolicy: {{ .Values.distribution.image.imagePullPolicy }}
|
||||
ports:
|
||||
- containerPort: {{ .Values.distribution.internalPort }}
|
||||
protocol: TCP
|
||||
env:
|
||||
- name: DEFAULT_JAVA_OPTS
|
||||
value: '-Ddistribution.home={{ .Values.distribution.persistence.mountPath }} -Dcom.sun.management.jmxremote.authenticate=false
|
||||
-Dcom.sun.management.jmxremote.ssl=false -Duser.timezone=UTC
|
||||
{{- if .Values.distribution.javaOpts.xms }}
|
||||
-Xms{{ .Values.distribution.javaOpts.xms }}
|
||||
{{- end}}
|
||||
{{- if .Values.distribution.javaOpts.xmx }}
|
||||
-Xmx{{ .Values.distribution.javaOpts.xmx }}
|
||||
{{- end}}
|
||||
-Dspring.profiles.active=production'
|
||||
- name: mongo_connectionString
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: {{ template "distribution.fullname" . }}-mongo-connection
|
||||
key: mongo_connectionString
|
||||
- name: audit_mongo_connectionString
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: {{ template "distribution.fullname" . }}-mongo-connection
|
||||
key: audit_mongo_connectionString
|
||||
- name: redis_connectionString
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: {{ template "distribution.fullname" . }}-redis-connection
|
||||
key: redis_connectionString
|
||||
- name: BT_ARTIFACTORY_URL
|
||||
value: {{ .Values.distribution.env.artifactoryUrl | quote }}
|
||||
- name: BT_SERVER_URL
|
||||
value: {{ .Values.distribution.env.btServerUrl | quote }}
|
||||
{{- if .Values.distribution.env.artifactoryEdge1Url }}
|
||||
- name: artifactory_edge_1_url
|
||||
value: {{ .Values.distribution.env.artifactoryEdge1Url }}
|
||||
{{- end }}
|
||||
{{- if .Values.distribution.env.artifactoryEdge2Url }}
|
||||
- name: artifactory_edge_2_url
|
||||
value: {{ .Values.distribution.env.artifactoryEdge2Url }}
|
||||
{{- end }}
|
||||
{{- if .Values.distribution.env.artifactoryEdge3Url }}
|
||||
- name: artifactory_edge_3_url
|
||||
value: {{ .Values.distribution.env.artifactoryEdge3Url }}
|
||||
{{- end }}
|
||||
{{- if .Values.distribution.env.artifactoryCi1Url }}
|
||||
- name: artifactory_ci_1_url
|
||||
value: {{ .Values.distribution.env.artifactoryCi1Url }}
|
||||
{{- end }}
|
||||
volumeMounts:
|
||||
- name: distribution-data
|
||||
mountPath: {{ .Values.distribution.persistence.mountPath | quote }}
|
||||
resources:
|
||||
{{ toYaml .Values.distribution.resources | indent 10 }}
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /api/v1/system/ping
|
||||
port: 8080
|
||||
initialDelaySeconds: 60
|
||||
periodSeconds: 10
|
||||
failureThreshold: 10
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /api/v1/system/ping
|
||||
port: 8080
|
||||
initialDelaySeconds: 180
|
||||
periodSeconds: 10
|
||||
volumes:
|
||||
- name: distribution-data
|
||||
{{- if .Values.distribution.persistence.enabled }}
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ if .Values.distribution.persistence.existingClaim }}{{ .Values.distribution.persistence.existingClaim }}{{- else }}{{ template "distribution.fullname" . }}{{- end }}
|
||||
{{- else }}
|
||||
emptyDir: {}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,24 @@
|
||||
{{- if and .Values.distribution.persistence.enabled (not .Values.distribution.persistence.existingClaim) }}
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: {{ template "distribution.fullname" . }}
|
||||
labels:
|
||||
app: {{ template "distribution.name" . }}
|
||||
chart: {{ template "distribution.chart" . }}
|
||||
release: "{{ .Release.Name }}"
|
||||
heritage: "{{ .Release.Service }}"
|
||||
spec:
|
||||
accessModes:
|
||||
- {{ .Values.distribution.persistence.accessMode | quote }}
|
||||
resources:
|
||||
requests:
|
||||
storage: {{ .Values.distribution.persistence.size }}
|
||||
{{- if .Values.distribution.persistence.storageClass }}
|
||||
{{- if (eq "-" .Values.distribution.persistence.storageClass) }}
|
||||
storageClassName: ""
|
||||
{{- else }}
|
||||
storageClassName: "{{ .Values.distribution.persistence.storageClass }}"
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,24 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ template "distribution.fullname" . }}
|
||||
labels:
|
||||
app: {{ template "distribution.name" . }}
|
||||
chart: {{ template "distribution.chart" . }}
|
||||
component: "{{ .Values.distribution.name }}"
|
||||
heritage: {{ .Release.Service }}
|
||||
release: {{ .Release.Name }}
|
||||
{{- if .Values.distribution.service.annotations }}
|
||||
annotations:
|
||||
{{ toYaml .Values.distribution.service.annotations | indent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
type: {{ .Values.distribution.service.type }}
|
||||
ports:
|
||||
- port: {{ .Values.distribution.externalPort }}
|
||||
protocol: TCP
|
||||
targetPort: {{ .Values.distribution.internalPort }}
|
||||
selector:
|
||||
app: {{ template "distribution.name" . }}
|
||||
component: "{{ .Values.distribution.name }}"
|
||||
release: {{ .Release.Name }}
|
||||
@@ -0,0 +1,91 @@
|
||||
apiVersion: apps/v1beta2
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ template "distributor.fullname" . }}
|
||||
labels:
|
||||
app: {{ template "distribution.name" . }}
|
||||
chart: {{ template "distribution.chart" . }}
|
||||
component: {{ .Values.distributor.name }}
|
||||
heritage: {{ .Release.Service }}
|
||||
release: {{ .Release.Name }}
|
||||
spec:
|
||||
replicas: {{ .Values.distributor.replicaCount }}
|
||||
selector:
|
||||
matchLabels:
|
||||
app: {{ template "distribution.name" . }}
|
||||
release: {{ .Release.Name }}
|
||||
component: {{ .Values.distributor.name }}
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: {{ template "distribution.name" . }}
|
||||
component: {{ .Values.distributor.name }}
|
||||
release: {{ .Release.Name }}
|
||||
spec:
|
||||
{{- if .Values.imagePullSecrets }}
|
||||
imagePullSecrets:
|
||||
- name: {{ .Values.imagePullSecrets }}
|
||||
{{- end }}
|
||||
initContainers:
|
||||
- name: "prepare-data"
|
||||
image: "{{ .Values.initContainerImage }}"
|
||||
imagePullPolicy: {{ .Values.distributor.image.pullPolicy }}
|
||||
command:
|
||||
- '/bin/sh'
|
||||
- '-c'
|
||||
- >
|
||||
until nc -z -w 2 {{ .Release.Name }}-redis {{ .Values.redis.master.port }} && echo {{ .Release.Name }}-redis ok; do sleep 2; done;
|
||||
{{- if .Values.distributor.token }}
|
||||
mkdir -pv {{ .Values.distributor.persistence.mountPath }}/etc/security;
|
||||
cp -fv /tmp/security/token {{ .Values.distributor.persistence.mountPath }}/etc/security/token;
|
||||
chmod 400 {{ .Values.distributor.persistence.mountPath }}/etc/security/token;
|
||||
{{- end }}
|
||||
chown -R 1020:1020 {{ .Values.distributor.persistence.mountPath }}
|
||||
volumeMounts:
|
||||
- name: distributor-data
|
||||
mountPath: {{ .Values.distributor.persistence.mountPath | quote }}
|
||||
{{- if .Values.distributor.token }}
|
||||
- name: distributor-token
|
||||
mountPath: "/tmp/security/token"
|
||||
subPath: token
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: {{ .Values.distributor.name }}
|
||||
image: '{{ .Values.distributor.image.repository }}:{{ .Values.distributor.image.version }}'
|
||||
imagePullPolicy: {{ .Values.distributor.image.imagePullPolicy }}
|
||||
env:
|
||||
- name: DEFAULT_JAVA_OPTS
|
||||
value: '-Ddistribution.home={{ .Values.distributor.persistence.mountPath }} -Dfile.encoding=UTF8 -Dcom.sun.management.jmxremote.authenticate=false
|
||||
-Dcom.sun.management.jmxremote.ssl=false -Duser.timezone=UTC
|
||||
{{- if .Values.distributor.javaOpts.xms }}
|
||||
-Xms{{ .Values.distributor.javaOpts.xms }}
|
||||
{{- end}}
|
||||
{{- if .Values.distributor.javaOpts.xmx }}
|
||||
-Xmx{{ .Values.distributor.javaOpts.xmx }}
|
||||
{{- end}}
|
||||
-Dspring.profiles.active=production'
|
||||
- name: redis_connectionString
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: {{ template "distribution.fullname" . }}-redis-connection
|
||||
key: redis_connectionString
|
||||
- name: BT_SERVER_URL
|
||||
value: 'http://{{ include "distribution.fullname" . }}:{{ .Values.distribution.internalPort }}'
|
||||
volumeMounts:
|
||||
- name: distributor-data
|
||||
mountPath: {{ .Values.distributor.persistence.mountPath | quote }}
|
||||
resources:
|
||||
{{ toYaml .Values.distributor.resources | indent 10 }}
|
||||
volumes:
|
||||
{{- if .Values.distributor.token }}
|
||||
- name: distributor-token
|
||||
configMap:
|
||||
name: {{ template "distributor.fullname" . }}-token
|
||||
{{- end }}
|
||||
- name: distributor-data
|
||||
{{- if .Values.distributor.persistence.enabled }}
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ if .Values.distributor.persistence.existingClaim }}{{ .Values.distributor.persistence.existingClaim }}{{- else }}{{ template "distributor.fullname" . }}{{- end }}
|
||||
{{- else }}
|
||||
emptyDir: {}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,24 @@
|
||||
{{- if and .Values.distributor.persistence.enabled (not .Values.distributor.persistence.existingClaim) }}
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: {{ template "distributor.fullname" . }}
|
||||
labels:
|
||||
app: {{ template "distribution.name" . }}
|
||||
chart: {{ template "distribution.chart" . }}
|
||||
release: "{{ .Release.Name }}"
|
||||
heritage: "{{ .Release.Service }}"
|
||||
spec:
|
||||
accessModes:
|
||||
- {{ .Values.distributor.persistence.accessMode | quote }}
|
||||
resources:
|
||||
requests:
|
||||
storage: {{ .Values.distributor.persistence.size }}
|
||||
{{- if .Values.distributor.persistence.storageClass }}
|
||||
{{- if (eq "-" .Values.distributor.persistence.storageClass) }}
|
||||
storageClassName: ""
|
||||
{{- else }}
|
||||
storageClassName: "{{ .Values.distributor.persistence.storageClass }}"
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,14 @@
|
||||
{{- if .Values.distributor.token }}
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ template "distributor.fullname" . }}-token
|
||||
labels:
|
||||
app: {{ template "distribution.name" . }}
|
||||
chart: {{ template "distribution.chart" . }}
|
||||
heritage: {{ .Release.Service }}
|
||||
release: {{ .Release.Name }}
|
||||
data:
|
||||
token: |
|
||||
{{ .Values.distributor.token }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,15 @@
|
||||
{{- if .Values.mongodb.enabled }}
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: {{ template "distribution.fullname" . }}-mongo-connection
|
||||
labels:
|
||||
app: {{ template "distribution.name" . }}
|
||||
chart: {{ template "distribution.chart" . }}
|
||||
release: {{ .Release.Name }}
|
||||
heritage: {{ .Release.Service }}
|
||||
type: Opaque
|
||||
data:
|
||||
mongo_connectionString: {{ template "mongodb.url" . }}
|
||||
audit_mongo_connectionString: {{ template "mongodb.audit.url" . }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,14 @@
|
||||
{{- if .Values.redis.enabled }}
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: {{ template "distribution.fullname" . }}-redis-connection
|
||||
labels:
|
||||
app: {{ template "distribution.name" . }}
|
||||
chart: {{ template "distribution.chart" . }}
|
||||
release: {{ .Release.Name }}
|
||||
heritage: {{ .Release.Service }}
|
||||
type: Opaque
|
||||
data:
|
||||
redis_connectionString: {{ template "redis.url" . }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,149 @@
|
||||
# Default values for distribution.
|
||||
# This is a YAML-formatted file.
|
||||
# Beware when changing values here. You should know what you are doing!
|
||||
# Access the values with {{ .Values.key.subkey }}
|
||||
|
||||
# Common
|
||||
initContainerImage: "alpine:3.6"
|
||||
|
||||
# For supporting pulling from private registries
|
||||
imagePullSecrets:
|
||||
|
||||
# Sub charts
|
||||
## Configuration values for the mongodb dependency
|
||||
## ref: https://github.com/kubernetes/charts/blob/master/stable/mongodb/README.md
|
||||
##
|
||||
mongodb:
|
||||
enabled: true
|
||||
image:
|
||||
tag: 3.6.3
|
||||
pullPolicy: IfNotPresent
|
||||
persistence:
|
||||
enabled: true
|
||||
size: 10Gi
|
||||
resources: {}
|
||||
# requests:
|
||||
# memory: "2Gi"
|
||||
# cpu: "100m"
|
||||
# limits:
|
||||
# memory: "2Gi"
|
||||
# cpu: "250m"
|
||||
## Make sure the --wiredTigerCacheSizeGB is no more than half the memory limit!
|
||||
## This is critical to protect against OOMKill by Kubernetes!
|
||||
mongodbExtraFlags:
|
||||
- "--wiredTigerCacheSizeGB=1"
|
||||
mongodbRootPassword:
|
||||
mongodbUsername: distribution
|
||||
mongodbPassword:
|
||||
mongodbDatabase: bintray
|
||||
livenessProbe:
|
||||
initialDelaySeconds: 40
|
||||
readinessProbe:
|
||||
initialDelaySeconds: 30
|
||||
|
||||
## Configuration values for the redis dependency
|
||||
## ref: https://github.com/kubernetes/charts/blob/master/stable/redis/README.md
|
||||
##
|
||||
redis:
|
||||
enabled: true
|
||||
redisPassword:
|
||||
persistence:
|
||||
enabled: true
|
||||
size: 10Gi
|
||||
master:
|
||||
port: 6379
|
||||
resources: {}
|
||||
# requests:
|
||||
# memory: "1Gi"
|
||||
# cpu: "100m"
|
||||
# limits:
|
||||
# memory: "2Gi"
|
||||
# cpu: "250m"
|
||||
|
||||
distribution:
|
||||
replicaCount: 1
|
||||
name: distribution
|
||||
image:
|
||||
repository: "docker.bintray.io/jfrog/distribution-distribution"
|
||||
version: 1.0.0
|
||||
imagePullPolicy: IfNotPresent
|
||||
internalPort: 8080
|
||||
externalPort: 80
|
||||
env:
|
||||
artifactoryUrl:
|
||||
btServerUrl:
|
||||
artifactoryCi1Url:
|
||||
artifactoryEdge1Url:
|
||||
artifactoryEdge2Url:
|
||||
artifactoryEdge3Url:
|
||||
service:
|
||||
type: LoadBalancer
|
||||
resources: {}
|
||||
# requests:
|
||||
# memory: "2Gi"
|
||||
# cpu: "500m"
|
||||
# limits:
|
||||
# memory: "4Gi"
|
||||
# cpu: "2"
|
||||
## Control Java options (JAVA_OPTIONS)
|
||||
## IMPORTANT: keep javaOpts.xmx no higher than resources.limits.memory
|
||||
javaOpts:
|
||||
xms:
|
||||
xmx:
|
||||
persistence:
|
||||
enabled: true
|
||||
## A manually managed Persistent Volume and Claim
|
||||
## Requires persistence.enabled: true
|
||||
## If defined, PVC must be created manually before volume will be bound
|
||||
# existingClaim:
|
||||
|
||||
accessMode: ReadWriteOnce
|
||||
mountPath: "/var/opt/jfrog/distribution"
|
||||
size: 50Gi
|
||||
## artifactory data Persistent Volume Storage Class
|
||||
## If defined, storageClassName: <storageClass>
|
||||
## If set to "-", storageClassName: "", which disables dynamic provisioning
|
||||
## If undefined (the default) or set to null, no storageClassName spec is
|
||||
## set, choosing the default provisioner. (gp2 on AWS, standard on
|
||||
## GKE, AWS & OpenStack)
|
||||
##
|
||||
# storageClass: "-"
|
||||
|
||||
distributor:
|
||||
replicaCount: 1
|
||||
name: distributor
|
||||
image:
|
||||
repository: "docker.bintray.io/jfrog/distribution-distributor"
|
||||
version: 1.0.0
|
||||
imagePullPolicy: IfNotPresent
|
||||
token:
|
||||
resources: {}
|
||||
# requests:
|
||||
# memory: "2Gi"
|
||||
# cpu: "500m"
|
||||
# limits:
|
||||
# memory: "4Gi"
|
||||
# cpu: "2"
|
||||
## Control Java options (JAVA_OPTIONS)
|
||||
## IMPORTANT: keep javaOpts.xmx no higher than resources.limits.memory
|
||||
javaOpts:
|
||||
xms:
|
||||
xmx:
|
||||
persistence:
|
||||
enabled: true
|
||||
## A manually managed Persistent Volume and Claim
|
||||
## Requires persistence.enabled: true
|
||||
## If defined, PVC must be created manually before volume will be bound
|
||||
# existingClaim:
|
||||
|
||||
accessMode: ReadWriteOnce
|
||||
mountPath: "/var/opt/jfrog/distributor"
|
||||
size: 50Gi
|
||||
## artifactory data Persistent Volume Storage Class
|
||||
## If defined, storageClassName: <storageClass>
|
||||
## If set to "-", storageClassName: "", which disables dynamic provisioning
|
||||
## If undefined (the default) or set to null, no storageClassName spec is
|
||||
## set, choosing the default provisioner. (gp2 on AWS, standard on
|
||||
## GKE, AWS & OpenStack)
|
||||
##
|
||||
# storageClass: "-"
|
||||
Reference in New Issue
Block a user