diff --git a/applications/wordpress-microservice/.helmignore b/applications/wordpress-microservice/.helmignore new file mode 100644 index 0000000..0e8a0eb --- /dev/null +++ b/applications/wordpress-microservice/.helmignore @@ -0,0 +1,23 @@ +# 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 +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/applications/wordpress-microservice/Chart.lock b/applications/wordpress-microservice/Chart.lock new file mode 100644 index 0000000..9a6abdf --- /dev/null +++ b/applications/wordpress-microservice/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: replicated + repository: oci://registry.replicated.com/library + version: 1.0.0 +digest: sha256:347f35218b0b2617efb740acf978b161d0a97b64dcb0349b519bfefa6c10dc76 +generated: "2025-02-03T03:05:00.742181+05:30" diff --git a/applications/wordpress-microservice/Chart.yaml b/applications/wordpress-microservice/Chart.yaml new file mode 100644 index 0000000..53cf872 --- /dev/null +++ b/applications/wordpress-microservice/Chart.yaml @@ -0,0 +1,14 @@ +apiVersion: v2 +name: wordpress-microservice +description: A Helm chart for deploying WordPress with MariaDB +type: application +version: 0.1.0 +appVersion: 1.0.0 +dependencies: +- name: replicated + repository: oci://registry.replicated.com/library + version: ">=1.0.0-beta.31 <2.0.0" # keeps dependency updated within version 1.x but avoids an automatic upgrade to 2.x +#- name: mariadb +# version: ">=10.3.0" +# repository: "https://charts.bitnami.com/bitnami" +# condition: database.embedded.mariadb.enabled diff --git a/applications/wordpress-microservice/manifests/embedded-cluster.yaml b/applications/wordpress-microservice/manifests/embedded-cluster.yaml new file mode 100644 index 0000000..1dc0190 --- /dev/null +++ b/applications/wordpress-microservice/manifests/embedded-cluster.yaml @@ -0,0 +1,4 @@ +apiVersion: embeddedcluster.replicated.com/v1beta1 +kind: Config +spec: + version: 1.19.0+k8s-1.30 diff --git a/applications/wordpress-microservice/manifests/k8s-app.yaml b/applications/wordpress-microservice/manifests/k8s-app.yaml new file mode 100644 index 0000000..0570845 --- /dev/null +++ b/applications/wordpress-microservice/manifests/k8s-app.yaml @@ -0,0 +1,10 @@ +apiVersion: app.k8s.io/v1beta1 +kind: Application +metadata: + name: "wordpress-microservice" +spec: + descriptor: + links: + - description: Open App + # needs to match applicationUrl in kots-app.yaml + url: "http://wordpress-microservice" diff --git a/applications/wordpress-microservice/manifests/kots-app.yaml b/applications/wordpress-microservice/manifests/kots-app.yaml new file mode 100644 index 0000000..609ccf0 --- /dev/null +++ b/applications/wordpress-microservice/manifests/kots-app.yaml @@ -0,0 +1,14 @@ +apiVersion: kots.io/v1beta1 +kind: Application +metadata: + name: wordpress-microservice +spec: + title: Wordpress-Microservice + statusInformers: + - deployment/wordpress + ports: + - serviceName: "wordpress-microservice" + servicePort: 80 + localPort: 30080 + applicationUrl: "http://wordpress-microservice" + icon: https://raw.githubusercontent.com/cncf/artwork/master/projects/kubernetes/icon/color/kubernetes-icon-color.png diff --git a/applications/wordpress-microservice/manifests/wordpress-microservice.yaml b/applications/wordpress-microservice/manifests/wordpress-microservice.yaml new file mode 100644 index 0000000..5cb623a --- /dev/null +++ b/applications/wordpress-microservice/manifests/wordpress-microservice.yaml @@ -0,0 +1,17 @@ +apiVersion: kots.io/v1beta2 +kind: HelmChart +metadata: + name: wordpress-microservice +spec: + # chart identifies a matching chart from a .tgz + chart: + name: wordpress-microservice + chartVersion: 0.1.0 + optionalValues: + - when: 'repl{{ eq Distribution "embedded-cluster" }}' + recursiveMerge: false + values: + service: + type: NodePort + nodePorts: + http: "30080" diff --git a/applications/wordpress-microservice/templates/_helpers.tpl b/applications/wordpress-microservice/templates/_helpers.tpl new file mode 100644 index 0000000..7c5d316 --- /dev/null +++ b/applications/wordpress-microservice/templates/_helpers.tpl @@ -0,0 +1,62 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "wordpress-microservice.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app 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 "wordpress-microservice.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "wordpress-microservice.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "wordpress-microservice.labels" -}} +helm.sh/chart: {{ include "wordpress-microservice.chart" . }} +{{ include "wordpress-microservice.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "wordpress-microservice.selectorLabels" -}} +app.kubernetes.io/name: {{ include "wordpress-microservice.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "wordpress-microservice.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "wordpress-microservice.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/applications/wordpress-microservice/templates/cronjob.yaml b/applications/wordpress-microservice/templates/cronjob.yaml new file mode 100644 index 0000000..ac78fce --- /dev/null +++ b/applications/wordpress-microservice/templates/cronjob.yaml @@ -0,0 +1,29 @@ +apiVersion: batch/v1 +kind: CronJob +metadata: + name: {{ .Values.cronjob.name }} + namespace: {{ .Release.Namespace }} +spec: + schedule: "{{ .Values.cronjob.schedule }}" + jobTemplate: + spec: + template: + spec: + containers: + - name: metrics-reporter + image: "{{ .Values.cronjob.image.registry }}/{{ .Values.cronjob.image.repository }}:{{ .Values.cronjob.image.tag }}" + #image: "{{ .Values.cronjob.image }}" + command: ["sh", "-c"] + args: + - | + totalPosts=$((RANDOM % {{ .Values.cronjob.maxTotalPosts }} + 1)) + activeUsers=$((RANDOM % {{ .Values.cronjob.maxActiveUsers }} + 1)) + curl -X POST {{ .Values.cronjob.metricsEndpoint }} \ + -H "Content-Type: application/json" \ + -d "{ + \"data\": { + \"total_posts\": $totalPosts, + \"active_users\": $activeUsers + } + }" + restartPolicy: OnFailure diff --git a/applications/wordpress-microservice/templates/mariadb-deployment.yaml b/applications/wordpress-microservice/templates/mariadb-deployment.yaml new file mode 100644 index 0000000..fe855bd --- /dev/null +++ b/applications/wordpress-microservice/templates/mariadb-deployment.yaml @@ -0,0 +1,44 @@ +{{- if .Values.database.embedded }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ .Release.Name }}-mariadb + namespace: {{ .Release.Namespace }} +spec: + replicas: 1 + selector: + matchLabels: + app: mariadb + template: + metadata: + labels: + app: mariadb + spec: + containers: + - name: mariadb + image: mariadb:10.5 + env: + - name: MYSQL_DATABASE + valueFrom: + secretKeyRef: + name: {{ .Release.Name }}-db-secret + key: database + - name: MYSQL_USER + valueFrom: + secretKeyRef: + name: {{ .Release.Name }}-db-secret + key: username + - name: MYSQL_PASSWORD + valueFrom: + secretKeyRef: + name: {{ .Release.Name }}-db-secret + key: password + - name: MARIADB_ROOT_PASSWORD + valueFrom: + secretKeyRef: + name: {{ .Release.Name }}-db-secret + key: root-password + ports: + - containerPort: 3306 + name: mysql +{{- end }} diff --git a/applications/wordpress-microservice/templates/mariadb-service.yaml b/applications/wordpress-microservice/templates/mariadb-service.yaml new file mode 100644 index 0000000..1f1f2e6 --- /dev/null +++ b/applications/wordpress-microservice/templates/mariadb-service.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + name: mariadb + labels: + {{- include "wordpress-microservice.labels" . | nindent 4 }} +spec: + type: {{ .Values.mariadb.service.type }} + ports: + - port: {{ .Values.mariadb.service.port }} + targetPort: 3306 + selector: + app: wordpress diff --git a/applications/wordpress-microservice/templates/secret.yaml b/applications/wordpress-microservice/templates/secret.yaml new file mode 100644 index 0000000..a4d93bb --- /dev/null +++ b/applications/wordpress-microservice/templates/secret.yaml @@ -0,0 +1,25 @@ +{{- if .Values.database.embedded }} +apiVersion: v1 +kind: Secret +metadata: + name: {{ .Release.Name }}-db-secret + namespace: {{ .Release.Namespace }} +type: Opaque +data: + username: {{ .Values.database.user | b64enc }} + password: {{- $existingSecret := (lookup "v1" "Secret" .Release.Namespace (printf "%s-db-secret" .Release.Name)) -}} + {{- if and $existingSecret (index $existingSecret "data" "password") -}} + {{- index $existingSecret.data "password" -}} + {{- else -}} + {{ randAlphaNum 16 | b64enc }} + {{- end }} + root-password: + {{- if and $existingSecret (index $existingSecret "data" "root-password") -}} + {{- index $existingSecret.data "root-password" -}} + {{- else -}} + {{ randAlphaNum 16 | b64enc }} + {{- end }} + #password: {{ .Values.database.password | default (randAlphaNum 16) | b64enc }} + #root-password: {{ .Values.database.rootPassword | default (randAlphaNum 16) | b64enc }} + database: {{ .Values.database.name | b64enc }} +{{- end }} diff --git a/applications/wordpress-microservice/templates/wordpress-deployment.yaml b/applications/wordpress-microservice/templates/wordpress-deployment.yaml new file mode 100644 index 0000000..f7e02a0 --- /dev/null +++ b/applications/wordpress-microservice/templates/wordpress-deployment.yaml @@ -0,0 +1,37 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: wordpress + labels: + {{- include "wordpress-microservice.labels" . | nindent 4 }} +spec: + replicas: {{ .Values.wordpress.replicaCount }} + selector: + matchLabels: + app: wordpress + template: + metadata: + labels: + app: wordpress + spec: + containers: + - name: wordpress + image: "{{ .Values.wordpress.image.repository }}:{{ .Values.wordpress.image.tag }}" + imagePullPolicy: {{ .Values.wordpress.image.pullPolicy }} + ports: + - containerPort: 80 + env: + - name: WORDPRESS_DB_HOST + value: "{{ if .Values.database.embedded }}{{ .Release.Name }}-mariadb{{ else }}{{ .Values.database.external.host }}{{ end }}" + - name: WORDPRESS_DB_USER + valueFrom: + secretKeyRef: + name: {{ if .Values.database.embedded }}{{ .Release.Name }}-db-secret{{ else }}{{ .Values.database.external.secretName }}{{ end }} + key: username + - name: WORDPRESS_DB_PASSWORD + valueFrom: + secretKeyRef: + name: {{ if .Values.database.embedded }}{{ .Release.Name }}-db-secret{{ else }}{{ .Values.database.external.secretName }}{{ end }} + key: password + - name: WORDPRESS_DB_NAME + value: "{{ .Values.database.name }}" diff --git a/applications/wordpress-microservice/templates/wordpress-service.yaml b/applications/wordpress-microservice/templates/wordpress-service.yaml new file mode 100644 index 0000000..a570289 --- /dev/null +++ b/applications/wordpress-microservice/templates/wordpress-service.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Service +metadata: + name: wordpress + labels: + {{- include "wordpress-microservice.labels" . | nindent 4 }} +spec: + type: {{ .Values.wordpress.service.type }} + ports: + - port: {{ .Values.wordpress.service.port }} + targetPort: 80 + nodePort: {{ .Values.wordpress.service.nodePort }} + selector: + app: wordpress diff --git a/applications/wordpress-microservice/values.yaml b/applications/wordpress-microservice/values.yaml new file mode 100644 index 0000000..a83960c --- /dev/null +++ b/applications/wordpress-microservice/values.yaml @@ -0,0 +1,51 @@ +wordpress: + image: + repository: wordpress + tag: "latest" + pullPolicy: IfNotPresent + service: + type: NodePort + port: 80 + nodePort: 30080 + replicaCount: 1 + +mariadb: + image: + registry: docker.io + repository: mariadb + tag: "latest" + #image: + # repository: mariadb + # tag: "latest" + pullPolicy: IfNotPresent + service: + type: ClusterIP + port: 3306 + replicaCount: 1 + +cronjob: + name: custom-data-reporter + schedule: "*/5 * * * *" + #image: curlimages/curl:latest + image: + registry: docker.io + repository: curlimages/curl + tag: latest + metricsEndpoint: "http://replicated:3000/api/v1/app/custom-metrics" + maxTotalPosts: 500 # Maximum value for totalPosts + maxActiveUsers: 100 # Maximum value for activeUsers + +database: + embedded: true # Set to false to use an external database + name: wordpress_db + user: wordpress_user + password: "" # Auto-generated if left empty for embedded DB + rootPassword: "" # Auto-generated if left empty + host: "" # Empty for embedded DB; required for external DB + port: 3306 # Default MySQL/MariaDB port + + external: # External DB details (only used if embedded: false) + host: "" + user: "" + password: "" + name: ""