Compare commits

..

53 Commits

Author SHA1 Message Date
Olu Shiyanbade
3bafb6516c Set replicas to 1 2022-12-15 16:46:02 +00:00
Olu Shiyanbade
0d832f8909 Use statefulsets for resiliency 2022-12-15 16:43:07 +00:00
Olu Shiyanbade
1207dee299 fix lint errors 2022-11-22 11:10:58 +00:00
Olu Shiyanbade
14472c593b delete local pv and pvc yamls 2022-11-22 10:46:46 +00:00
Olu Shiyanbade
85adad84ef Use dynamic provisioning and stateful sets 2022-11-22 01:25:13 +00:00
John M Flinchbaugh
c8b1ad3059 INT-7432 security context for openshift (#34)
OpenShift requires the red hat image (optional)
and these security settings to alleviate warnings.

These changes are fine for other k8s implementations
like minikube using the stock container from docker hub.
2022-11-17 11:05:22 -05:00
Sonatype Zion
7dd8cd5112 Release Update for 43.0.0 2022-11-07 16:44:38 +00:00
Lisa Durant
5db6031514 Wording tweak per Vijay 2022-10-26 12:15:37 -04:00
Lisa Durant
70d639ca4e Merge pull request #29 from sonatype/end-support-chart
End of support for chart
2022-10-25 12:33:45 -04:00
John M Flinchbaugh
95b8a984ca upgrade to helm 3.10.1 (#31)
latest helm for packaging and testing.
2022-10-25 12:28:21 -04:00
Lisa Durant
3f0979d531 Update README.md 2022-10-21 12:42:27 -04:00
Lisa Durant
c164995fbf End of support for chart 2022-10-21 12:41:09 -04:00
Matthew Piggott
3a22af41bd NEXUS-35492 - Allow configuring install4j vm arguments (#25) 2022-10-05 12:42:26 -04:00
Olu Shiyanbade
59e8ebcd98 Merge pull request #26 from sonatype/fix_broken_link
Fix broken link
2022-09-30 14:37:55 +01:00
Olu Shiyanbade
5d0bfa8e4e fix link 2022-09-30 10:56:38 +01:00
Sonatype Zion
4b4bbd13f3 Release Update for 42.0.1 2022-09-28 15:38:44 +00:00
Sonatype Zion
77aac91a9f Release Update for 42.0.0 2022-09-28 14:28:27 +00:00
Sergii Pryhoda
0c51e4c7be Merge pull request #22 from sonatype/NEXUS-34974-publish-nxrm-helm-charts 2022-09-28 16:35:17 +03:00
spryhoda
0adb4a9fc7 uncomment the tests related code in Jenkinsfile 2022-09-20 10:43:08 +03:00
spryhoda
1a821d1032 uncomment the tests 2022-09-19 12:41:25 +03:00
spryhoda
1fa72df38c license header added to README.md 2022-09-14 11:26:56 +03:00
spryhoda
8123c3db21 NEXUS-34974 Publish nxrm helm charts to Sonatype helm repo and Artifact Hub 2022-09-13 15:33:07 +03:00
Olu Shiyanbade
595206fdc9 Merge pull request #21 from sonatype/fix-build
fix build
2022-09-02 16:12:52 +01:00
Lisa Durant
7d1dfaa1bd Update README.md 2022-09-02 10:43:11 -04:00
Olu Shiyanbade
de46a3ca1f fix build 2022-09-02 13:06:18 +01:00
Olu Shiyanbade
298a49e994 Merge pull request #20 from sonatype/fix-build
fix build
2022-09-02 12:53:26 +01:00
Olu Shiyanbade
786e5717d2 fix build 2022-09-02 12:50:47 +01:00
Olu Shiyanbade
6ed696ec15 Merge pull request #19 from sonatype/NEXUS-35078-Remove-nexus-repository-manager-helm3-charts
Remove non resiliency helm3-charts
2022-09-02 12:41:59 +01:00
Olu Shiyanbade
e82e7a3208 Remove non resiliency helm3-charts 2022-09-02 11:23:27 +01:00
Lisa Durant
d9da79bb8d Update README.md
wording cleanup
2022-08-30 15:29:11 -04:00
Lisa Durant
670344d45a Merge pull request #15 from sonatype/update-readme
NEXUS-34871 - readme update
2022-08-30 15:15:32 -04:00
Lisa Durant
b5168a2dc3 Merge pull request #16 from sonatype/lisadurant-patch-2
readme update
2022-08-30 15:09:58 -04:00
Olu Shiyanbade
96b919241d resolve conflict 2022-08-30 20:04:28 +01:00
Olu Shiyanbade
5410733d72 Update README.md 2022-08-30 20:00:37 +01:00
Olu Shiyanbade
1b4585d89c readme update 2022-08-30 19:32:36 +01:00
Olu Shiyanbade
4b91e48ef5 readme update 2022-08-30 19:30:05 +01:00
Sonatype Zion
02c19b39ee Release Update for 41.1.3 2022-08-30 15:16:56 +00:00
Olu Shiyanbade
f351b8e244 Merge pull request #14 from sonatype/NEXUS-34871-configure-external-dns-to-create-docker-sub-domain-records-and-https-listener
NEXUS-34871 - Create A records for docker sub domain and configure HTTPS listener for ALB
2022-08-30 15:49:43 +01:00
Olu Shiyanbade
4902991b0c Add more comments to values.yaml 2022-08-30 15:49:21 +01:00
Olu Shiyanbade
0734d746eb Associate sub domains with docker ingress 2022-08-27 00:59:07 +01:00
Olu Shiyanbade
c7c527174f Associate sub domains with docker ingress 2022-08-27 00:38:36 +01:00
Olu Shiyanbade
595db96ef1 license 2022-08-26 22:07:25 +01:00
Olu Shiyanbade
97dfe39202 parameterise hosted zone 2022-08-26 21:35:49 +01:00
Olu Shiyanbade
10ee4a5efb parameterise hosted zone 2022-08-26 21:33:53 +01:00
Olu Shiyanbade
1e5ce73111 specify examples for docker subdomain and cert manager arn 2022-08-26 21:01:10 +01:00
Olu Shiyanbade
862f179251 Configure external-dns to create docker sub domain rcords and https listener 2022-08-26 20:47:16 +01:00
Olu Shiyanbade
769c3b7f7c revert 2022-08-26 20:44:42 +01:00
Olu Shiyanbade
e3af231002 Configure external-dns to create docker sub domain rcords and https listener 2022-08-26 20:42:13 +01:00
Olu Shiyanbade
a0318927b0 Merge pull request #13 from sonatype/fix-typo
fix numbering
2022-08-26 12:33:05 +01:00
Olu Shiyanbade
702f846cb2 fix numbering 2022-08-26 12:31:05 +01:00
Olu Shiyanbade
53b1ba9fcb Merge pull request #12 from sonatype/NEXUS-34129-Update-Broken-links-and-readme
NEXUS-34129 - Update-Broken-links-and-readme
2022-08-26 12:28:54 +01:00
Olu Shiyanbade
1cddb6982b Update Broken links and readme 2022-08-26 11:48:48 +01:00
Lisa Durant
f3c87e8d32 NEXUS-34212 - Update README
Update README with info about adding annotations and labels
2022-07-29 12:05:29 -04:00
36 changed files with 537 additions and 193 deletions

View File

@@ -11,7 +11,7 @@
# Eclipse Foundation. All other trademarks are the property of their respective owners. # Eclipse Foundation. All other trademarks are the property of their respective owners.
# #
FROM docker-all.repo.sonatype.com/alpine/helm:3.9.3 FROM docker-all.repo.sonatype.com/alpine/helm:3.10.1
RUN apk update && apk upgrade && \ RUN apk update && apk upgrade && \
apk add --no-cache bash git openssh apk add --no-cache bash git openssh

View File

@@ -17,16 +17,6 @@ final jira = [
credentialId : 'jenkins-jira', autoRelease: true, failOnError: true credentialId : 'jenkins-jira', autoRelease: true, failOnError: true
] ]
final jiraVersionMappings = [
'nexus-repository-manager': 'helm-nxrm',
'nxrm-aws-resiliency': 'helm-nxrm-aws-resiliency'
]
final chartLocation = [
'nexus-repository-manager': 'nexus-repository-manager',
'nxrm-aws-resiliency': 'nxrm-aws-resiliency'
]
properties([ properties([
parameters([ parameters([
string( string(
@@ -55,7 +45,8 @@ dockerizedBuildPipeline(
runSafely "./upgrade.sh ./nexus-repository-manager ${chartVersion} ${params.appVersion}" runSafely "./upgrade.sh ./nexus-repository-manager ${chartVersion} ${params.appVersion}"
runSafely "./upgrade.sh ./nxrm-aws-resiliency ${chartVersion} ${params.appVersion}" runSafely "./upgrade.sh ./nxrm-aws-resiliency ${chartVersion} ${params.appVersion}"
runSafely './build.sh' runSafely './build.sh'
runSafely 'git add nxrm-aws-resiliency nexus-repository-manager' runSafely 'git add nxrm-aws-resiliency'
runSafely 'git add nexus-repository-manager'
}, },
skipVulnerabilityScan: true, skipVulnerabilityScan: true,
archiveArtifacts: 'docs/*', archiveArtifacts: 'docs/*',

28
LICENSE
View File

@@ -1,21 +1,13 @@
MIT License Copyright (c) 2020-present Sonatype, Inc.
Copyright (c) 2020 Sonatype 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
Permission is hereby granted, free of charge, to any person obtaining a copy http://www.apache.org/licenses/LICENSE-2.0
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all Unless required by applicable law or agreed to in writing, software
copies or substantial portions of the Software. distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR See the License for the specific language governing permissions and
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, limitations under the License.
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -12,17 +12,20 @@
Eclipse Foundation. All other trademarks are the property of their respective owners. Eclipse Foundation. All other trademarks are the property of their respective owners.
--> -->
# ⚠️ Archive Notice
As of October 24, 2023, we will no longer update or support the [Single-Instance OSS/Pro Kubernetes Chart](https://github.com/sonatype/nxrm3-helm-repository/tree/main/nexus-repository-manager).
## Helm Charts for Sonatype Nexus Repository Manager 3 ## Helm Charts for Sonatype Nexus Repository Manager 3
We provide Helm charts for two different deployment scenarios: We provide Helm charts for two different deployment scenarios:
See the [AWS Single-Instance Resiliency Chart](https://github.com/sonatype/nxrm3-helm-repository/tree/main/aws-single-instance-resiliency) if you are doing the following: See the [AWS Single-Instance Resiliency Chart](https://github.com/sonatype/nxrm3-helm-repository/tree/main/nxrm-aws-resiliency) if you are doing the following:
* Deploying Nexus Repository Pro to an AWS cloud environment with the desire for automatic failover across Availability Zones (AZs) within a single region * Deploying Nexus Repository Pro to an AWS cloud environment with the desire for automatic failover across Availability Zones (AZs) within a single region
* Planning to configure a single Nexus Repository Pro instance within your Kubernetes/EKS cluster with two or more nodes spread across different AZs within an AWS region * Planning to configure a single Nexus Repository Pro instance within your Kubernetes/EKS cluster with two or more nodes spread across different AZs within an AWS region
* Using an external PostgreSQL database (required) * Using an external PostgreSQL database (required)
See the [Single-Instance OSS/Pro Kubernetes Chart](https://github.com/sonatype/nxrm3-helm-repository/tree/main/single-inst-oss-pro-kubernetes) if you are doing the following: See the [Single-Instance OSS/Pro Kubernetes Chart](https://github.com/sonatype/nxrm3-helm-repository/tree/main/nexus-repository-manager) if you are doing the following:
* Using embedded OrientDB (required) * Using embedded OrientDB (required)
* Deploying either Nexus Repository Pro or OSS to an on-premises environment with bare metal/VM server (Node) * Deploying either Nexus Repository Pro or OSS to an on-premises environment with bare metal/VM server (Node)
* Deploying a single Nexus Repository instance within a Kubernetes cluster that has a single Node configured * Deploying a single Nexus Repository instance within a Kubernetes cluster that has a single Node configured

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,24 @@
# 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
# OWNERS file for Kubernetes
OWNERS
*.tar

View File

@@ -3,10 +3,10 @@ name: nexus-repository-manager
# This is the chart version. This version number should be incremented each time you make changes # This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version. # to the chart and its templates, including the app version.
version: 41.1.2 version: 43.0.0
# This is the version number of the application being deployed. This version number should be # This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. # incremented each time you make changes to the application.
appVersion: 3.41.1 appVersion: 3.43.0
description: Sonatype Nexus Repository Manager - Universal Binary repository description: Sonatype Nexus Repository Manager - Universal Binary repository

View File

@@ -12,6 +12,9 @@
Eclipse Foundation. All other trademarks are the property of their respective owners. Eclipse Foundation. All other trademarks are the property of their respective owners.
--> -->
# ⚠️ Archive Notice
As of October 24, 2023, we will no longer update or support this Helm chart.
# Nexus Repository # Nexus Repository
@@ -67,14 +70,9 @@ Do not use this Helm chart and, instead, refer to our [resiliency documentation]
By default, this Chart uses Sonatype's Public Docker image. If you want to use a different image, run with the following: `--set nexus.imageName=<my>/<image>`. By default, this Chart uses Sonatype's Public Docker image. If you want to use a different image, run with the following: `--set nexus.imageName=<my>/<image>`.
### With Red Hat Certified container ## Adding the Sonatype Repository to your Helm
If you're looking run our Certified Red Hat image in an OpenShift4 environment, there is a Certified Operator in OperatorHub. To add as a Helm Repo
---
## Adding the repo
To add as a Helm Repo, use the following:
```helm repo add sonatype https://sonatype.github.io/helm3-charts/``` ```helm repo add sonatype https://sonatype.github.io/helm3-charts/```
--- ---
@@ -111,6 +109,7 @@ The default login is randomized and can be found in `/nexus-data/admin.password`
by setting the environment variable `NEXUS_SECURITY_RANDOMPASSWORD` to `false` in your `values.yaml`. by setting the environment variable `NEXUS_SECURITY_RANDOMPASSWORD` to `false` in your `values.yaml`.
--- ---
## Uninstalling the Chart ## Uninstalling the Chart
To uninstall/delete the deployment, use the following: To uninstall/delete the deployment, use the following:
@@ -134,7 +133,7 @@ The following table lists the configurable parameters of the Nexus chart and the
|--------------------------------------------|----------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------| |--------------------------------------------|----------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------|
| `deploymentStrategy` | Deployment Strategy | `Recreate` | | `deploymentStrategy` | Deployment Strategy | `Recreate` |
| `nexus.imagePullPolicy` | Nexus Repository image pull policy | `IfNotPresent` | | `nexus.imagePullPolicy` | Nexus Repository image pull policy | `IfNotPresent` |
| `nexus.imagePullSecrets` | Secret to download Nexus Repository image from private registry | `nil` | | `imagePullSecrets` | The names of the kubernetes secrets with credentials to login to a registry | `[]` |
| `nexus.docker.enabled` | Enable/disable Docker support | `false` | | `nexus.docker.enabled` | Enable/disable Docker support | `false` |
| `nexus.docker.registries` | Support multiple Docker registries | (see below) | | `nexus.docker.registries` | Support multiple Docker registries | (see below) |
| `nexus.docker.registries[0].host` | Host for the Docker registry | `cluster.local` | | `nexus.docker.registries[0].host` | Host for the Docker registry | `cluster.local` |
@@ -159,7 +158,7 @@ The following table lists the configurable parameters of the Nexus chart and the
| `nexus.hostAliases` | Aliases for IPs in /etc/hosts | [] | | `nexus.hostAliases` | Aliases for IPs in /etc/hosts | [] |
| `nexus.properties.override` | Set to true to override default nexus.properties | `false` | | `nexus.properties.override` | Set to true to override default nexus.properties | `false` |
| `nexus.properties.data` | A map of custom nexus properties if `override` is set to true | `nexus.scripts.allowCreation: true` | | `nexus.properties.data` | A map of custom nexus properties if `override` is set to true | `nexus.scripts.allowCreation: true` |
| `ingress.enabled` | Create an ingress for Nexus Repository | `true` | | `ingress.enabled` | Create an ingress for Nexus Repository | `false` |
| `ingress.annotations` | Annotations to enhance ingress configuration | `{kubernetes.io/ingress.class: nginx}` | | `ingress.annotations` | Annotations to enhance ingress configuration | `{kubernetes.io/ingress.class: nginx}` |
| `ingress.tls.secretName` | Name of the secret storing TLS cert, `false` to use the Ingress' default certificate | `nexus-tls` | | `ingress.tls.secretName` | Name of the secret storing TLS cert, `false` to use the Ingress' default certificate | `nexus-tls` |
| `ingress.path` | Path for ingress rules. GCP users should set to `/*`. | `/` | | `ingress.path` | Path for ingress rules. GCP users should set to `/*`. | `/` |
@@ -201,3 +200,31 @@ The following table lists the configurable parameters of the Nexus chart and the
By default, a `PersistentVolumeClaim` is created and mounted into the `/nexus-data` directory. In order to disable this functionality, you can change the `values.yaml` to disable persistence, which will use an `emptyDir` instead. By default, a `PersistentVolumeClaim` is created and mounted into the `/nexus-data` directory. In order to disable this functionality, you can change the `values.yaml` to disable persistence, which will use an `emptyDir` instead.
> *"An emptyDir volume is first created when a Pod is assigned to a Node, and exists as long as that Pod is running on that node. When a Pod is removed from a node for any reason, the data in the emptyDir is deleted forever."* > *"An emptyDir volume is first created when a Pod is assigned to a Node, and exists as long as that Pod is running on that node. When a Pod is removed from a node for any reason, the data in the emptyDir is deleted forever."*
## Using the Image from the Red Hat Registry
To use the [Nexus Repository Manager image available from Red Hat's registry](https://catalog.redhat.com/software/containers/sonatype/nexus-repository-manager/594c281c1fbe9847af657690),
you'll need to:
* Load the credentials for the registry as a secret in your cluster
```shell
kubectl create secret docker-registry redhat-pull-secret \
--docker-server=registry.connect.redhat.com \
--docker-username=<user_name> \
--docker-password=<password> \
--docker-email=<email>
```
See Red Hat's [Registry Authentication documentation](https://access.redhat.com/RegistryAuthentication)
for further details.
* Provide the name of the secret in `imagePullSecrets` in this chart's `values.yaml`
```yaml
imagePullSecrets:
- name: redhat-pull-secret
```
* Set `image.name` and `image.tag` in `values.yaml`
```yaml
image:
repository: registry.connect.redhat.com/sonatype/nexus-repository-server
tag: 3.39.0-ubi-1
```
---

View File

@@ -48,7 +48,7 @@ spec:
hostAliases: hostAliases:
{{ toYaml .Values.nexus.hostAliases | nindent 8 }} {{ toYaml .Values.nexus.hostAliases | nindent 8 }}
{{- end }} {{- end }}
{{- if .Values.nexus.imagePullSecrets }} {{- with .Values.imagePullSecrets }}
imagePullSecrets: imagePullSecrets:
{{- toYaml . | nindent 8 }} {{- toYaml . | nindent 8 }}
{{- end }} {{- end }}
@@ -59,7 +59,14 @@ spec:
- name: {{ .Chart.Name }} - name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }} imagePullPolicy: {{ .Values.image.pullPolicy }}
securityContext:
allowPrivilegeEscalation: false
runAsNonRoot: true
seccompProfile:
type: RuntimeDefault
capabilities:
drop:
- ALL
lifecycle: lifecycle:
{{- if .Values.deployment.postStart.command }} {{- if .Values.deployment.postStart.command }}
postStart: postStart:

View File

@@ -62,6 +62,9 @@ metadata:
{{- toYaml . | nindent 4 }} {{- toYaml . | nindent 4 }}
{{- end }} {{- end }}
spec: spec:
{{- if $.Values.ingress.ingressClassName }}
ingressClassName: {{ $.Values.ingress.ingressClassName }}
{{- end }}
tls: tls:
- hosts: - hosts:
- {{ $registry.host | quote }} - {{ $registry.host | quote }}

View File

@@ -36,7 +36,14 @@ tests:
pattern: sonatype/nexus3:3\.\d+\.\d+ pattern: sonatype/nexus3:3\.\d+\.\d+
- equal: - equal:
path: spec.template.spec.containers[0].securityContext path: spec.template.spec.containers[0].securityContext
value: null value:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
runAsNonRoot: true
seccompProfile:
type: RuntimeDefault
- equal: - equal:
path: spec.template.spec.containers[0].imagePullPolicy path: spec.template.spec.containers[0].imagePullPolicy
value: IfNotPresent value: IfNotPresent
@@ -44,7 +51,12 @@ tests:
path: spec.template.spec.containers[0].env path: spec.template.spec.containers[0].env
value: value:
- name: INSTALL4J_ADD_VM_PARAMS - name: INSTALL4J_ADD_VM_PARAMS
value: -Xms2703M -Xmx2703M -XX:MaxDirectMemorySize=2703M -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap value: |-
-Xms2703M -Xmx2703M
-XX:MaxDirectMemorySize=2703M
-XX:+UnlockExperimentalVMOptions
-XX:+UseCGroupMemoryLimitForHeap
-Djava.util.prefs.userRoot=/nexus-data/javaprefs
- name: NEXUS_SECURITY_RANDOMPASSWORD - name: NEXUS_SECURITY_RANDOMPASSWORD
value: "true" value: "true"
- equal: - equal:
@@ -83,3 +95,26 @@ tests:
- name: nexus-repository-manager-data - name: nexus-repository-manager-data
persistentVolumeClaim: persistentVolumeClaim:
claimName: RELEASE-NAME-nexus-repository-manager-data claimName: RELEASE-NAME-nexus-repository-manager-data
- equal:
path: spec.template.spec.securityContext
value:
fsGroup: 200
runAsGroup: 200
runAsUser: 200
- it: should use our simple values
template: deployment.yaml
set:
deploymentStrategy: my-strategy
imagePullSecrets:
- name: top-secret
asserts:
- hasDocuments:
count: 1
- equal:
path: spec.strategy.type
value: my-strategy
- equal:
path: spec.template.spec.imagePullSecrets
value:
- name: top-secret

View File

@@ -1,3 +1,4 @@
---
suite: ingress suite: ingress
templates: templates:
- ingress.yaml - ingress.yaml
@@ -97,7 +98,105 @@ tests:
equal: equal:
path: metadata.name path: metadata.name
value: RELEASE-NAME-nexus-repository-manager value: RELEASE-NAME-nexus-repository-manager
- documentIndex: 0
equal:
path: spec
value:
ingressClassName: nginx
rules:
- host: repo.demo
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: RELEASE-NAME-nexus-repository-manager
port:
number: 8081
- documentIndex: 1
equal:
path: metadata.name
value: RELEASE-NAME-nexus-repository-manager-docker-5000
- documentIndex: 1
equal:
path: spec
value:
ingressClassName: nginx
rules:
- host: docker.repo.demo
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: RELEASE-NAME-nexus-repository-manager-docker-5000
port:
number: 5000
tls:
- hosts:
- docker.repo.demo
secretName: registry-secret
- it: we can exclude ingressClassName for repo ingress and docker ingress
set:
ingress:
enabled: true
ingressClassName: {}
nexus:
docker:
enabled: true
registries:
- host: docker.repo.demo
port: 5000
secretName: registry-secret
asserts:
- hasDocuments:
count: 2
- isKind:
of: Ingress
- equal:
path: apiVersion
value: networking.k8s.io/v1
- equal:
path: metadata.labels.[app.kubernetes.io/instance]
value: RELEASE-NAME
- equal:
path: metadata.labels.[app.kubernetes.io/managed-by]
value: Helm
- matchRegex:
path: metadata.labels.[app.kubernetes.io/version]
pattern: \d+\.\d+\.\d+
- matchRegex:
path: metadata.labels.[helm.sh/chart]
pattern: nexus-repository-manager-\d+\.\d+\.\d+
- equal:
path: metadata.labels.[app.kubernetes.io/name]
value: nexus-repository-manager
- equal:
path: metadata.annotations
value:
nginx.ingress.kubernetes.io/proxy-body-size: "0"
- documentIndex: 0
equal:
path: metadata.name
value: RELEASE-NAME-nexus-repository-manager
- documentIndex: 0
equal:
path: spec
value:
rules:
- host: repo.demo
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: RELEASE-NAME-nexus-repository-manager
port:
number: 8081
- documentIndex: 1 - documentIndex: 1
equal: equal:
path: metadata.name path: metadata.name
@@ -121,7 +220,6 @@ tests:
- hosts: - hosts:
- docker.repo.demo - docker.repo.demo
secretName: registry-secret secretName: registry-secret
- it: is disabled by default - it: is disabled by default
asserts: asserts:
- hasDocuments: - hasDocuments:

View File

@@ -2,13 +2,16 @@
statefulset: statefulset:
# This is not supported # This is not supported
enabled: false enabled: false
# By default deploymentStrategy is set to rollingUpdate with maxSurge of 25% and maxUnavailable of 25% . you can change type to `Recreate` or can uncomment `rollingUpdate` specification and adjust them to your usage.
deploymentStrategy: Recreate deploymentStrategy: Recreate
image: image:
# Sonatype Official Public Image # Sonatype Official Public Image
repository: sonatype/nexus3 repository: sonatype/nexus3
tag: 3.41.1 tag: 3.43.0
pullPolicy: IfNotPresent pullPolicy: IfNotPresent
imagePullSecrets:
# for image registries that require login, specify the name of the existing
# kubernetes secret
# - name: <pull-secret-name>
nexus: nexus:
docker: docker:
@@ -16,12 +19,17 @@ nexus:
# registries: # registries:
# - host: chart.local # - host: chart.local
# port: 5000 # port: 5000
# secretName: registrySecret # secretName: registry-secret
env: env:
# minimum recommended memory settings for a small, person instance from # minimum recommended memory settings for a small, person instance from
# https://help.sonatype.com/repomanager3/product-information/system-requirements # https://help.sonatype.com/repomanager3/product-information/system-requirements
- name: INSTALL4J_ADD_VM_PARAMS - name: INSTALL4J_ADD_VM_PARAMS
value: "-Xms2703M -Xmx2703M -XX:MaxDirectMemorySize=2703M -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap" value: |-
-Xms2703M -Xmx2703M
-XX:MaxDirectMemorySize=2703M
-XX:+UnlockExperimentalVMOptions
-XX:+UseCGroupMemoryLimitForHeap
-Djava.util.prefs.userRoot=/nexus-data/javaprefs
- name: NEXUS_SECURITY_RANDOMPASSWORD - name: NEXUS_SECURITY_RANDOMPASSWORD
value: "true" value: "true"
properties: properties:
@@ -72,8 +80,6 @@ nexus:
# - "example.com" # - "example.com"
# - "www.example.com" # - "www.example.com"
imagePullSecrets: []
nameOverride: "" nameOverride: ""
fullnameOverride: "" fullnameOverride: ""

View File

@@ -15,13 +15,13 @@ type: application
# This is the chart version. This version number should be incremented each time you make changes # This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version. # to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/) # Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 41.1.2 version: 43.0.0
# This is the version number of the application being deployed. This version number should be # This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to # incremented each time you make changes to the application. Versions are not expected to
# follow Semantic Versioning. They should reflect the version the application is using. # follow Semantic Versioning. They should reflect the version the application is using.
# It is recommended to use it with quotes. # It is recommended to use it with quotes.
appVersion: 3.41.1 appVersion: 3.43.0
keywords: keywords:
- artifacts - artifacts

View File

@@ -62,14 +62,110 @@ You will also need to complete the steps below. See the referenced AWS documenta
--- ---
## External-dns
This helm chart uses [external-dns](https://github.com/kubernetes-sigs/external-dns) to create 'A' records in AWS Route 53 for our [Docker subdomain feature](https://help.sonatype.com/repomanager3/nexus-repository-administration/formats/docker-registry/docker-subdomain-connector).
See the ```external-dns.alpha.kubernetes.io/hostname``` annotation in the dockerIngress resource in the values.yaml.
### Permissions for external-dns
Open a terminal that has connectivity to your EKS cluster and run the following commands:
```
cat <<'EOF' >> external-dns-r53-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"route53:ChangeResourceRecordSets"
],
"Resource": [
"arn:aws:route53:::hostedzone/*"
]
},
{
"Effect": "Allow",
"Action": [
"route53:ListHostedZones",
"route53:ListResourceRecordSets"
],
"Resource": [
"*"
]
}
]
}
EOF
aws iam create-policy --policy-name "AllowExternalDNSUpdates" --policy-document file://external-dns-r53-policy.json
POLICY_ARN=$(aws iam list-policies --query 'Policies[?PolicyName==`AllowExternalDNSUpdates`].Arn' --output text)
EKS_CLUSTER_NAME=<Your EKS Cluster Name>
aws eks describe-cluster --name $EKS_CLUSTER_NAME --query "cluster.identity.oidc.issuer" --output text
eksctl utils associate-iam-oidc-provider --cluster $EKS_CLUSTER_NAME --approve
ACCOUNT_ID=$(aws sts get-caller-identity --query "Account" --output text)
OIDC_PROVIDER=$(aws eks describe-cluster --name $EKS_CLUSTER_NAME --query "cluster.identity.oidc.issuer" --output text | sed -e 's|^https://||')
```
Note: The value you assign to the 'EXTERNALDNS_NS' variable below should be the same as the one you specify in your values.yaml for namespaces.externaldnsNs
```
EXTERNALDNS_NS=nexus-externaldns
cat <<-EOF > externaldns-trust.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::$ACCOUNT_ID:oidc-provider/$OIDC_PROVIDER"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"$OIDC_PROVIDER:sub": "system:serviceaccount:${EXTERNALDNS_NS}:external-dns",
"$OIDC_PROVIDER:aud": "sts.amazonaws.com"
}
}
}
]
}
EOF
IRSA_ROLE="nexusrepo-external-dns-irsa-role"
aws iam create-role --role-name $IRSA_ROLE --assume-role-policy-document file://externaldns-trust.json
aws iam attach-role-policy --role-name $IRSA_ROLE --policy-arn $POLICY_ARN
ROLE_ARN=$(aws iam get-role --role-name $IRSA_ROLE --query Role.Arn --output text)
echo $ROLE_ARN
```
2. Take note of the ROLE_ARN outputted last above and specify it in your values.yaml for serviceAccount.externaldns.role
## Deployment ## Deployment
1. Pull the [nxrm-resiliency-aws-helmchart](https://github.com/sonatype/nxrm3-helm-repository/blob/main/aws-single-instance-resiliency/Chart.yaml). 1. Add the sonatype repo to your helm:
```helm repo add sonatype https://sonatype.github.io/helm3-charts/ ```
2. Ensure you have updated your values.yaml with appropriate values for your environment. 2. Ensure you have updated your values.yaml with appropriate values for your environment.
- Note that you can specify Ingress annotations via the values.yaml.
- If you wish to add [Labels](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/), you can do so via kubectl. See the [kubectl Cheat Sheet](https://kubernetes.io/docs/reference/kubectl/cheatsheet/) for specific commands.
3. Install the chart using the following: 3. Install the chart using the following:
```helm install nxrm nexus/nxrm-aws-resiliency --values values.yaml``` ```helm install nxrm sonatype/nxrm-aws-resiliency -f values.yaml```
3. Get the Nexus Repository link using the following: 4. Get the Nexus Repository link using the following:
```kubectl get ingresses -n nexusrepo``` ```kubectl get ingresses -n nexusrepo```

View File

@@ -0,0 +1,66 @@
# comment out sa if it was previously created
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: external-dns
namespace: {{ .Values.namespaces.externaldnsNs }}
labels:
app.kubernetes.io/name: external-dns
rules:
- apiGroups: [""]
resources: ["services","endpoints","pods","nodes"]
verbs: ["get","watch","list"]
- apiGroups: ["extensions","networking.k8s.io"]
resources: ["ingresses"]
verbs: ["get","watch","list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: external-dns-viewer
namespace: {{ .Values.namespaces.externaldnsNs }}
labels:
app.kubernetes.io/name: external-dns
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: external-dns
subjects:
- kind: ServiceAccount
name: {{ .Values.serviceAccount.externaldns.name }}
namespace: {{ .Values.namespaces.externaldnsNs }}
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: external-dns
namespace: {{ .Values.namespaces.externaldnsNs }}
labels:
app.kubernetes.io/name: external-dns
spec:
strategy:
type: Recreate
selector:
matchLabels:
app.kubernetes.io/name: external-dns
template:
metadata:
labels:
app.kubernetes.io/name: external-dns
spec:
serviceAccountName: external-dns
containers:
- name: external-dns
image: k8s.gcr.io/external-dns/external-dns:v0.11.0
args:
- --source=service
- --source=ingress
- --domain-filter={{ .Values.externaldns.domainFilter }} # will make ExternalDNS see only the hosted zones matching provided domain, omit to process all available hosted zones
- --provider=aws
- --policy=upsert-only # would prevent ExternalDNS from deleting any records, omit to enable full synchronization
- --aws-zone-type={{ .Values.externaldns.awsZoneType }} # only look at public hosted zones (valid values are public, private or no value for both)
- --registry=txt
- --txt-owner-id=external-dns
env:
- name: AWS_DEFAULT_REGION
value: {{ .Values.statefulset.clusterRegion }}

View File

@@ -39,12 +39,12 @@ metadata:
name: fluent-bit-cluster-info name: fluent-bit-cluster-info
namespace: {{ .Values.namespaces.cloudwatchNs }} namespace: {{ .Values.namespaces.cloudwatchNs }}
data: data:
cluster.name: {{ .Values.deployment.clusterName }} cluster.name: {{ .Values.statefulset.clusterName }}
http.server: "On" http.server: "On"
http.port: "2020" http.port: "2020"
read.head: "Off" read.head: "Off"
read.tail: "On" read.tail: "On"
logs.region: {{ .Values.deployment.logsRegion }} logs.region: {{ .Values.statefulset.logsRegion }}
--- ---
apiVersion: v1 apiVersion: v1
kind: ConfigMap kind: ConfigMap
@@ -77,7 +77,7 @@ data:
[INPUT] [INPUT]
Name tail Name tail
Tag nexus.nexus-log Tag nexus.nexus-log
Path /var/log/containers/{{ .Chart.Name }}-{{ .Chart.Version }}.{{ .Release.Name }}-nxrm.deployment-*-*_{{ .Values.namespaces.nexusNs }}_nxrm-app-*.log Path /var/log/containers/{{ .Chart.Name }}-{{ .Chart.Version | replace "." "-" }}-{{ .Release.Name }}-{{ .Values.statefulset.name }}*{{ .Values.namespaces.nexusNs }}_nxrm-app-*.log
Parser docker Parser docker
DB /var/fluent-bit/state/flb_container.db DB /var/fluent-bit/state/flb_container.db
Mem_Buf_Limit 5MB Mem_Buf_Limit 5MB
@@ -112,7 +112,7 @@ data:
[INPUT] [INPUT]
Name tail Name tail
Tag nexus.request-log Tag nexus.request-log
Path /var/log/containers/{{ .Chart.Name }}-{{ .Chart.Version }}.{{ .Release.Name }}-nxrm.deployment-*-*_{{ .Values.namespaces.nexusNs }}_request-log-*.log Path /var/log/containers/{{ .Chart.Name }}-{{ .Chart.Version | replace "." "-" }}-{{ .Release.Name }}-{{ .Values.statefulset.name }}*{{ .Values.namespaces.nexusNs }}_request-log-*.log
Parser docker Parser docker
DB /var/fluent-bit/state/flb_container.db DB /var/fluent-bit/state/flb_container.db
Mem_Buf_Limit 5MB Mem_Buf_Limit 5MB
@@ -147,7 +147,7 @@ data:
[INPUT] [INPUT]
Name tail Name tail
Tag nexus.audit-log Tag nexus.audit-log
Path /var/log/containers/{{ .Chart.Name }}-{{ .Chart.Version }}.{{ .Release.Name }}-nxrm.deployment-*-*_{{ .Values.namespaces.nexusNs }}_audit-log-*.log Path /var/log/containers/{{ .Chart.Name }}-{{ .Chart.Version | replace "." "-" }}-{{ .Release.Name }}-{{ .Values.statefulset.name }}*{{ .Values.namespaces.nexusNs }}_audit-log-*.log
Parser docker Parser docker
DB /var/fluent-bit/state/flb_container.db DB /var/fluent-bit/state/flb_container.db
Mem_Buf_Limit 5MB Mem_Buf_Limit 5MB
@@ -182,7 +182,7 @@ data:
[INPUT] [INPUT]
Name tail Name tail
Tag nexus.tasks-log Tag nexus.tasks-log
Path /var/log/containers/{{ .Chart.Name }}-{{ .Chart.Version }}.{{ .Release.Name }}-nxrm.deployment-*-*_{{ .Values.namespaces.nexusNs }}_tasks-log-*.log Path /var/log/containers/{{ .Chart.Name }}-{{ .Chart.Version | replace "." "-" }}-{{ .Release.Name }}-{{ .Values.statefulset.name }}*{{ .Values.namespaces.nexusNs }}_tasks-log-*.log
Parser docker Parser docker
DB /var/fluent-bit/state/flb_container.db DB /var/fluent-bit/state/flb_container.db
Mem_Buf_Limit 5MB Mem_Buf_Limit 5MB
@@ -263,7 +263,7 @@ spec:
spec: spec:
containers: containers:
- name: fluent-bit - name: fluent-bit
image: amazon/aws-for-fluent-bit:2.10.0 image: amazon/aws-for-fluent-bit:{{ .Values.statefulset.fluentBitVersion }}
imagePullPolicy: Always imagePullPolicy: Always
env: env:
- name: AWS_REGION - name: AWS_REGION

View File

@@ -48,4 +48,4 @@ spec:
service: service:
name: {{ .Chart.Name }}-docker-service name: {{ .Chart.Name }}-docker-service
port: port:
number: {{ .Values.ingress.dockerIngress.port }} number: {{ .Values.service.docker.port }}

View File

@@ -8,3 +8,8 @@ kind: Namespace
metadata: metadata:
name: {{ .Values.namespaces.cloudwatchNs }} name: {{ .Values.namespaces.cloudwatchNs }}
--- ---
apiVersion: v1
kind: Namespace
metadata:
name: {{ .Values.namespaces.externaldnsNs }}
---

View File

@@ -1,28 +0,0 @@
apiVersion: v1
kind: PersistentVolume
metadata:
name: {{ .Chart.Name }}-{{ .Chart.Version }}.{{ .Release.Name }}-ebs-pv
spec:
capacity:
storage: {{ .Values.pv.storage }}
volumeMode: Filesystem
accessModes:
- {{ .Values.pv.accessModes }}
persistentVolumeReclaimPolicy: {{ .Values.pv.reclaimPolicy }}
storageClassName: local-storage
local:
path: {{ .Values.pv.path }}
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: topology.kubernetes.io/zone
operator: In
values:
{{- range $zone := .Values.pv.zones }}
- {{ $zone }}
{{- end }}

View File

@@ -1,12 +0,0 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: {{ .Chart.Name }}-{{ .Chart.Version }}.{{ .Release.Name }}-ebs-claim
namespace: {{ .Values.namespaces.nexusNs }}
spec:
accessModes:
- {{ .Values.pvc.accessModes }}
storageClassName: local-storage
resources:
requests:
storage: {{ .Values.pvc.storage }}

View File

@@ -5,3 +5,12 @@ metadata:
namespace: {{ .Values.namespaces.nexusNs }} namespace: {{ .Values.namespaces.nexusNs }}
annotations: annotations:
eks.amazonaws.com/role-arn: {{ .Values.serviceAccount.role }} eks.amazonaws.com/role-arn: {{ .Values.serviceAccount.role }}
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ .Values.serviceAccount.externaldns.name }}
namespace: {{ .Values.namespaces.externaldnsNs }}
annotations:
eks.amazonaws.com/role-arn: {{ .Values.serviceAccount.externaldns.role }}
---

View File

@@ -26,7 +26,7 @@ spec:
selector: selector:
app: nxrm app: nxrm
ports: ports:
- name: docker-connector - name: docker-service
protocol: {{ .Values.service.docker.protocol }} protocol: {{ .Values.service.docker.protocol }}
port: {{ .Values.service.docker.port }} port: {{ .Values.service.docker.port }}
targetPort: {{ .Values.service.docker.targetPort }} targetPort: {{ .Values.service.docker.targetPort }}

View File

@@ -1,12 +1,13 @@
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: StatefulSet
metadata: metadata:
name: {{ .Chart.Name }}-{{ .Chart.Version }}.{{ .Release.Name }}-{{ .Values.deployment.name }} name: {{ .Chart.Name }}-{{ .Chart.Version | replace "." "-"}}-{{ .Release.Name }}-{{ .Values.statefulset.name }}
namespace: {{ .Values.namespaces.nexusNs }} namespace: {{ .Values.namespaces.nexusNs }}
labels: labels:
app: nxrm app: nxrm
spec: spec:
replicas: 1 replicas: 1
serviceName: "{{ .Chart.Name }}-{{ .Chart.Version | replace "." "-"}}-{{ .Release.Name }}-{{ .Values.statefulset.name }}"
selector: selector:
matchLabels: matchLabels:
app: nxrm app: nxrm
@@ -21,7 +22,7 @@ spec:
# otherwise the side car containers will crash a couple of times and backoff whilst waiting # otherwise the side car containers will crash a couple of times and backoff whilst waiting
# for nxrm-app to start and this increases the total start up time. # for nxrm-app to start and this increases the total start up time.
- name: chown-nexusdata-owner-to-nexus-and-init-log-dir - name: chown-nexusdata-owner-to-nexus-and-init-log-dir
image: {{ .Values.deployment.initContainer.image.repository }}:{{ .Values.deployment.initContainer.image.tag }} image: {{ .Values.statefulset.initContainer.image.repository }}:{{ .Values.statefulset.initContainer.image.tag }}
command: [/bin/sh] command: [/bin/sh]
args: args:
- -c - -c
@@ -34,19 +35,20 @@ spec:
touch -a /nexus-data/log/request.log && touch -a /nexus-data/log/request.log &&
chown -R '200:200' /nexus-data chown -R '200:200' /nexus-data
volumeMounts: volumeMounts:
- name: nexusdata - name: nexus-data
mountPath: /nexus-data mountPath: /nexus-data
terminationGracePeriodSeconds: 20
containers: containers:
- name: nxrm-app - name: nxrm-app
image: {{ .Values.deployment.container.image.repository }}:{{ .Values.deployment.container.image.tag }} image: {{ .Values.statefulset.container.image.repository }}:{{ .Values.statefulset.container.image.tag }}
securityContext: securityContext:
runAsUser: 200 runAsUser: 200
imagePullPolicy: {{ .Values.deployment.container.pullPolicy }} imagePullPolicy: {{ .Values.statefulset.container.pullPolicy }}
ports: ports:
- containerPort: {{ .Values.deployment.container.containerPort }} - containerPort: {{ .Values.statefulset.container.containerPort }}
env: env:
- name: DB_NAME - name: DB_NAME
value: "{{ .Values.deployment.container.env.nexusDBName }}" value: "{{ .Values.statefulset.container.env.nexusDBName }}"
- name: DB_PASSWORD - name: DB_PASSWORD
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
@@ -70,41 +72,38 @@ spec:
- name: NEXUS_SECURITY_RANDOMPASSWORD - name: NEXUS_SECURITY_RANDOMPASSWORD
value: "false" value: "false"
- name: INSTALL4J_ADD_VM_PARAMS - name: INSTALL4J_ADD_VM_PARAMS
value: "-Xms2703m -Xmx2703m -XX:MaxDirectMemorySize=2703m -Dnexus.licenseFile=/nxrm-secrets/{{ .Values.secret.license.alias }} \ value: "{{ .Values.statefulset.container.env.install4jAddVmParams }} -Dnexus.licenseFile=/nxrm-secrets/{{ .Values.secret.license.alias }} \
-Dnexus.datastore.enabled=true -Djava.util.prefs.userRoot=${NEXUS_DATA}/javaprefs \ -Dnexus.datastore.enabled=true -Djava.util.prefs.userRoot=${NEXUS_DATA}/javaprefs \
-Dnexus.datastore.nexus.jdbcUrl=jdbc:postgresql://${DB_HOST}:{{ .Values.deployment.container.env.nexusDBPort }}/${DB_NAME} \ -Dnexus.datastore.nexus.jdbcUrl=jdbc:postgresql://${DB_HOST}:{{ .Values.statefulset.container.env.nexusDBPort }}/${DB_NAME} \
-Dnexus.datastore.nexus.username=${DB_USER} \ -Dnexus.datastore.nexus.username=${DB_USER} \
-Dnexus.datastore.nexus.password=${DB_PASSWORD}" -Dnexus.datastore.nexus.password=${DB_PASSWORD}"
volumeMounts: volumeMounts:
- mountPath: /nxrm-secrets - mountPath: /nxrm-secrets
name: nxrm-secrets name: nxrm-secrets
- name: nexusdata - name: nexus-data
mountPath: /nexus-data mountPath: /nexus-data
- name: logback-tasklogfile-override - name: logback-tasklogfile-override
mountPath: /nexus-data/etc/logback/logback-tasklogfile-appender-override.xml mountPath: /nexus-data/etc/logback/logback-tasklogfile-appender-override.xml
subPath: logback-tasklogfile-appender-override.xml subPath: logback-tasklogfile-appender-override.xml
- name: request-log - name: request-log
image: {{ .Values.deployment.requestLogContainer.image.repository }}:{{ .Values.deployment.requestLogContainer.image.tag }} image: {{ .Values.statefulset.requestLogContainer.image.repository }}:{{ .Values.statefulset.requestLogContainer.image.tag }}
args: [/bin/sh, -c, 'tail -n+1 -F /nexus-data/log/request.log'] args: [/bin/sh, -c, 'tail -n+1 -F /nexus-data/log/request.log']
volumeMounts: volumeMounts:
- name: nexusdata - name: nexus-data
mountPath: /nexus-data mountPath: /nexus-data
- name: audit-log - name: audit-log
image: {{ .Values.deployment.auditLogContainer.image.repository }}:{{ .Values.deployment.auditLogContainer.image.tag }} image: {{ .Values.statefulset.auditLogContainer.image.repository }}:{{ .Values.statefulset.auditLogContainer.image.tag }}
args: [/bin/sh, -c, 'tail -n+1 -F /nexus-data/log/audit/audit.log'] args: [/bin/sh, -c, 'tail -n+1 -F /nexus-data/log/audit/audit.log']
volumeMounts: volumeMounts:
- name: nexusdata - name: nexus-data
mountPath: /nexus-data mountPath: /nexus-data
- name: tasks-log - name: tasks-log
image: {{ .Values.deployment.taskLogContainer.image.repository }}:{{ .Values.deployment.taskLogContainer.image.tag }} image: {{ .Values.statefulset.taskLogContainer.image.repository }}:{{ .Values.statefulset.taskLogContainer.image.tag }}
args: [/bin/sh, -c, 'tail -n+1 -F /nexus-data/log/tasks/allTasks.log'] args: [/bin/sh, -c, 'tail -n+1 -F /nexus-data/log/tasks/allTasks.log']
volumeMounts: volumeMounts:
- name: nexusdata - name: nexus-data
mountPath: /nexus-data mountPath: /nexus-data
volumes: volumes:
- name: nexusdata
persistentVolumeClaim:
claimName: {{ .Chart.Name }}-{{ .Chart.Version }}.{{ .Release.Name }}-ebs-claim
- name: nxrm-secrets - name: nxrm-secrets
csi: csi:
driver: secrets-store.csi.k8s.io driver: secrets-store.csi.k8s.io
@@ -118,3 +117,12 @@ spec:
items: items:
- key: logback-tasklogfile-appender-override.xml - key: logback-tasklogfile-appender-override.xml
path: logback-tasklogfile-appender-override.xml path: logback-tasklogfile-appender-override.xml
volumeClaimTemplates:
- metadata:
name: nexus-data
spec:
accessModes: [ "{{.Values.pvc.accessModes }}" ]
storageClassName: "{{ .Chart.Name }}-{{ .Chart.Version}}-{{ .Release.Name }}-ebs-storage"
resources:
requests:
storage: {{.Values.pvc.storage }}

View File

@@ -1,7 +1,11 @@
apiVersion: storage.k8s.io/v1 apiVersion: storage.k8s.io/v1
kind: StorageClass kind: StorageClass
metadata: metadata:
name: {{ .Chart.Name }}-{{ .Chart.Version }}.{{ .Release.Name }}-local-storage name: "{{ .Chart.Name }}-{{ .Chart.Version}}-{{ .Release.Name }}-ebs-storage"
namespace: {{ .Values.namespaces.nexusNs }} namespace: {{ .Values.namespaces.nexusNs }}
provisioner: kubernetes.io/no-provisioner provisioner: kubernetes.io/aws-ebs
parameters:
type: io1
fsType: "ext4"
iopsPerGB: "{{ .Values.storageClass.iopsPerGB }}"
volumeBindingMode: WaitForFirstConsumer volumeBindingMode: WaitForFirstConsumer

View File

@@ -2,10 +2,16 @@
namespaces: namespaces:
nexusNs: nexusrepo nexusNs: nexusrepo
cloudwatchNs: amazon-cloudwatch cloudwatchNs: amazon-cloudwatch
deployment: externaldnsNs: nexus-externaldns
name: nxrm.deployment externaldns:
domainFilter: example.com #your root domain e.g example.com
awsZoneType: private # hosted zone to look at (valid values are public, private or no value for both)
statefulset:
clusterRegion: us-east-1
name: nxrm-statefulset
clusterName: nxrm-nexus clusterName: nxrm-nexus
logsRegion: us-east-1 logsRegion: us-east-1
fluentBitVersion: 2.28.0
initContainer: initContainer:
image: image:
repository: busybox repository: busybox
@@ -13,12 +19,13 @@ deployment:
container: container:
image: image:
repository: sonatype/nexus3 repository: sonatype/nexus3
tag: 3.41.1 tag: 3.44.0
containerPort: 8081 containerPort: 8081
pullPolicy: IfNotPresent pullPolicy: IfNotPresent
env: env:
nexusDBName: nexus nexusDBName: nexus
nexusDBPort: 3306 nexusDBPort: 3306
install4jAddVmParams: "-Xms2703m -Xmx2703m"
requestLogContainer: requestLogContainer:
image: image:
repository: busybox repository: busybox
@@ -34,28 +41,31 @@ deployment:
serviceAccount: serviceAccount:
name: nexus-repository-deployment-sa #This SA is created as part of steps under "AWS Secrets Manager" name: nexus-repository-deployment-sa #This SA is created as part of steps under "AWS Secrets Manager"
role: arn:aws:iam::000000000000:role/nxrm-nexus-role #Role with secretsmanager permissions role: arn:aws:iam::000000000000:role/nxrm-nexus-role #Role with secretsmanager permissions
externaldns:
name: external-dns
role: arn:aws:iam::000000000000:role/nexusrepo-external-dns-irsa-role #Role with route53 permissions needed by external-dns
ingress: ingress:
#host: "nexus.ingress.rule.host" #host to apply this ingress rule to. Uncomment this in your values.yaml and set it as you wish #host: "example.com" #host to apply this ingress rule to. Uncomment this in your values.yaml and set it as you wish
annotations: annotations:
kubernetes.io/ingress.class: alb kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internal # scheme alb.ingress.kubernetes.io/scheme: internal # scheme
alb.ingress.kubernetes.io/subnets: subnet-1,subnet-2 #comma separated list of subnet ids alb.ingress.kubernetes.io/subnets: subnet-1,subnet-2 #comma separated list of subnet ids
dockerIngress: #Ingress for Docker Connector alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]'
#host: "docker.ingress.rule.host" #host to apply this ingress rule to. Uncomment this in your values.yaml and set it as you wish alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-east-1:0000000000000:certificate/00000000-1111-2222-3333-444444444444 # The AWS Certificate Manager ARN for your HTTPS certificate
dockerIngress: #Ingress for Docker Connector - comment out if you don't use docker repositories
annotations: annotations:
kubernetes.io/ingress.class: alb kubernetes.io/ingress.class: alb # comment out if you don't use docker repositories
alb.ingress.kubernetes.io/scheme: internal # scheme alb.ingress.kubernetes.io/scheme: internal # scheme comment out if you don't use docker repositories
alb.ingress.kubernetes.io/subnets: subnet-1,subnet-2 #comma separated list of subnet ids alb.ingress.kubernetes.io/subnets: subnet-1,subnet-2 #comma separated list of subnet ids, comment out if you don't use docker repositories
port: 9090 alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]' #comment out if you don't use docker repositories
pv: alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-east-1:0000000000000:certificate/00000000-1111-2222-3333-444444444444 # Comment out if you don't use docker repositories - The AWS Certificate Manager ARN for your HTTPS certificate
storage: 120Gi external-dns.alpha.kubernetes.io/hostname: dockerrepo1.example.com, dockerrepo2.example.com, dockerrepo3.example.com # Add more docker subdomains using dockerrepoName.example.com otherwise comment out if you don't use docker repositories
volumeMode: Filesystem storageClass:
accessModes: ReadWriteOnce
reclaimPolicy: Retain
path: /mnt
zones: zones:
zone1: us-east-1a zone1: zone1
zone2: us-east-1b zone2: zone2
zone3: zone3
iopsPerGB: "10"
pvc: pvc:
accessModes: ReadWriteOnce accessModes: ReadWriteOnce
storage: 100Gi storage: 100Gi
@@ -66,11 +76,11 @@ service: #Nexus Repo NodePort Service
protocol: TCP protocol: TCP
port: 80 port: 80
targetPort: 8081 targetPort: 8081
docker: #Nodeport Service for Docker connector docker: #Nodeport Service for Docker Service
type: NodePort type: NodePort
protocol: TCP protocol: TCP
port: 9090 port: 9090
targetPort: 9090 targetPort: 8081
secret: secret:
license: license:
arn: arn:aws:secretsmanager:us-east-1:000000000000:secret:nxrm-nexus-license arn: arn:aws:secretsmanager:us-east-1:000000000000:secret:nxrm-nexus-license