wekan/openshift/wekan.yml
Josef Fröhle f516f12b13
Make sessinAffinity stickable to clientIP
This would help, but not fix #5120. It's now supports the running of multiple pods for scaling, without the issue that the session will not known on the backend pod.
2023-09-18 12:12:35 +02:00

354 lines
9.9 KiB
YAML

---
apiVersion: v1
kind: Template
labels:
template: wekan-mongodb-persistent-template
message: |-
The following service(s) have been created in your project: ${WEKAN_SERVICE_NAME}.
metadata:
annotations:
description: |-
This template provides a Wekan instance backed by a standalone MongoDB
server. The database is stored on persistent storage.
iconClass: pficon-trend-up
openshift.io/display-name: Wekan backed by MongoDB
openshift.io/documentation-url: https://wekan.github.io/
openshift.io/long-description: This template provides a Wekan platform
with a MongoDB database created. The database is stored on persistent storage. The
database name, username, and password are chosen via parameters when provisioning
this service.
tags: wekan,kanban,mongodb
name: wekan-mongodb-persistent
objects:
- apiVersion: v1
kind: ServiceAccount
metadata:
name: ${WEKAN_SERVICE_NAME}
labels:
app: wekan
service: ${WEKAN_SERVICE_NAME}
- apiVersion: v1
kind: Secret
metadata:
annotations:
template.openshift.io/expose-admin_password: "{.data['database-admin-password']}"
template.openshift.io/expose-database_name: "{.data['database-name']}"
template.openshift.io/expose-password: "{.data['database-password']}"
template.openshift.io/expose-username: "{.data['database-user']}"
name: "${DATABASE_SERVICE_NAME}"
labels:
app: wekan
service: ${WEKAN_SERVICE_NAME}
stringData:
database-admin-password: "${MONGODB_ADMIN_PASSWORD}"
database-name: "${MONGODB_DATABASE}"
database-password: "${MONGODB_PASSWORD}"
database-user: "${MONGODB_USER}"
- apiVersion: v1
kind: Service
metadata:
annotations:
template.openshift.io/expose-uri: http://{.spec.clusterIP}:{.spec.ports[?(.name=="wekan")].port}
name: "${WEKAN_SERVICE_NAME}"
labels:
app: wekan
service: ${WEKAN_SERVICE_NAME}
spec:
ports:
- name: wekan
nodePort: 0
port: 8080
protocol: TCP
targetPort: 8080
selector:
name: "${WEKAN_SERVICE_NAME}"
sessionAffinity: ClientIP
type: ClusterIP
- apiVersion: v1
kind: Service
metadata:
annotations:
template.openshift.io/expose-uri: mongodb://{.spec.clusterIP}:{.spec.ports[?(.name=="mongo")].port}
name: "${DATABASE_SERVICE_NAME}"
labels:
app: wekan
service: ${WEKAN_SERVICE_NAME}
spec:
ports:
- name: mongo
nodePort: 0
port: 27017
protocol: TCP
targetPort: 27017
selector:
name: "${DATABASE_SERVICE_NAME}"
sessionAffinity: None
type: ClusterIP
- apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: "${DATABASE_SERVICE_NAME}"
labels:
app: wekan
service: ${WEKAN_SERVICE_NAME}
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: "${VOLUME_CAPACITY}"
- apiVersion: image.openshift.io/v1
kind: ImageStream
metadata:
labels:
app: wekan
name: ${WEKAN_SERVICE_NAME}
spec:
tags:
- from:
kind: DockerImage
name: ${WEKAN_IMAGE}
generation: 2
name: latest
referencePolicy:
type: Source
- apiVersion: v1
kind: DeploymentConfig
metadata:
name: ${WEKAN_SERVICE_NAME}
labels:
app: wekan
service: ${WEKAN_SERVICE_NAME}
spec:
replicas: 1
selector:
app: wekan
deploymentconfig: ${WEKAN_SERVICE_NAME}
strategy:
type: Recreate
template:
metadata:
labels:
app: wekan
service: ${WEKAN_SERVICE_NAME}
deploymentconfig: ${WEKAN_SERVICE_NAME}
template: wekan
name: ${WEKAN_SERVICE_NAME}
spec:
containers:
- name: ${WEKAN_SERVICE_NAME}
image: ${WEKAN_IMAGE}
imagePullPolicy: Always
env:
- name: MONGO_URL
value: mongodb://${MONGODB_USER}:${MONGODB_PASSWORD}@${DATABASE_SERVICE_NAME}:27017/${MONGODB_DATABASE}
- name: ROOT_URL
value: https://${FQDN}/
- name: PORT
value: "8080"
ports:
- containerPort: 8080
name: ${WEKAN_SERVICE_NAME}
protocol: TCP
terminationMessagePath: /dev/termination-log
livenessProbe:
failureThreshold: 30
httpGet:
path: /
port: 8080
initialDelaySeconds: 240
timeoutSeconds: 3
readinessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 3
timeoutSeconds: 3
dnsPolicy: ClusterFirst
restartPolicy: Always
serviceAccount: ${WEKAN_SERVICE_NAME}
serviceAccountName: ${WEKAN_SERVICE_NAME}
terminationGracePeriodSeconds: 30
triggers:
- type: ConfigChange
- type: ImageChange
imageChangeParams:
automatic: true
containerNames:
- ${WEKAN_SERVICE_NAME}
from:
kind: ImageStreamTag
name: ${WEKAN_SERVICE_NAME}:latest
lastTriggeredImage: ""
- apiVersion: v1
kind: DeploymentConfig
metadata:
annotations:
template.alpha.openshift.io/wait-for-ready: 'true'
name: "${DATABASE_SERVICE_NAME}"
labels:
app: wekan
service: ${WEKAN_SERVICE_NAME}
spec:
replicas: 1
selector:
name: "${DATABASE_SERVICE_NAME}"
strategy:
type: Recreate
template:
metadata:
labels:
name: "${DATABASE_SERVICE_NAME}"
spec:
containers:
- capabilities: {}
env:
- name: MONGODB_USER
valueFrom:
secretKeyRef:
key: database-user
name: "${DATABASE_SERVICE_NAME}"
- name: MONGODB_PASSWORD
valueFrom:
secretKeyRef:
key: database-password
name: "${DATABASE_SERVICE_NAME}"
- name: MONGODB_ADMIN_PASSWORD
valueFrom:
secretKeyRef:
key: database-admin-password
name: "${DATABASE_SERVICE_NAME}"
- name: MONGODB_DATABASE
valueFrom:
secretKeyRef:
key: database-name
name: "${DATABASE_SERVICE_NAME}"
image: " "
imagePullPolicy: IfNotPresent
livenessProbe:
initialDelaySeconds: 30
tcpSocket:
port: 27017
timeoutSeconds: 1
name: mongodb
ports:
- containerPort: 27017
protocol: TCP
readinessProbe:
exec:
command:
- "/bin/sh"
- "-i"
- "-c"
- mongo 127.0.0.1:27017/$MONGODB_DATABASE -u $MONGODB_USER -p $MONGODB_PASSWORD
--eval="quit()"
initialDelaySeconds: 3
timeoutSeconds: 1
resources:
limits:
memory: "${MEMORY_LIMIT}"
securityContext:
capabilities: {}
privileged: false
terminationMessagePath: "/dev/termination-log"
volumeMounts:
- mountPath: "/var/lib/mongodb/data"
name: "${DATABASE_SERVICE_NAME}-data"
dnsPolicy: ClusterFirst
restartPolicy: Always
volumes:
- name: "${DATABASE_SERVICE_NAME}-data"
persistentVolumeClaim:
claimName: "${DATABASE_SERVICE_NAME}"
triggers:
- imageChangeParams:
automatic: true
containerNames:
- mongodb
from:
kind: ImageStreamTag
name: mongodb:${MONGODB_VERSION}
namespace: "openshift"
lastTriggeredImage: ''
type: ImageChange
- type: ConfigChange
- apiVersion: route.openshift.io/v1
kind: Route
metadata:
labels:
app: wekan
service: wekan
template: wekan-mongodb-persistent-template
name: wekan
namespace: ${NAMESPACE}
spec:
host: ${FQDN}
port:
targetPort: wekan
tls:
termination: edge
to:
kind: Service
name: wekan
weight: 100
wildcardPolicy: None
parameters:
- description: The Fully Qualified Hostname (FQDN) of the application
displayName: FQDN
name: FQDN
required: true
- description: Maximum amount of memory the container can use.
displayName: Memory Limit
name: MEMORY_LIMIT
required: true
value: 512Mi
- description: The OpenShift Namespace where the ImageStream resides.
displayName: Namespace
name: NAMESPACE
- description: The name of the OpenShift Service exposed for the database.
displayName: Database Service Name
name: DATABASE_SERVICE_NAME
required: true
value: wekan-mongodb
- description: Username for MongoDB user that will be used for accessing the database.
displayName: MongoDB Connection Username
from: user[A-Z0-9]{3}
generate: expression
name: MONGODB_USER
required: true
- description: Password for the MongoDB connection user.
displayName: MongoDB Connection Password
from: "[a-zA-Z0-9]{16}"
generate: expression
name: MONGODB_PASSWORD
required: true
- description: Name of the MongoDB database accessed.
displayName: MongoDB Database Name
name: MONGODB_DATABASE
required: true
value: wekan
- description: Password for the database admin user.
displayName: MongoDB Admin Password
from: "[a-zA-Z0-9]{16}"
generate: expression
name: MONGODB_ADMIN_PASSWORD
required: true
- description: Volume space available for data, e.g. 512Mi, 2Gi.
displayName: Volume Capacity
name: VOLUME_CAPACITY
required: true
value: 1Gi
- description: Version of MongoDB image to be used (3.6, 4.0.10).
displayName: Version of MongoDB Image
name: MONGODB_VERSION
required: true
value: '3.6'
- name: WEKAN_SERVICE_NAME
displayName: Wekan Service Name
value: wekan
required: true
- name: WEKAN_IMAGE
displayName: Wekan Docker Image
value: quay.io/wekan/wekan
description: The metabase docker image to use
required: true