Deploy To OpenShift ¶
Support disclaimer
Helm is a Kubernetes package manager that orchestrates the provisioning of applications onto existing Kubernetes infrastructure. The requirements for this infrastructure are described in Prerequisites. The Kubernetes cluster remains your responsibility; we do not provide direct support for Kubernetes or the underlying hardware it runs on.
If you have followed our documentation on how to configure Helm charts, and you're correctly-created components, we will provide support if you encounter an error with installation after running the helm install
command.
Read more about what we support and what we don’t.
Official OpenShift support
Starting from version 1.18, Atlassian Data Center Helm charts officially include support for OpenShift.
Deploy with a restricted and nonroot security context constraint ¶
Atlassian Data Center Helm charts are vendor and cloud agnostic, and create objects from standard APIs that OpenShift fully supports.
However, the default OpenShift restricted Security Context Constrain (SCC) requires pods to be run with a UID and a SELinux context that are allocated to the namespace. It's therefore not possible to deploy DC Helm charts with the default settings (with pre-defined securityContext
and containers that run as root). See FAQs for typical errors.
ATL_TOMCAT_* environment variables
When running as restricted or nonroot SCC, some of ATL_TOMCAT_*
environment variables passed to the Helm chart in additionalEnvironmentVariables
will be ignored, because server.xml
and seraph-config.xml
are mounted as a ConfigMaps rather than generated in the container entrypoint from Jinja templates. Both <product>.tomcatConfig
and <product>.seraphConfig
have a number of properties which you can override if necessary. Look at tomcatConfig
stanza in the chart's values.yaml for more details.
Restricted SCC
Restricted SCC denies access to all host features and requires pods to be run with a UID and a SELinux context that are allocated to the namespace.
Running containers in OpenShift with a restricted SCC is the most secure approach. To be able to successfully deploy Atlassian DC Helm charts with a restricted SCC, set openshift.runWithRestrictedSCC
to true in the Helm values file:
openshift:
runWithRestrictedSCC: true
This property will:
- unset
securityContext
on the pod andinitContainers
level, letting OpenShift set it - trigger the creation of a ConfigMap with
server.xml
andseraph-config.xml
that are mounted as read-only files into containers (rather than generated in the container entrypoint). Bothserver.xml
andseraph-config.xml
can be configured in<product>.tomcatConfig
Helm stanza (except for Bitbucket which does not have these configuration files) - disable the nfs-permission fixer init container that is run as root by default. If you need to change permissions in an existing shared-home volume, do it when provisioning/migrating the volume. See FAQs for more details.
Nonroot SCC
Nonroot SCC provides all features of the restricted SCC but allows users to run with any non-root UID.
Supported versions
OpenShift nonroot SCC friendly values are available in versions 1.14.0+
for Jira and Confluence, and 1.18+
for Crowd and Bamboo. If you can't upgrade, consider using 'additionalFiles' to mount server.xml
and seraph-config.xml
as ConfigMaps, which should be created outside the Helm chart.
To be able to run DC containers as users created during an image build you need to let the ServiceAccount use the nonroot SCC. Typically, cluster admin privileges are required (replace namespace and Helm release name):
oc adm policy add-scc-to-user nonroot \
system:serviceaccount:<namespace>:<helm-release-name>
Use the following Helm values (replace jira
and UIDs
depending on the deployed product):
jira:
securityContext:
runAsUser: 2001
runAsGroup: 2001
fsGroup: 2001
tomcatConfig:
generateByHelm: true
seraphConfig:
generateByHelm: true
volumes:
sharedHome:
nfsPermissionFixer:
enabled: false
If you enabled monitoring.exposeJmxMetrics
, you need to run the init container as non root:
monitoring:
jmxExporterInitContainer:
runAsRoot: false
OpenShift Routes ¶
To create OpenShift Routes use the following Helm values:
ingress:
create: true
openShiftRoute: true
host: your.hostname.com
path: /yourpath # optional
Additional Route configuration include annotations
and routeHttpHeaders
:
ingress:
annotations: {}
routeHttpHeaders: {}
maxBodySize
, proxyConnectTimeout
, proxyReadTimeout
, proxySendTimeout
, nginx
, and className
are ignored when ingress.openShiftRoute
is set to true. See FAQs for additional information on how to configure OpenShift routes.