Skip to content

Instantly share code, notes, and snippets.

@janakiramm
Created February 2, 2025 15:10
Show Gist options
  • Save janakiramm/61a0d5c17731b887113459958782ab71 to your computer and use it in GitHub Desktop.
Save janakiramm/61a0d5c17731b887113459958782ab71 to your computer and use it in GitHub Desktop.
Kro RGD for WordPress
apiVersion: kro.run/v1alpha1
kind: ResourceGraphDefinition
metadata:
name: wp-app
spec:
schema:
apiVersion: v1alpha1
kind: Application
spec:
name: string | default="wordpress"
mysqlPassword: string
storageClass: string | default="standard"
ingress:
enabled: boolean | default=false
resources:
- id: mysqlSecret
template:
apiVersion: v1
kind: Secret
metadata:
name: ${schema.spec.name}-mysql-pass
type: Opaque
data:
password: ${schema.spec.mysqlPassword}
- id: mysqlPvc
template:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: ${schema.spec.name}-mysql-pv-claim
labels:
app: ${schema.spec.name}
spec:
storageClassName: ${schema.spec.storageClass}
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
- id: mysqlDeployment
template:
apiVersion: apps/v1
kind: Deployment
metadata:
name: ${schema.spec.name}-wordpress-mysql
labels:
app: ${schema.spec.name}
spec:
replicas: 1
selector:
matchLabels:
app: ${schema.spec.name}
tier: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: ${schema.spec.name}
tier: mysql
spec:
containers:
- image: mysql:8.0
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: ${schema.spec.name}-mysql-pass
key: password
- name: MYSQL_DATABASE
value: wordpress
- name: MYSQL_USER
value: wordpress
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: ${schema.spec.name}-mysql-pass
key: password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: ${schema.spec.name}-mysql-pv-claim
- id: mysqlService
template:
apiVersion: v1
kind: Service
metadata:
name: ${schema.spec.name}-wordpress-mysql
labels:
app: ${schema.spec.name}
spec:
ports:
- port: 3306
selector:
app: ${schema.spec.name}
tier: mysql
clusterIP: None
- id: wordpressPvc
template:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: ${schema.spec.name}-wp-pv-claim
labels:
app: ${schema.spec.name}
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: ${schema.spec.storageClass}
- id: wordpressDeployment
template:
apiVersion: apps/v1
kind: Deployment
metadata:
name: ${schema.spec.name}-wordpress
labels:
app: ${schema.spec.name}
spec:
replicas: 1
selector:
matchLabels:
app: ${schema.spec.name}
tier: frontend
strategy:
type: Recreate
template:
metadata:
labels:
app: ${schema.spec.name}
tier: frontend
spec:
containers:
- image: wordpress:6.2.1-apache
name: wordpress
env:
- name: WORDPRESS_DB_HOST
value: ${schema.spec.name}-wordpress-mysql
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: ${schema.spec.name}-mysql-pass
key: password
- name: WORDPRESS_DB_USER
value: wordpress
ports:
- containerPort: 80
name: wordpress
volumeMounts:
- name: wordpress-persistent-storage
mountPath: /var/www/html
volumes:
- name: wordpress-persistent-storage
persistentVolumeClaim:
claimName: ${schema.spec.name}-wp-pv-claim
- id: wordpressService
template:
apiVersion: v1
kind: Service
metadata:
name: ${schema.spec.name}-wordpress
labels:
app: ${schema.spec.name}
spec:
ports:
- port: 80
selector:
app: ${schema.spec.name}
tier: frontend
type: NodePort
- id: wordpressIngress
includeWhen:
- ${schema.spec.ingress.enabled}
template:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ${schema.spec.name}-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: ${schema.spec.name}.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: ${schema.spec.name}-wordpress
port:
number: 80
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment